RocketMQ (二) 双主双从同步复制集群方案

    技术2022-07-12  79

    文章目录

    部署环境安装 Rocketmq建文件夹配置1. broker-a,a主服务器配置2. broker-a slave,a从服务器配置3. broker-b,b主服务器配置4. broker-b slave,b从服务器配置配置要点说明 启动1. 启动两个 name server2. 启动 broker a 的主从两台服务器3. 启动 broker b 的主从两台服务器 检查启动的服务启动管理界面

    部署环境

    作为测试环境,我们使用两台虚拟机来部署双主双从环境,具体结构如下:

    整个集群由两个 name server 实例和四个 broker 实例组成

    name server:

    两台服务器分别启动两个name server

    broker A 主从:

    服务器1部署 broker A 主服务服务器2部署 broker A 从服务

    broker B 主从:

    服务器2部署 broker B 主服务服务器1部署 broker B 从服务

    安装 Rocketmq

    首先参照《RocketMQ (一) 安装》笔记,在两台虚拟机上安装 Rocketmq。或在一台虚拟机上装好后进行克隆。

    建文件夹

    在一台服务器上启动两个 broker 实例,需要为不同实例设置单独的数据存储目录。

    为了方便起见,我们在两台服务器上都创建这四个实例所需要的的目录。

    mkdir /usr/local/rocketmq/store/ mkdir /usr/local/rocketmq/store/broker-a mkdir /usr/local/rocketmq/store/broker-a/commitlog mkdir /usr/local/rocketmq/store/broker-b mkdir /usr/local/rocketmq/store/broker-b/commitlog mkdir /usr/local/rocketmq/store/broker-as mkdir /usr/local/rocketmq/store/broker-as/commitlog mkdir /usr/local/rocketmq/store/broker-bs mkdir /usr/local/rocketmq/store/broker-bs/commitlog

    配置

    在 rocketmq/conf 目录下提供了四种集群方案的配置样例

    2m-2s-async:双主双从异步复制2m-2s-sync:双主双从同步复制2m-noslave:双主dledger: raft主从切换

    这里我们选择双主双从同步复制方案。

    1. broker-a,a主服务器配置

    在服务器1修改样例配置文件:rocketmq/conf/2m-2s-sync/broker-a.properties

    在样例配置文件中,添加三项配置:

    listenPort:我们在一台服务器上要运行两个broker实例,所以两个实例的端口要有所区分。这里broker-a主服务器的端口使用默认的10911。storePathRootDir:数据存储目录storePathCommitLog:提交日志存储目录 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH listenPort=10911 storePathRootDir=/usr/local/rocketmq/store/broker-a storePathCommitLog=/usr/local/rocketmq/store/broker-a/commitlog

    2. broker-a slave,a从服务器配置

    在服务器2修改样例配置文件:rocketmq/conf/2m-2s-sync/broker-a-s.properties

    在样例配置文件中,添加三项配置:

    listenPort:我们在一台服务器上要运行两个broker实例,所以两个实例的端口要有所区分。这里broker-a slave从服务器的端口使用11911。storePathRootDir:数据存储目录storePathCommitLog:提交日志存储目录 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH listenPort=11911 storePathRootDir=/usr/local/rocketmq/store/broker-as storePathCommitLog=/usr/local/rocketmq/store/broker-as/commitlog

    3. broker-b,b主服务器配置

    在服务器2修改样例配置文件:rocketmq/conf/2m-2s-sync/broker-b.properties

    在样例配置文件中,添加三项配置:

    listenPort:我们在一台服务器上要运行两个broker实例,所以两个实例的端口要有所区分。这里broker-b主服务器的端口使用默认的10911。storePathRootDir:数据存储目录storePathCommitLog:提交日志存储目录 brokerClusterName=DefaultCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH listenPort=10911 storePathRootDir=/usr/local/rocketmq/store/broker-b storePathCommitLog=/usr/local/rocketmq/store/broker-b/commitlog

    4. broker-b slave,b从服务器配置

    在服务器1修改样例配置文件:rocketmq/conf/2m-2s-sync/broker-b-s.properties

    在样例配置文件中,添加三项配置:

    listenPort:我们在一台服务器上要运行两个broker实例,所以两个实例的端口要有所区分。这里broker-b slave从服务器的端口使用11911。storePathRootDir:数据存储目录storePathCommitLog:提交日志存储目录 brokerClusterName=DefaultCluster brokerName=broker-b brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH listenPort=11911 storePathRootDir=/usr/local/rocketmq/store/broker-bs storePathCommitLog=/usr/local/rocketmq/store/broker-bs/commitlog

    配置要点说明

    四台服务器的集群名 brokerClusterName 相同。集群名称相同的服务器共同组成服务集群 。

    从服务器通过名字与主服务器关联在一起,brokerName 与主服务器相同。

    brokerId为0是主服务器。从服务器的值是非零值,例如如果有四个从服务器,他们的 brokerId 应该是 1,2,3,4。

    brokerRole的值为 SYNC_MASTER 是同步复制的主服务器。如果是 ASYNC_MASTER 则为异步复制的主服务器。

    同步复制:消息复制到从服务器后才向生产者发回反馈信息。异步复制:消息发到主服务器就向生产者发回反馈信息,之后再向从服务器复制。

    启动

    1. 启动两个 name server

    在两台服务器上启动两个 name server,它们不用做任何集群的配置,都是作为独立服务运行,它们之间也不会进行数据复制。

    所有broker服务启动后,要同时连接这两个 name server,向两个 name server 进行注册。

    在两台服务器上都启动 name server:

    nohup sh mqnamesrv &

    2. 启动 broker a 的主从两台服务器

    在服务器1上启动 broker a 主服务器:

    参数说明:

    -n参数:指定name server地址列表,多个地址用分号分隔-c参数:指定配置文件,使用指定的配置文件启动 broker nohup sh mqbroker \ -n '192.168.64.151:9876;192.168.64.152:9876' \ -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties \ &

    在服务器2上启动 broker a 从服务器:

    nohup sh mqbroker \ -n '192.168.64.151:9876;192.168.64.152:9876' \ -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties \ &

    3. 启动 broker b 的主从两台服务器

    在服务器2上启动 broker b 主服务器:

    nohup sh mqbroker \ -n '192.168.64.151:9876;192.168.64.152:9876' \ -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties \ &

    在服务器1上启动 broker b 从服务器:

    nohup sh mqbroker \ -n '192.168.64.151:9876;192.168.64.152:9876' \ -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties \ &

    检查启动的服务

    在两台服务器上分别查看java进程,确认两台服务器上是否各启动了三个java进程,分别运行name server和两个broker。

    # 查看 java 进程 jps --------------------- 12081 NamesrvStartup 15745 BrokerStartup 15595 BrokerStartup 16655 Jps

    启动管理界面

    # 进入 rocketmq-console 项目打包文件目录 cd /usr/local/rocketmq/RocketMQ-Externals/rocketmq-console/target/ # 启动管理界面 nohup java -jar rocketmq-console-ng-1.0.1.jar \ --server.port=8080 \ --rocketmq.config.namesrvAddr='192.168.64.151:9876;192.168.64.152:9876' \ &

    查看集群状态:

    Processed: 0.016, SQL: 9