Linux环境快速搭建RocketMQ双Master模式

RocketMQ的Broker集群部署模式:单Master模式、多Master模式、多Master多Slave模式(异步复制)、多Master多Slave模式(同步双写)等。
明确个概念,RocketMQ Slave不可以写,可以读,类似于MySQL的主从机制。
单Master模式: 无需多言,一旦单个broker重启或宕机,一切都结束了!很显然,线上不可以使用。
多Master模式: 全是Master,没有Slave。当然,一个broker宕机了,应用是无影响的,缺点在于宕机的Master上未被消费的消息在Master没有恢复之前不可以订阅。
多Master多Slave模式(异步复制): 多对Master-Slave,高可用!采用异步复制的方式,主备之间短暂延迟,MS级别。Master宕机,消费者可以从Slave上进行消费,不受影响,但是Master的宕机,会导致丢失掉极少量的消息。
多Master多Slave模式(同步双写): 和上面的区别点在于采用的是同步方式,也就是在Master/Slave都写成功的前提下,向应用返回成功,可见不论是数据,还是服务都没有单点,都非常可靠!缺点在于同步的性能比异步稍低。
第一步:修改/etc/hosts文件

重启网卡:service network restart

相互ping一下,在121机器上ping 192.168.99.121   ping  rocketmq-nameserver2   ping  rocketmq-master2 。 122机器上也一样。

第二步,解压并创建存储路径

1、如果下载下来的是源码,那编译源码,具体如何编译源码,参考官网https://rocketmq.incubator.apache.org/docs/quick-start/

2、如果下载下来的是编译后的压缩包,则解压:

tar -xvf alibaba-rocketmq-4.1.0.tar.gz

3、创建文件保存路径:

mkdir -p recketmq/store/{commitlog,consumequeue,index,checkpoint,abort}

第三步,配置文件

用Vim编辑或者用gedit编辑,按照相应的模式编辑相应的文件,这里选的是双Master模式,所以选择rocketmq/conf/2m-noslave/文件夹下面的文件。

因为有两个master主节点,所以主节点1启动依赖broker-a.properties,主节点2启动依赖broker-b.properties,如果是三个Master,那么还会有一个broker-c.properties,以此类推。

配置说明如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a|broker-b
#0 表示 Master, >0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 0点
deleteWhen=00
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/rocketmq/data
#commitLog 存储路径
storePathCommitLog=/opt/rocketmq/data/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/rocketmq/data/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/data/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/data/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq/data/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

brokerId=0表示是master,大于0则表示是slave;

另外BrokerName=broker-a要对应;在34机器上是broker-a,在第二台机器37上则是broker-b。分别在34和37上修改broker-a.properties和broker-b.properties。

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876。这个要和之前配置的名称相互对应。

对外服务的通信端口是9876。

文件默认大小是1G,当写满后再自动创建。#commitLog每个文件的大小默认1G

第四步,修改日志配置文件

在创建的软连接文件夹rocketmq下创建一个logs目录 mkdir /usr/rocketmq/logs(也可以不创建,系统会自动创建。)

然后执行cd /usr/rocketmq/conf 进入conf文件夹,然后 sed -i 's#${user.home}#/usr/rocketmq#g' *.xml进行日志文件的替换,sed是linux的替换命令。两台机器同样操作。

第五步,修改启动脚本中的JVM参数

因为我们之前将nameServer和broker放在了同一台机器上,所以需要分别对nameServer和broker进行jvm的性能调优。生产环境默认即可不要修改。

1)broker的调优

vi /usr/rocketmq/bin/runbroker.sh

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

2)nameserver的调优

vi /usr/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"

注意,在这里我将JVM的堆的初始化和最大大小统一设置为1G,并将新生代大小设置为512M。主要是考虑到我的虚拟机内存,实际上在线上是可以走默认的4G堆内存的。

 第六步,启动NameServer

启动两台机器的NameServer:先启动两台机器的NameServer,再启动两台机器的Borker,关机的时候顺序相反,先关闭两台机器的Broker,再关闭两台机器的Nameserver。

# cd /usr/rocketmq/bin

# nohup sh mqnamesrv &

上面这条命令nohup是起一个守护线程。

mqadnin是管理员命令,mqfiltersrv是rocketmq的单独组件,mqnamesrv是NameServer,mqbroker是Broker。

查看进程:

jps

查看状态:

# tail -f -n 500 /usr/rocketmq/logs/rocketmqlogs/broker.log

# tail -f -n 500 /usr/rocketmq/logs/rocketmqlogs/namesrv.log

第七步,启动broker

启动BrokerServer A 192.168.99.121和BrokerServer B 192.168.99.122

启动BrokerServer A 192.168.99.121

nohup sh mqbroker -c /opt/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

netstat -ntlp

jps

 tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log

 tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

启动BrokerServer B 192.168.99.122

nohup sh mqbroker -c /opt/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &

netstat -ntlp

jps

 tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log

 tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

posted on 2017-07-12 12:13  小毛线  阅读(112)  评论(0)    收藏  举报

导航