RocketMQ中多master多slave的环境搭建

本文详细介绍了一个包含两个主节点和两个从节点的RocketMQ集群搭建过程,涵盖了服务器环境配置、hosts文件编辑、软件安装与配置、启动流程等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 服务器环境入下图所示,四台机器,IP位145为主节点,149是145的从节点。146是主节点,239是146的从节点
序号                IP                         用户名                              角色                                              模式
1       192.168.100.145            root               nameServer1,brokerServer1                  Master1
2       192.168.100.146            root                nameServer2,brokerServer2                 Master2
3       192.168.100.149            root                nameServer3,brokerServer3                 Master1-slave1
4       192.168.100.239            root                nameServer4,brokerServer4                 Master2-slave1


2. Hosts添加信息
           IP                                    NAME
192.168.100.145  rocketmq-nameserver1
192.168.100.145 rocketmq-master1
192.168.100.146  rocketmq-nameserver2
192.168.100.146 rocketmq-master2
192.168.100.149  rocketmq-nameserver3
192.168.100.149 rocketmq-master1-slave1
192.168.100.239  rocketmq-nameserver4

192.168.100.239 rocketmq-master2-slave1


3.编辑hosts文件【4台机器】

[plain]  view plain  copy
  1. # vi /etc/hosts  



4.上传解压【4台机器】

[plain]  view plain  copy
  1. # 上传alibaba-rocketmq-3.2.6.tar.gz文件至/usr/local    
  2. # tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local    
  3. # mv alibaba-rocketmq-3.2.6 rocketmq    
  4. ll /usr/local    

5.创建存储路径【4台机器】

[plain]  view plain  copy
  1. # mkdir /usr/local/rocketmq/store    
  2. # mkdir /usr/local/rocketmq/store/commitlog    
  3. # mkdir /usr/local/rocketmq/store/consumequeue    
  4. # mkdir /usr/local/rocketmq/store/index    

6.RocketMQ配置文件【4台机器】--该文件有点类似于Redis里面的redis.con

[sql]  view plain  copy
  1. # vim /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties    
  2. # vim /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties    
  3. # vim /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties    
  4. # vim /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties    

broker-a.properties文件

[plain]  view plain  copy
  1. #所属集群名字  
  2. brokerClusterName=rocketmq-cluster  
  3. #broker名字,注意此处不同的配置文件填写的不一样  
  4. brokerName=broker-a  
  5. #0 表示 Master,>0 表示 Slave  
  6. brokerId=0  
  7. #nameServer地址,分号分割  
  8. namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876  
  9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数  
  10. defaultTopicQueueNums=4  
  11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭  
  12. autoCreateTopicEnable=true  
  13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭  
  14. autoCreateSubscriptionGroup=true  
  15. #Broker 对外服务的监听端口  
  16. listenPort=10911  
  17. #删除文件时间点,默认凌晨 4点  
  18. deleteWhen=04  
  19. #文件保留时间,默认 48 小时  
  20. fileReservedTime=120  
  21. #commitLog每个文件的大小默认1G  
  22. mapedFileSizeCommitLog=1073741824  
  23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整  
  24. mapedFileSizeConsumeQueue=300000  
  25. #destroyMapedFileIntervalForcibly=120000  
  26. #redeleteHangedFileInterval=120000  
  27. #检测物理文件磁盘空间  
  28. diskMaxUsedSpaceRatio=88  
  29. #存储路径  
  30. storePathRootDir=/usr/local/rocketmq/store  
  31. #commitLog 存储路径  
  32. storePathCommitLog=/usr/local/rocketmq/store/commitlog  
  33. #消费队列存储路径存储路径  
  34. storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue  
  35. #消息索引存储路径  
  36. storePathIndex=/usr/local/rocketmq/store/index  
  37. #checkpoint 文件存储路径  
  38. storeCheckpoint=/usr/local/rocketmq/store/checkpoint  
  39. #abort 文件存储路径  
  40. abortFile=/usr/local/rocketmq/store/abort  
  41. #限制的消息大小  
  42. maxMessageSize=65536  
  43. #flushCommitLogLeastPages=4  
  44. #flushConsumeQueueLeastPages=2  
  45. #flushCommitLogThoroughInterval=10000  
  46. #flushConsumeQueueThoroughInterval=60000  
  47. #Broker 的角色  
  48. #- ASYNC_MASTER 异步复制Master  
  49. #- SYNC_MASTER 同步双写Master  
  50. #- SLAVE  
  51. brokerRole=ASYNC_MASTER  
  52. #刷盘方式  
  53. #- ASYNC_FLUSH 异步刷盘  
  54. #- SYNC_FLUSH 同步刷盘  
  55. flushDiskType=ASYNC_FLUSH  
  56. #checkTransactionMessageEnable=false  
  57. #发消息线程池数量  
  58. #sendMessageThreadPoolNums=128  
  59. #拉消息线程池数量  
  60. #pullMessageThreadPoolNums=128  

broker-a-s.properties文件

[plain]  view plain  copy
  1. #所属集群名字  
  2. brokerClusterName=rocketmq-cluster  
  3. #broker名字,注意此处不同的配置文件填写的不一样  
  4. brokerName=broker-a  
  5. #0 表示 Master,>0 表示 Slave  
  6. brokerId=1  
  7. #nameServer地址,分号分割  
  8. namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876  
  9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数  
  10. defaultTopicQueueNums=4  
  11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭  
  12. autoCreateTopicEnable=true  
  13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭  
  14. autoCreateSubscriptionGroup=true  
  15. #Broker 对外服务的监听端口  
  16. listenPort=10911  
  17. #删除文件时间点,默认凌晨 4点  
  18. deleteWhen=04  
  19. #文件保留时间,默认 48 小时  
  20. fileReservedTime=120  
  21. #commitLog每个文件的大小默认1G  
  22. mapedFileSizeCommitLog=1073741824  
  23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整  
  24. mapedFileSizeConsumeQueue=300000  
  25. #destroyMapedFileIntervalForcibly=120000  
  26. #redeleteHangedFileInterval=120000  
  27. #检测物理文件磁盘空间  
  28. diskMaxUsedSpaceRatio=88  
  29. #存储路径  
  30. storePathRootDir=/usr/local/rocketmq/store  
  31. #commitLog 存储路径  
  32. storePathCommitLog=/usr/local/rocketmq/store/commitlog  
  33. #消费队列存储路径存储路径  
  34. storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue  
  35. #消息索引存储路径  
  36. storePathIndex=/usr/local/rocketmq/store/index  
  37. #checkpoint 文件存储路径  
  38. storeCheckpoint=/usr/local/rocketmq/store/checkpoint  
  39. #abort 文件存储路径  
  40. abortFile=/usr/local/rocketmq/store/abort  
  41. #限制的消息大小  
  42. maxMessageSize=65536  
  43. #flushCommitLogLeastPages=4  
  44. #flushConsumeQueueLeastPages=2  
  45. #flushCommitLogThoroughInterval=10000  
  46. #flushConsumeQueueThoroughInterval=60000  
  47. #Broker 的角色  
  48. #- ASYNC_MASTER 异步复制Master  
  49. #- SYNC_MASTER 同步双写Master  
  50. #- SLAVE  
  51. brokerRole=SLAVE  
  52. #刷盘方式  
  53. #- ASYNC_FLUSH 异步刷盘  
  54. #- SYNC_FLUSH 同步刷盘  
  55. flushDiskType=ASYNC_FLUSH  
  56. #checkTransactionMessageEnable=false  
  57. #发消息线程池数量  
  58. #sendMessageThreadPoolNums=128  
  59. #拉消息线程池数量  
  60. #pullMessageThreadPoolNums=128  

broker-b.properties文件

[plain]  view plain  copy
  1. #所属集群名字  
  2. brokerClusterName=rocketmq-cluster  
  3. #broker名字,注意此处不同的配置文件填写的不一样  
  4. brokerName=broker-b  
  5. #0 表示 Master,>0 表示 Slave  
  6. brokerId=0  
  7. #nameServer地址,分号分割  
  8. namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876  
  9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数  
  10. defaultTopicQueueNums=4  
  11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭  
  12. autoCreateTopicEnable=true  
  13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭  
  14. autoCreateSubscriptionGroup=true  
  15. #Broker 对外服务的监听端口  
  16. listenPort=10911  
  17. #删除文件时间点,默认凌晨 4点  
  18. deleteWhen=04  
  19. #文件保留时间,默认 48 小时  
  20. fileReservedTime=120  
  21. #commitLog每个文件的大小默认1G  
  22. mapedFileSizeCommitLog=1073741824  
  23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整  
  24. mapedFileSizeConsumeQueue=300000  
  25. #destroyMapedFileIntervalForcibly=120000  
  26. #redeleteHangedFileInterval=120000  
  27. #检测物理文件磁盘空间  
  28. diskMaxUsedSpaceRatio=88  
  29. #存储路径  
  30. storePathRootDir=/usr/local/rocketmq/store  
  31. #commitLog 存储路径  
  32. storePathCommitLog=/usr/local/rocketmq/store/commitlog  
  33. #消费队列存储路径存储路径  
  34. storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue  
  35. #消息索引存储路径  
  36. storePathIndex=/usr/local/rocketmq/store/index  
  37. #checkpoint 文件存储路径  
  38. storeCheckpoint=/usr/local/rocketmq/store/checkpoint  
  39. #abort 文件存储路径  
  40. abortFile=/usr/local/rocketmq/store/abort  
  41. #限制的消息大小  
  42. maxMessageSize=65536  
  43. #flushCommitLogLeastPages=4  
  44. #flushConsumeQueueLeastPages=2  
  45. #flushCommitLogThoroughInterval=10000  
  46. #flushConsumeQueueThoroughInterval=60000  
  47. #Broker 的角色  
  48. #- ASYNC_MASTER 异步复制Master  
  49. #- SYNC_MASTER 同步双写Master  
  50. #- SLAVE  
  51. brokerRole=ASYNC_MASTER  
  52. #刷盘方式  
  53. #- ASYNC_FLUSH 异步刷盘  
  54. #- SYNC_FLUSH 同步刷盘  
  55. flushDiskType=ASYNC_FLUSH  
  56. #checkTransactionMessageEnable=false  
  57. #发消息线程池数量  
  58. #sendMessageThreadPoolNums=128  
  59. #拉消息线程池数量  
  60. #pullMessageThreadPoolNums=128  

broker-b-s.properties文件

[plain]  view plain  copy
  1. #所属集群名字  
  2. brokerClusterName=rocketmq-cluster  
  3. #broker名字,注意此处不同的配置文件填写的不一样  
  4. brokerName=broker-b  
  5. #0 表示 Master,>0 表示 Slave  
  6. brokerId=1  
  7. #nameServer地址,分号分割  
  8. namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876  
  9. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数  
  10. defaultTopicQueueNums=4  
  11. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭  
  12. autoCreateTopicEnable=true  
  13. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭  
  14. autoCreateSubscriptionGroup=true  
  15. #Broker 对外服务的监听端口  
  16. listenPort=10911  
  17. #删除文件时间点,默认凌晨 4点  
  18. deleteWhen=04  
  19. #文件保留时间,默认 48 小时  
  20. fileReservedTime=120  
  21. #commitLog每个文件的大小默认1G  
  22. mapedFileSizeCommitLog=1073741824  
  23. #ConsumeQueue每个文件默认存30W条,根据业务情况调整  
  24. mapedFileSizeConsumeQueue=300000  
  25. #destroyMapedFileIntervalForcibly=120000  
  26. #redeleteHangedFileInterval=120000  
  27. #检测物理文件磁盘空间  
  28. diskMaxUsedSpaceRatio=88  
  29. #存储路径  
  30. storePathRootDir=/usr/local/rocketmq/store  
  31. #commitLog 存储路径  
  32. storePathCommitLog=/usr/local/rocketmq/store/commitlog  
  33. #消费队列存储路径存储路径  
  34. storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue  
  35. #消息索引存储路径  
  36. storePathIndex=/usr/local/rocketmq/store/index  
  37. #checkpoint 文件存储路径  
  38. storeCheckpoint=/usr/local/rocketmq/store/checkpoint  
  39. #abort 文件存储路径  
  40. abortFile=/usr/local/rocketmq/store/abort  
  41. #限制的消息大小  
  42. maxMessageSize=65536  
  43. #flushCommitLogLeastPages=4  
  44. #flushConsumeQueueLeastPages=2  
  45. #flushCommitLogThoroughInterval=10000  
  46. #flushConsumeQueueThoroughInterval=60000  
  47. #Broker 的角色  
  48. #- ASYNC_MASTER 异步复制Master  
  49. #- SYNC_MASTER 同步双写Master  
  50. #- SLAVE  
  51. brokerRole=SLAVE  
  52. #刷盘方式  
  53. #- ASYNC_FLUSH 异步刷盘  
  54. #- SYNC_FLUSH 同步刷盘  
  55. flushDiskType=ASYNC_FLUSH  
  56. #checkTransactionMessageEnable=false  
  57. #发消息线程池数量  
  58. #sendMessageThreadPoolNums=128  
  59. #拉消息线程池数量  
  60. #pullMessageThreadPoolNums=128  

7. 修改启动脚本参数【4台机器】
[plain]  view plain  copy
  1. # vim /usr/local/rocketmq/bin/runbroker.sh  
[plain]  view plain  copy
  1. #============================================================  
  2. ==================  
  3. # 开发环境JVM Configuration  
  4. #============================================================  
  5. ==================  
  6. JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -  
  7. XX:PermSize=128m -XX:MaxPermSize=320m"  
[plain]  view plain  copy
  1. # vim /usr/local/rocketmq/bin/runserver.sh  
[plain]  view plain  copy
  1. JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -  
  2. XX:PermSize=128m -XX:MaxPermSize=320m"  


8.启动NameServer【4台机器】
[plain]  view plain  copy
  1. # cd /usr/local/rocketmq/bin    
  2. # nohup sh mqnamesrv &    


9.启动BrokerServer 【4台机器】

注意配置文件需要根据实际配置/broker-X.properties

[plain]  view plain  copy
  1. # cd /usr/local/rocketmq/bin    
  2. # nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &    

输入jps看到如上图所示表示成功


10.修改tomcat配置文件




启动tomcat:

[plain]  view plain  copy
  1. /usr/local/tomcat/apache-tomcat-7.0.29/bin/startup.sh  

在浏览器输入:http://192.168.100.145:8080/rocketmq-console/




多Master多Slave可以保证实时消费,比如说:我有一主一从,如果主机宕机,那么我主机上从MQ获得的数据如果在没有从节点,那么这些消息将在主节点重启之前将无法被消费,直到主节点启动,如果们的这个主节点里面有从节点,从节点可以对外提供服务,并且从节点有从主节点同步过来的数据,那么还是可以将这些消息实时地消费掉。这点多Master方式无法做到

现在我模拟145这个节点宕机,但是145的从节点149能继续将消息提供给消费者消费如下图所示

停止服务broker:

[plain]  view plain  copy
  1. # sh mqshutdown broker  


当宕机的主节点起来之后,会和从节点进行数据的同步,不会重复消费刚刚消费过的数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值