RocketMQ集群的搭建

Posted Lossdate

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ集群的搭建相关的知识,希望对你有一定的参考价值。

一、环境

  1. hosts
    192.168.200.136 nodeA
    192.168.200.139 nodeB
    192.168.200.140 nodeC
    192.168.200.141 nodeD
  2. 案例版本
    rocketmq : 4.5.1
    jdk : 1.8
  3. 在nodeA上安装好rocketmq
    RocketMQ安装
  4. 配置免密钥登入
    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
    
  5. 复制安装好的rocketmq到其它三台机子
    cd /opt/
    scp -r rocketmq/ nodeB:/opt
    scp -r rocketmq/ nodeC:/opt
    scp -r rocketmq/ nodeD:/opt
    
  6. 环境变量添加
    vim /etc/profile
    
    export ROCKET_HOME=/opt/rocketmq
    export PATH=$PATH:$ROCKET_HOME/bin
    
  7. 生效环境变量
    . /etc/profile
    

二、单Master模式

这是最简单也是风险最大的模式,一旦broker重启或宕机,整个服务不可用
不推荐在生产环境使 用,一般用于开发或本地测试

  1. 启动NameServer
    #首先启动NameServer
    cd /opt/rocketmq/bin/
    nohup sh mqnamesrv &
    #检查Name Server是否启动成功
    tail -f ~/logs/rocketmqlogs/namesrv.log
    The Name Server boot success...
    
    在namesrv.log中看到“The Name Server boot success… ” 则表示NameServer启动成功
  2. 启动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.log中看到“The broker[brokerName,ip:port] boot success…” 则表示broker启动成功
  3. 操作
    #查看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
    
  4. 关闭
    #依次停止broker和namesrv
    mqshutdown broker
    mqshutdown namesrv
    

三、多Master模式

多Master模式意味着所有的节点都是Master节点,没有Slave节点

优点:
配置简单
一个服务器节点的停用或重启(维护目的)不会对应用造成大的影响
如果磁盘配置了RAID10,就不会由消息的丢失(因为RAID10非常可靠,即使服 务器不可恢复,在异步刷盘时会丢失小量数据,同步刷盘不会丢数据)
该模式性能最好
缺点:
在单个节点停用期间,消费者无法消费该节点上的数据,也不能订阅该节点上的数 据,除非节点恢复
消息的实时性受到影响

  1. 启动NameServer -> nodeA
    #首先启动NameServer
    cd /opt/rocketmq/bin/
    nohup sh mqnamesrv &
    #检查Name Server是否启动成功
    tail -f ~/logs/rocketmqlogs/namesrv.log
    The Name Server boot success...
    
    在namesrv.log中看到“The Name Server boot success… ” 则表示NameServer启动成功了
  2. 启动Broker集群 -> nodeB & nodeC
    #启动第一个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
    
    上面的NameServer是一台,IP地址直接写,如果是多台NameServer,则需要在 -n 后接多个 NameServer的地址,使用分号分开
    由于shell对分号敏感,可以使用单引号引起来多个NameServer 的地址,禁止shell对分号的解释

四、多Master和Slave模式-异步复制

每个Master节点配置一个或多个Slave节点,组成一组,有多组这样的组合组成集群
HA使用异步复制,Master和Slave节点间有毫秒级的消息同步延迟

优点:
磁盘坏掉,会有少量消息丢失,但是消息的实时性不会受到影响
如果Master宕机,消费者依然可以从Slave节点消费,并且这个转换是透明的,也无需运维手动介入
性能和多Master模式差不多,弱一点点
缺点:
如果Master宕机,磁盘坏掉,会丢失少量消息

  1. 启动NameServer -> nodeA
    #首先启动NameServer
    cd /opt/rocketmq/bin/
    nohup sh mqnamesrv &
    #检查Name Server是否启动成功
    tail -f ~/logs/rocketmqlogs/namesrv.log
    The Name Server boot success...
    
  2. 启动Broker集群 -> nodeA & nodeB & nodeC & nodeD
    #启动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
    
    以上启动的是2M-2S-Async模式,双主双从,主从异步复制模式

五、多Master和Slave模式-同步双写

该模式中,每个Master节点配置多个Slave节点,它们构成一组,多组构成集群
HA使用同步双写,即只有消息在Master节点和多个Slave节点上写成功,才返回生产者消息发送成功

优点:
数据和服务都没有单点故障
当Master主机宕机,消息的消费不会延迟
服务和数据的高可用
缺点:
该模式的性能比异步复制的模式低10%左右
发送消息的延迟稍微高一点
当前版本中,如果Master节点宕机,Slave节点不能自动切换为Master模式

  1. 启动NameServer -> nodeA
    #首先启动NameServer
    cd /opt/rocketmq/bin/
    nohup sh mqnamesrv &
    #检查Name Server是否启动成功
    tail -f ~/logs/rocketmqlogs/namesrv.log
    The Name Server boot success...
    
  2. 启动Broker集群 -> nodeA & nodeB & nodeC & nodeD
    #在一个节点启动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
    
    通过相同的brokerName,不同的brokerId,将Master和Slave组合为一组
    Master的brokerId必须是0,Slave的brokerId必须大于0,且不能相同

以上是关于RocketMQ集群的搭建的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ集群的搭建

linux 下搭建rokectMQ集群

rocketmq那些事儿之集群环境搭建

《从0开始学RocketMQ》—集群搭建

rocketmq集群搭建

原创《从0开始学RocketMQ》—集群搭建