RocketMQ集群的搭建
Posted Lossdate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ集群的搭建相关的知识,希望对你有一定的参考价值。
一、环境
- hosts
192.168.200.136 nodeA
192.168.200.139 nodeB
192.168.200.140 nodeC
192.168.200.141 nodeD - 案例版本
rocketmq : 4.5.1
jdk : 1.8 - 在nodeA上安装好rocketmq
RocketMQ安装 - 配置免密钥登入
cd /root/ ls -a cd .ssh/ ls #生成密钥(四台机子都要) ssh-keygen #生成三个文件id_rsa id_rsa.pub known_hosts #拷贝公钥(四台机子都执行下面四个命令,互相拷贝公钥) ssh-copy-id nodeA ssh-copy-id nodeB ssh-copy-id nodeC ssh-copy-id nodeD #检验 cd /root/ cat .ssh/authorized_keys ssh nodeB exit
- 复制安装好的rocketmq到其它三台机子
cd /opt/ scp -r rocketmq/ nodeB:/opt scp -r rocketmq/ nodeC:/opt scp -r rocketmq/ nodeD:/opt
- 环境变量添加
vim /etc/profile export ROCKET_HOME=/opt/rocketmq export PATH=$PATH:$ROCKET_HOME/bin
- 生效环境变量
. /etc/profile
二、单Master模式
这是最简单也是风险最大的模式,一旦broker重启或宕机,整个服务不可用
不推荐在生产环境使 用,一般用于开发或本地测试
- 启动NameServer
在namesrv.log中看到“The Name Server boot success… ” 则表示NameServer启动成功#首先启动NameServer cd /opt/rocketmq/bin/ nohup sh mqnamesrv & #检查Name Server是否启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
- 启动Broker
在broker.log中看到“The broker[brokerName,ip:port] boot success…” 则表示broker启动成功#首先启动broker cd /opt/rocketmq/bin/ nohup sh mqbroker -n localhost:9876 & #检查broker是否启动成功。如果看到broker的下面的语句表示启动成功 tail -f ~/logs/rocketmqlogs/broker.log The broker[broker-a,192.169.100.136:10911] boot success...
- 操作
#查看broker信息 mqadmin brokerStatus -b localhost:10911 #创建topic mqadmin updateTopic -t tp_test_01 -b localhost:10911 -r 2 -w 2 #查看topic信息 mqadmin topicList -n localhost:9876
- 关闭
#依次停止broker和namesrv mqshutdown broker mqshutdown namesrv
三、多Master模式
多Master模式意味着所有的节点都是Master节点,没有Slave节点
优点:
配置简单
一个服务器节点的停用或重启(维护目的)不会对应用造成大的影响
如果磁盘配置了RAID10,就不会由消息的丢失(因为RAID10非常可靠,即使服 务器不可恢复,在异步刷盘时会丢失小量数据,同步刷盘不会丢数据)
该模式性能最好
缺点:
在单个节点停用期间,消费者无法消费该节点上的数据,也不能订阅该节点上的数 据,除非节点恢复
消息的实时性受到影响
- 启动NameServer -> nodeA
在namesrv.log中看到“The Name Server boot success… ” 则表示NameServer启动成功了#首先启动NameServer cd /opt/rocketmq/bin/ nohup sh mqnamesrv & #检查Name Server是否启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
- 启动Broker集群 -> nodeB & nodeC
上面的NameServer是一台,IP地址直接写,如果是多台NameServer,则需要在 -n 后接多个 NameServer的地址,使用分号分开#启动第一个broker,假定namesrv在192.168.1.1上,注意这里的配置文件的位置 cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-noslave/broker-a.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log #在第二台服务器上启动另一个broker cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-noslave/broker-b.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log
由于shell对分号敏感,可以使用单引号引起来多个NameServer 的地址,禁止shell对分号的解释
四、多Master和Slave模式-异步复制
每个Master节点配置一个或多个Slave节点,组成一组,有多组这样的组合组成集群
HA使用异步复制,Master和Slave节点间有毫秒级的消息同步延迟
优点:
磁盘坏掉,会有少量消息丢失,但是消息的实时性不会受到影响
如果Master宕机,消费者依然可以从Slave节点消费,并且这个转换是透明的,也无需运维手动介入
性能和多Master模式差不多,弱一点点
缺点:
如果Master宕机,磁盘坏掉,会丢失少量消息
- 启动NameServer -> nodeA
#首先启动NameServer cd /opt/rocketmq/bin/ nohup sh mqnamesrv & #检查Name Server是否启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
- 启动Broker集群 -> nodeA & nodeB & nodeC & nodeD
以上启动的是2M-2S-Async模式,双主双从,主从异步复制模式#启动Master的broker:broker-a cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-async/broker-a.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log #在另外一台服务器上启动另一个Master的broker:broker-b cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-async/broker-b.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log #在另一台服务器上启动broker-a的Slave cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-async/broker-a-s.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log #在另一台服务器上启动broker-b的Slave cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-async/broker-b-s.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log
五、多Master和Slave模式-同步双写
该模式中,每个Master节点配置多个Slave节点,它们构成一组,多组构成集群
HA使用同步双写,即只有消息在Master节点和多个Slave节点上写成功,才返回生产者消息发送成功
优点:
数据和服务都没有单点故障
当Master主机宕机,消息的消费不会延迟
服务和数据的高可用
缺点:
该模式的性能比异步复制的模式低10%左右
发送消息的延迟稍微高一点
当前版本中,如果Master节点宕机,Slave节点不能自动切换为Master模式
- 启动NameServer -> nodeA
#首先启动NameServer cd /opt/rocketmq/bin/ nohup sh mqnamesrv & #检查Name Server是否启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
- 启动Broker集群 -> nodeA & nodeB & nodeC & nodeD
通过相同的brokerName,不同的brokerId,将Master和Slave组合为一组#在一个节点启动broker-a(MASTER) cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-sync/broker-a.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log #在另一个节点启动broker-b(MASTER) cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-sync/broker-b.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log #在另一个节点启动broker-a的同步Slave节点:broker-a-s cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-sync/broker-a-s.properties & tail -f ~/logs/rocketmqlogs/broker.log #在另一个节点启动broker-b的同步Slave节点:broker-b-s cd /opt/rocketmq/bin/ nohup sh mqbroker -n nodeA:9876 -c /opt/rocketmq/conf/2m-2s-sync/broker-b-s.properties & #检查broker是否启动成功 tail -f ~/logs/rocketmqlogs/broker.log
Master的brokerId必须是0,Slave的brokerId必须大于0,且不能相同
以上是关于RocketMQ集群的搭建的主要内容,如果未能解决你的问题,请参考以下文章