【MQ】Centos7搭建双主双从RocketMQ集群

原文地址:https://blog.csdn.net/kisscatforever/article/details/72810019

一、前言

      在前一篇博客中,小编向大家介绍了如何在Centos7中安装RocketMQ。通过这种方法我们可以搭建出来一台母机,通过这台母机来进行克隆搭建出我们的集群。

二、搭建环境

三、为什么要搭建集群?

      服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

      可以减少单点故障数量,并且实现了群集化资源的高可用性

      一、集群系统可解决所有的服务器硬件故障,当某一台服务器出现任何故障,如:硬盘、内存、CPU、主板、I/O板以及电源故障,运行在这台服务器上的应用就会切换到其它的服务器上。

      二、集群系统可解决软件系统问题,我们知道,在计算机系统中,用户所使用的是应用程序和数据,而应用系统运行在操作系统之上,操作系统又运行在服务器上。这样,只要应用系统、操作系统、服务器三者中的任何一个出现故障,系统实际上就停止了向客户端提供服务,比如我们常见的软件死机,就是这种情况之一,尽管服务器硬件完好,但服务器仍旧不能向客户端提供服务。而集群的最大优势在于对故障服务器的监控是基于应用的,也就是说,只要服务器的应用停止运行,其它的相关服务器就会接管这个应用,而不必理会应用停止运行的原因是什么。

      三、集群系统可以解决人为失误造成的应用系统停止工作的情况,例如,当管理员对某台服务器操作不当导致该服务器停机,因此运行在这台服务器上的应用系统也就停止了运行。由于集群是对应用进行监控,因此其它的相关服务器就会接管这个应用。

四、Roctmq网络部署图

这里写图片描述

      我们部署的mq集群架构是:双主双从。

      RocketMQ 网络部署特点:

  • Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

  • Broker 部署相对复杂,Broker 分为 Master 与Slave,一个 Master 可以对应多个 Slave,但是一个 Slave 只能对应一个 Master, Master 与Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义, BrokerId 为 0 表示 Master,非 0 表示 Slave。 Master 也可以部署多个。每个 Broker 与Name Server 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 Name Server。

  • Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。 Producer 完全无状态,可
    集群部署。

  • Consumer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master、 Slave 建立长连接,且定时向 Master、 Slave 发送心跳。 Consumer既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。

五、搭建过程

      根据《Centos7安装RocketMQ》我们可以搭建一台可以提供服务的mq。以这台做母机,进行克隆。

      母机信息如下:

      在前面的时候我们搭建好了一台RocketMQ服务器:

Ip brokerName 用途 角色
192.168.137.4 AresBroker1 NameServer,Broker Master

5.1 克隆其他的机器,并修改ip-mac等信息

      通过这一台主机克隆出三台机器,修改相应的信息如下:

Ip brokerName 用途 角色
192.168.137.5 AresBroker1 NameServer ,Broker Slave
192.168.137.6 AresBroker2 NameServer ,Broker Master
192.168.137.7 AresBroker2 NameServer ,Broker Slave

5.2 设置hosts信息

      依次修改每台主机的hosts文件:

vim /etc/hosts

      添加如下信息:

192.168.137.4 mqnameserver1
192.168.137.5 mqnameserver2
192.168.137.6 mqnameserver3
192.168.137.7 mqnameserver4

5.3 修改broker的信息

      Master1 - 192.168.137.4的配置:

   

[root@localhost bin]# vim broker.p

namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
brokerIP1=192.168.137.4
brokerName=AresBroker1
brokerClusterName=AresCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

---------------------

本文来自 AresCarry-王雷 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kisscatforever/article/details/72810019?utm_source=copy 

      Slave1 - 192.168.137.5的配置(是Master1的从机):

      说明:

192.168.137.5是192.168.137.4的从机,所以设置
brokerName=AresBroker1是相同的,
brokerId=1 要大于0,表示是从机,
brokerRole=SLAVE表示身份是从机。

[root@localhost bin]# vim broker.p 

namesrvAddr= mqnameserver1:9876; mqnameserver2:9876;mqnameserver3:9876; mqnameserver4:9876
brokerIP1=192.168.137.5
brokerName=AresBroker1
brokerClusterName=AresCluster
brokerId=1
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true 

---------------------

本文来自 AresCarry-王雷 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kisscatforever/article/details/72810019?utm_source=copy 

      Master2-192.168.137.6的配置

      说明:

192.168.137.6是另一台主机,
brokerName=AresBroker2 设置名字和另一个主机不一样,
brokerId=0表示为主机,
brokerRole=ASYNC_MASTER表示是主机。

[root@localhost bin]# vim broker.p

namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
brokerIP1=192.168.137.6
brokerName=AresBroker2
brokerClusterName=AresCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

---------------------

本文来自 AresCarry-王雷 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kisscatforever/article/details/72810019?utm_source=copy 

      Slave2-192.168.137.7配置:
      说明:

192.168.137.7是192.168.137.6的从机,配置中,
brokerName=AresBroker2配置的是broker的名字,要和192.168.137.6的brokerName相同,brokerId=1表示是从机,
brokerRole=SLAVE表示从机。

[root@localhost bin]# vim broker.p


namesrvAddr= mqnameserver1:9876; mqnameserver2:9876;mqnameserver3:9876; mqnameserver4:9876
brokerIP1=192.168.137.7
brokerName=AresBroker2
brokerClusterName=AresCluster
brokerId=1
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true

---------------------

本文来自 AresCarry-王雷 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kisscatforever/article/details/72810019?utm_source=copy 

5.4 依次运行

      调整目录到alibaba-rocketmq/bin下,

cd /usr/src/rocketmq/alibaba-rocketmq/bin

      然后通过

./play.sh

      运行,通过运行jps查看服务启动情况。如果两个服务都启动,就可以了。

这里写图片描述

      如果只有NamesrvStartup启动了,可以通过如下命令启动BrokerStartup:

nohup sh mqbroker -c broker.p

5.5 运行结果

      通过运行rocketmq-console控制台可以看到:表示搭建成功。

这里写图片描述

四、小结

      个人理解,只要搭建了一台服务器,就可以很轻松的搭建出集群,通过克隆虚拟机就可以得到相似的机器,然后通过修改broker.p从而达到配置的目的。

      再次强调Master 与Slave 的对应关系通过指定相同的 BrokerName,不同的 BrokerId 来定义, BrokerId 为 0 表示 Master,非 0 表示 Slave。

--------------------- 本文来自 AresCarry-王雷 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kisscatforever/article/details/72810019?utm_source=copy

猜你喜欢

转载自blog.csdn.net/cn_yaojin/article/details/82971811