美文网首页
rocketmq集群sync模式

rocketmq集群sync模式

作者: 55e4b4018300 | 来源:发表于2020-01-29 00:13 被阅读0次

四台服务器

nameIP服务 配置

rocketmq-a

192.168.33.11broker-a,namesrv,consolecpu:2,内存:2G

rocketmq-a-s

192.168.33.12broker-a-s,namesrv,console

cpu:2,内存:2G

rocketmq-b

192.168.33.13

broker-b,namesrv,console

cpu:2,内存:2G

rocketmq-b-s

192.168.33.14

broker-b-s,namesrv,console

cpu:2,内存:2G

运行初始化脚本

搭建java-1.8环境,略

RocketMQ部署类型

单个Master

    单机模式, 即只有一个Broker, 如果Broker宕机了, 会导致RocketMQ服务不可用, 不推荐使用.

多Master模式

    组成一个集群, 集群每个节点都是Master节点, 配置简单, 性能也是最高, 某节点宕机重启不会影响RocketMQ服务, 缺点就是如果某个节点宕机了, 会导致该节点未被消费的消息在在节点恢复前不可订阅.

多Master多Slave模式,异步复制

    每个Master配置一个Slave, 多对Master-Slave, Master与Slave消息采用异步复制方式, 主从消息一致会有毫秒级的延迟. 优点是弥补了多Master模式下节点宕机后在恢复前不可订阅的问题, 在Master宕机后, 消费者还可以从Slave节点进行消费, 缺点就是如果Master宕机, 磁盘损坏的情况下, 如果没有即使将消息复制到Slave, 会导致有少量消息丢失.

多Master多Slave模式,同步双写

    每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。缺点就是性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。

由于项目对于安全性要求较高,所以选择多Master多Slave模式,同步双写模式

首先编译源码包

rocketmq-a节点

```

mkdir/data/

cd/data

#maven环境

wgethttp://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tarxvfapache-maven-3.6.3-bin.tar.gz-C/data

cat>>/etc/profile<<EOF

exportMAVEN_HOME=/data/maven

exportPATH=\$PATH:\$MAVEN_HOME/bin

EOF

source/etc/profile

mvn--version

#rocketmqlogs路径在这里写死了,需要改源码:user.home改为/data,根据自己需要          未能解决

#vim /data/rocketmq-release-4.5.2/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java

#String clientLogRoot = System.getProperty(CLIENT_LOG_ROOT, System.getProperty("/data") + "/logs/rocketmqlogs")

#编译

wgethttps://codeload.github.com/apache/rocketmq/zip/release-4.5.2

unziprocketmq-release-4.5.2.zip

cdrocketmq-release-4.5.2

mvn-Prelease-all-DskipTestscleaninstall-U

#编译完成后文件路径:./distribution/target/rocketmq-4.5.2.tar.gz

#分发文件

scp./distribution/target/rocketmq-4.5.2.tar.gz192.168.33.12:/data

scp./distribution/target/rocketmq-4.5.2.tar.gz192.168.33.13:/data

scp./distribution/target/rocketmq-4.5.2.tar.gz192.168.33.14:/data

mv./distribution/target/rocketmq-4.5.2.tar.gz/data

```

配置broker,namesrv

rocketmq-a节点

```

useradd-s/sbin/nologinrocketmq

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv

cd/data/rocketmq/conf

vimnamesrv.properties#默认没有这个文件,新建一个

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-a.properties

#集群名字,识别标识,必须统一

brokerClusterName=Ty-rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样  例如:在a.properties 文件中写 broker-a  在b.properties 文件中写 broker-b

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)

namesrvAddr=192.168.33.11:5432;192.168.33.12:5432;192.168.33.13:5432;192.168.33.14:5432#默认9876,修改只为验证配置文件

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数。由于是4个broker节点,所以设置为4

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10911

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=80

#存储路径

storePathRootDir=/data/rocketmq/store

#commitLog 存储路径

storePathCommitLog=/data/rocketmq/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/rocketmq/store/consumequeue

#消息索引存储路径

storePathIndex=/data/rocketmq/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/data/rocketmq/store/abort

#限制的消息大小

maxMessageSize=65536

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE

brokerRole=SYNC_MASTER

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

#sendMessageThreadPoolNums=128

#拉消息线程池数量

#pullMessageThreadPoolNums=128

#编写service文件

vim/usr/lib/systemd/system/rocketmq.service

[Unit]

After=network-online.target

[Service]

#配置文件的名字,根据每个服务器的角色更改

ExecStart=/data/rocketmq/bin/mqbroker-c/data/rocketmq/conf/2m-2s-sync/broker-a.properties

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=0

KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

Restart=always

User=rocketmq

Group=rocketmq

WorkingDirectory=/data/rocketmq/

[Install]

WantedBy=multi-user.target

scp/usr/lib/systemd/system/rocketmq.service192.168.33.12:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/rocketmq.service192.168.33.13:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/rocketmq.service192.168.33.14:/usr/lib/systemd/system/

#修改日志目录,默认在用户家目录下

sed-i's#${user.home}#/data#g'/data/rocketmq/conf/*.xml

```

rocketqm-a-s节点

```

cd/data

useradd-s/sbin/nologinrocketmq

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv,不配置没所谓

cd/data/rocketmq/conf

vimnamesrv.properties#默认没有这个文件,新建一个

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-a-s.properties#仅三个地方不一样

brokerName=broker-a#名称需要和主节点保持一致 

brokerId=1#ID=0为master,大于0为slave

brokerRole=SLAVE#配置为从

vim/usr/lib/systemd/system/rocketmq.service

ExecStart=/data/rocketmq/bin/mqbroker-c/data/rocketmq/conf/2m-2s-sync/broker-a-s.properties#修改配置文件为a-s

sed-i's#${user.home}#/data#g'/data/rocketmq/conf/*.xml

```

rocketqm-b节点

```

cd/data

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv

cd/data/rocketmq/conf

vimnamesrv.properties#默认没有这个文件,新建一个

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-b.properties#仅三个地方不一样

brokerName=broker-b#名称需要和主节点保持一致 

brokerId=0#ID=0为master,大于0为slave

brokerRole=SYNC_MASTER#配置为主

vim/usr/lib/systemd/system/rocketmq.service

ExecStart=/data/rocketmq/bin/mqbroker-c/data/rocketmq/conf/2m-2s-sync/broker-b.properties#修改配置文件为a-s

sed-i's#${user.home}#/data#g'/data/rocketmq/conf/*.xml  #日志路径

```

rocketqm-b-s节点

```

cd/data

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv

cd/data/rocketmq/conf

vimnamesrv.properties#默认没有这个文件,新建一个

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-b-s.properties#仅三个地方不一样

brokerName=broker-b#名称需要和主节点保持一致 

brokerId=1#ID=0为master,大于0为slave

brokerRole=SLAVE#配置为从

vim/usr/lib/systemd/system/rocketmq.service

ExecStart=/bin/sh-c'/data/rocketmq/bin/mqbroker -c /data/rocketmq/conf/2m-2s-sync/broker-b-s.properties'#修改配置文件为a-s

sed-i's#${user.home}#/data/rocketmq#g'/data/rocketmq/conf/*.xml

```

四台服务器首先启动namesrv

rocketmq-a

```

vim/usr/lib/systemd/system/namesrv.service

[Unit]

After=network-online.target

[Service]

ExecStart=/data/rocketmq/bin/mqnamesrv

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=0

KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

Restart=always

User=rocketmq

Group=rocketmq

WorkingDirectory=/data/rocketmq/

[Install]

WantedBy=multi-user.target

systemctlenablenamesrv.service&&systemctlstartnamesrv.service

scp/usr/lib/systemd/system/namesrv.service192.168.33.12:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/namesrv.service192.168.33.13:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/namesrv.service192.168.33.14:/usr/lib/systemd/system/

```

其他几台服务器启动namesrv.service

```

systemctl enable  namesrv.service

systemctlstartnamesrv.service

```

所有节点,修改broker内存使用

根据环境决定,这是本机测试内存较小使用的数值

```

vim/data/rocketmq/bin/runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

```

所有节点启动rocketmq.service

``

systemctlenablerocketmq&&systemctlstartrocketmq

```

rocketMq监控平台rocketmq-console高可用部署

rocketmq-a节点

高可用设想,在所有节点上部署rocketmq-console,使用F5进行调度实现高可用

```

cd/data

wgethttps://github.com/apache/rocketmq-externals/archive/rocketmq-console-1.0.0.tar.gz

tarxvfrocketmq-console-1.0.0.tar.gz

vim/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/src/main/resources/application.properties

server.contextPath=

server.port=8080#监听端口

#spring.application.index=true

spring.application.name=rocketmq-console

spring.http.encoding.charset=UTF-8

spring.http.encoding.enabled=true

spring.http.encoding.force=true

logging.config=classpath:logback.xml

#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876

rocketmq.config.namesrvAddr=192.168.33.11:5432;192.168.33.12:5432;192.168.33.13:5432;192.168.33.14:5432#namesrv的地址ip:port;

#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true

rocketmq.config.isVIPChannel=#Rocket如果开启了VIP通道,VIP通道端口为10911-2=10909。若Rocket服务器未启动端口10909,则报connect to <:10909> failed。

#rocketmq-console's data path:dashboard/monitor

rocketmq.config.dataPath=/tmp/rocketmq-console/data

#set it false if you don't want use dashboard.default true

rocketmq.config.enableDashBoardCollect=true

#修改日志路径

vim/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/src/main/resources/logback.xml

<file>/data/logs/consolelogs/rocketmq-console.log</file>

<fileNamePattern>/data/logs/consolelogs/rocketmq-console-%d{yyyy-MM-dd}.%i.log

</fileNamePattern>

cd/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console

mvncleanpackage-Dmaven.test.skip=true

#编译好的包:/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar

vim/usr/lib/systemd/system/rocketmq-console.service

[Unit]

After=network-online.target

[Service]

ExecStart=java-jar/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=0

KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

Restart=always

User=rocketmq

Group=rocketmq

WorkingDirectory=/data//rocketmq-console/

[Install]

WantedBy=multi-user.target

systemctlenablerocketmq-console.service

systemctlstartrocketmq-console.service

```

相关文章

网友评论

      本文标题:rocketmq集群sync模式

      本文链接:https://www.haomeiwen.com/subject/ougwbftx.html