发布时间:2021-04-26作者:laosun阅读(2165)
今天讲解的是RocketMQ如何配置双主和双主双从模式。
环境:Parallels CentOS虚拟机两台:
第一台: 10.211.55.11 ;第二台:10.211.55.12 。首先确保两台机器都已经安装了RocketMQ,如何安装请查看之前发布的文章: RocketMQ 下载安装,修改运行内存,配置单主
其实官方已经给出了配置双主或者双主双从模式的案例,只需要我们修改调整一下即可。
接下来的操作两台机器我们都是处在 /usr/local/rocketmq-4.8.0 根目录下。
双主模式配置方式:
我们打开两个窗口,分别编辑两台机器上的文件。如果没有这个条件的,就按照步骤一步步的来吧。
10.211.55.11机器 和 10.211.55.12机器,下边我们将简称为 11机器和12机器。
我们分别在两台机器上的rocketmq根目录创建一个文件夹,方便之后的双主双从模式的搭建。
11机器上创建store-a文件夹,12机器上创建store-b文件夹。(至于文件夹有什么用,以后的文章会介绍)
11机器:
# 创建文件夹,11机器上我们创建名字为store-a的文件夹 > mkdir store-a
12机器:
# 创建文件夹,12机器上我们创建名字为store-b的文件夹 > mkdir store-b
使用命令先停止掉两台机器上的rocketmq服务。
# 停止两台机器上的服务,如果没有启动则无需停止。 # 先停止broker > sh bin/mqshutdown broker # 停止namesrv > sh bin/mqshutdown namesrv
停止完成后,我们现在需要修改配置文件进行双主搭建了。
11机器:
# 编辑10.211.55.11机器上的broker-a.properties配置文件 > vim conf/2m-noslave/broker-a.properties
11机器上的conf/2m-noslave/broker-a.properties文件内容如下:
我们其中需要修改的地方有namesrvAddr、listenPort、storePathRootDir 三项。如果你们是按照我的操作步骤来一步步搭建的,那么只需要修改namesrvAddr即可。
以下文件可以和原文件做个对比,其实没有修改啥,只是新增了不少选项,另外每个都加上了备注说明。
# 所属集群名称 brokerClusterName=DefaultCluster # 名称可重复 为了便于管理,master和所属的slave采用同一个名称 # Broker 的名称, Master和Slave 通过使用相同的 Broker 名称来表明相互关系,以说明某个 Slave 是哪个 Master的Slave brokerName=broker-a # 0 - master | >0 - slave # 一个 Master Barker 可以有多个 Slave, 表示 Master ,大于 表示不同的Slave ID brokerId=0 # 删除文件时间点,默认凌晨 4点 # 与fi leReservedTim 参数呼应,表明在几点做消息删除动作,默认值 04 表示凌晨四点 deleteWhen=04 # 文件保留时间,默认 48 小时 # 在磁盘上保存消息的时长,单位是小时,自动删除超时的消息 fileReservedTime=48 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE # broker Role 有3种: SYNC MASTER ASYNC MASTER SLAVE # 关键词 SYNC ASYNC 表示 Master Slave 之间同步消息的机制, # SYNC 的意思是当 Slave Master 消息同步完成后,再返回发送成功的状态 brokerRole=SYNC_MASTER # 刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 # flushDiskType 表示 盘策略,分为 SYNC_FLUSH ASYNC_FLUSH 两种 # 分别代表同步刷盘和异步刷盘 同步刷盘情况下,消息 正写人磁盘后再 # 返回成功状态;异步刷盘情况下,消息写人 page_cache 后就返回成功状态 flushDiskType=ASYNC_FLUSH # =================增加如下几行================= # 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 # defaultTopicQueueNums=4 # 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # nameServer 服务地址列表,配置多台 namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 # Broker 对外服务的监听端口 # Broker 监听的端口 号,如果一台机器上启动了多个 Broker 要设置不同的端口号,避免冲突 listenPort=11111 # commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 # 存储消息以及一些配置信息的根目录 storePathRootDir=/usr/local/rocketmq-4.8.0/store-a # 以下几个目录不需要填写,会自动创建 # commitLog 存储路径 #storePathCommitLog=/usr/local/rocketmq-4.8.0/store-a/commitlog # 消费队列存储路径存储路径 #storePathConsumeQueue=/usr/local/rocketmq-4.8.0/store-a/consumequeue # 消息索引存储路径 #storePathIndex=/usr/local/rocketmq-4.8.0/store-a/index # checkpoint 文件存储路径 #storeCheckpoint=/usr/local/rocketmq-4.8.0/store-a/checkpoint # abort 文件存储路径 #abortFile=/usr/local/rocketmq-4.8.0/store-a/abort # 限制的消息大小 maxMessageSize=65536 # 发消息线程池数量(注意:如果机器性能不怎么样,但是消息量又很大的情况下,此值要调小,或者消费者修改成单线程顺序接收,orderly) sendMessageThreadPoolNums=128 # 拉消息线程池数量(注意:如果机器性能不怎么样,但是消息量又很大的情况下,此值要调小,或者消费者修改成单线程顺序接收,orderly) pullMessageThreadPoolNums=128
12机器:
# 编辑10.211.55.12机器上的broker-b.properties配置文件 > vim conf/2m-noslave/broker-b.properties
12机器上的conf/2m-noslave/broker-b.properties文件内容如下:
我们其中需要修改的地方有namesrvAddr、listenPort、storePathRootDir 三项。如果你们是按照我的操作步骤来一步步搭建的,那么只需要修改namesrvAddr即可。
以下文件可以和原文件做个对比,其实没有修改啥,只是新增了不少选项,另外每个都加上了备注说明。
# 所属集群名称 brokerClusterName=DefaultCluster # 名称可重复 为了便于管理,master和所属的slave采用同一个名称 brokerName=broker-b # 0 - master | >0 - slave brokerId=0 # 删除文件时间点,默认凌晨 4点 deleteWhen=04 # 文件保留时间,默认 48 小时 fileReservedTime=48 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=ASYNC_MASTER # 刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH # =================增加如下几行================= # 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 # defaultTopicQueueNums=4 # 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # nameServer 服务地址列表 namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 #brokerIP1=10.211.55.12 # Broker 对外服务的监听端口 listenPort=22222 # commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 # 存储消息以及一些配置信息的根目录 storePathRootDir=/usr/local/rocketmq-4.8.0/store-b # 以下几个目录不需要填写,会自动创建 # commitLog 存储路径 #storePathCommitLog=/usr/local/rocketmq-4.8.0/store-b/commitlog # 消费队列存储路径存储路径 #storePathConsumeQueue=/usr/local/rocketmq-4.8.0/store-b/consumequeue # 消息索引存储路径 #storePathIndex=/usr/local/rocketmq-4.8.0/store-b/index # checkpoint 文件存储路径 #storeCheckpoint=/usr/local/rocketmq-4.8.0/store-b/checkpoint # abort 文件存储路径 #abortFile=/usr/local/rocketmq-4.8.0/store-b/abort # 限制的消息大小 maxMessageSize=65536 # 发消息线程池数量(注意:如果机器性能不怎么样,但是消息量又很大的情况下,此值要调小,或者消费者修改成单线程顺序接收,orderly) sendMessageThreadPoolNums=128 # 拉消息线程池数量(注意:如果机器性能不怎么样,但是消息量又很大的情况下,此值要调小,或者消费者修改成单线程顺序接收,orderly) pullMessageThreadPoolNums=128
都修改完成后,我们现在启动服务
# 分别启动两台机器上的namesrv服务 > nohup sh bin/mqnamesrv & # 启动namesrv后,启动11机器上的broker服务 > nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties & # 启动namesrv后,启动12机器上的broker服务 > nohup sh bin/mqbroker -c conf/2m-noslave/broker-b.properties &
确保都启动完成后,查看下进程是否正常。
我们来看下配置双主模式是否成功。
# 在两台机器上的任何一台执行以下命令(Ip也可以是两台中任何一台的ip) > sh bin/mqadmin clusterList -n 10.211.55.11:9876
展示如下图所示,则表示配置双主模式成功。
现在我们使用rocketmq-console控制台来查看一下。
上一篇文章已经介绍过如何搭建rocketmq-console控制台了。请查看文章:RocketMQ配置console控制台,配置登录账户密码
发现双主模式已经配置成功了
现在就有个疑问了,我的rocketmq-console只配置了一个namesrv为什么两台都能展示呢?
博主认为应该是namesrv通过broker互相通信的原因。不过还是建议都配置上
之前是一台rocketmq,现在我们部署了双主模式,我们需要修改下rocketmq-console控制台的配置文件。
现在我们先停止掉rocketmq-console控制台
# 如何停止?kill -9 杀掉即可 > kill -9 pid
进入下载好的rocketmq-console模块目录
> cd /usr/local/src/rocketmq-externals-master/rocketmq-console # 编辑application.properties文件 > vim src/main/resources/application.properties
修改内容如下:
server.address=0.0.0.0 server.port=19876 ### SSL setting #server.ssl.key-store=classpath:rmqcngkeystore.jks #server.ssl.key-store-password=rocketmq #server.ssl.keyStoreType=PKCS12 #server.ssl.keyAlias=rmqcngkey #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.level.root=INFO 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 # =============增加两台机器上的namesrv地址,分号;分隔============= rocketmq.config.namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 #if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true rocketmq.config.isVIPChannel= #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 #set the message track trace topic if you don't want use the default one rocketmq.config.msgTrackTopicName= rocketmq.config.ticketKey=ticket #Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required rocketmq.config.loginRequired=false #set the accessKey and secretKey if you used acl #rocketmq.config.accessKey= #rocketmq.config.secretKey=
然后重新编译打包:
# 重新编译打包,目录:/usr/local/src/rocketmq-externals-master/rocketmq-console > mvn clean package -Dmaven.test.skip=true # 打包完成后,我们重启该rocketmq-console控制台 > nohup java -jar target/rocketmq-console-ng-2.0.0.jar &
然后再从浏览器观察一下是否显示正确
双主双从模式配置方式:
双主双从和双主配置模式差不多,官方也给出了案例,我们只需要修改其中的配置文件即可实现。
我们分别在两台机器上的rocketmq根目录再创建一个文件夹。
11机器上创建store-b文件夹,12机器上创建store-a文件夹。(至于文件夹有什么用,以后的文章会介绍)
现在的目录结构是11机器上有store-a和store-b文件夹(store-a 已占用)。12机器上有store-b和store-a文件夹(store-b 已占用)
文件同步如下:
11机器上的主是store-a,从是12机器上的store-a。
12机器上的主是store-b,从是11机器上的store-b。
现在我们使用rocketmq官方给的2m-2s-async(双主双从异步复制master)。
先看下目录结构:
我们现在要做的就是修改11机器上的broker-a.properties 和 broker-b-s.properties,反过来修改12机器上的broker-b.properties和broker-a-s.properties
11 机器上的 broker-a.properties
brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH # nameServer 服务地址列表 namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 # Broker 对外服务的监听端口 listenPort=11111 # 存储路径 storePathRootDir=/usr/local/rocketmq-4.8.0/store-a brokerIP1=10.211.55.11 # 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true
11 机器上的broker-b-s.properties
brokerClusterName=DefaultCluster brokerName=broker-b brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH # nameServer 服务地址列表 namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 # Broker 对外服务的监听端口 listenPort=22222 # 存储路径 storePathRootDir=/usr/local/rocketmq-4.8.0/store-b
12 机器上的broker-b.properties
brokerClusterName=DefaultCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH # nameServer 服务地址列表 namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 # Broker 对外服务的监听端口 listenPort=22222 # 存储路径 storePathRootDir=/usr/local/rocketmq-4.8.0/store-b brokerIP1=10.211.55.12 # 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true
12 机器上的broker-a-s.properties
brokerClusterName=DefaultCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH # nameServer 服务地址列表 namesrvAddr=10.211.55.11:9876;10.211.55.12:9876 # Broker 对外服务的监听端口 listenPort=11111 # 存储路径 storePathRootDir=/usr/local/rocketmq-4.8.0/store-a
注意观察两台机器4个文件的区别:
主要在于brokerName、brokerId、brokerRole、listenPort、storePathRootDir 几个配置项。
都配置完成后,现在我们挨个重新启动。
# 按顺序启动 # 分别启动两台机器上的namesrv服务 > nohup sh bin/mqnamesrv & # 启动11机器上的broker master服务(Master) > nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties & # 启动12机器上的broker master服务 > nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties & # 启动11机器上的broker slave服务(Slave) > nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties & # 启动12机器上的broker slave服务 > nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
都启动完成后,我们看下是否成功。
# 在两台机器上的任何一台执行以下命令(Ip也可以是两台中任何一台的ip) sh bin/mqadmin clusterList -n 10.211.55.11:9876
输出如下图所示,则表示成功。
我们也可以使用rocketmq-console控制台查看一下:
这里的双主双从模式也配置完成。
下一篇将会演示: JavaDemo案例演示双主 或者 双主双从 模式下的broker智能切换。
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/525f7f957f7044e1a0e920812e86d9ab.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。