0%

RocketMQ双主双从部署

安装JDK

解压

1
2
# 将jdk解压到 /usr/local/ 目录
tar -xf jdk-8u311-linux-x64.tar.gz -C /usr/local/

添加环境变量

修改 /etc/profile 配置文件, 配置环境变量

1
2
3
4
5
vim /etc/profile

# 在文件末尾添加以下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_311
export PATH=$JAVA_HOME/bin:$PATH

修改完后, 让环境变量立即生效

1
source /etc/profile

验证

1
2
3
4
[root@localhost local]# java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)

安装RocketMQ

RocketMQ版本下载地址:https://rocketmq.apache.org/dowloading/releases/

下载 RocketMQ二进制文件

1
wget https://archive.apache.org/dist/rocketmq/4.5.2/rocketmq-all-4.5.2-bin-release.zip

解压缩 RocketMQ

将 rocketmq 解压到 /usr/local/ 目录

1
unzip rocketmq-all-4.5.2-bin-release.zip -d /usr/local/

配置环境变量 ROCKETMQ_HOME 和 PATH

为了后续操作方便可以配置环境变量,之后在任意位置都可以执行rocketmq的操作命令。

1
2
3
4
5
vim /etc/profile

# 在文件末尾添加以下内容:
export ROCKETMQ_HOME=/usr/local/rocketmq-all-4.5.2-bin-release
export PATH=$ROCKETMQ_HOME/bin:$PATH

修改完后, 让环境变量立即生效

1
source /etc/profile

减小 RocketMQ使用的内存(根据环境配置)

rocketmq需要启动两个服务: name serverbroker,name server 默认配置JVM使用的内存是4g, broker默认配置JVM使用的内存是8g.

修改 name server 内存改为 256m

1
2
3
4
5
6
7
8
9
10
11
# 在RocketMQ目录下
cd /usr/local/rocketmq-all-4.5.2-bin-release/

# 编辑 bin/runserver.sh
vim bin/runserver.sh

# 找到文件中下面这一行:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# 将 -Xms4g -Xmx4g -Xmn2g 修改为 -Xms256m -Xmx256m -Xmn128m
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改 broker 内存改为 256m

1
2
3
4
5
6
7
8
# 编辑 bin/runbroker.sh
vim bin/runbroker.sh

# 找到文件中下面这一行:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

# 将 -Xms8g -Xmx8g -Xmn4g 修改为 -Xms256m -Xmx256m -Xmn128m
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

配置RocketMQ 主从

服务器信息

1
2
3
ip                     角色                          架构模式
1.10.146.15.8 nameServer,brokerserver Master1,Slave2
2.10.146.15.9 nameserver,brokerserver Master2,Slave1

架构

创建文件夹

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

1
mkdir -p /usr/local/rocketmq-all-4.5.2-bin-release/{data,data2}/store/{commitlog,consumequeue,index}

修改配置文件

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

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

选择双主双从异步复制方案

broker配置说明:

参数名 默认值 说明
listenPort 10911 接受客户端连接的监听端口
namesrvAddr null nameServer 地址
brokerIP1 网卡的 InetAddress 当前 broker 监听的 IP
brokerIP2 跟 brokerIP1 一样 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
brokerName null broker 的名称
brokerClusterName DefaultCluster 本 broker 所属的 Cluser 名称
brokerId 0 broker id, 0 表示 master, 其他的正整数表示 slave
storePathCommitLog $HOME/store/commitlog/ 存储 commit log 的路径
storePathConsumerQueue $HOME/store/consumequeue/ 存储 consume queue 的路径
mappedFileSizeCommitLog 1024 * 1024 * 1024(1G) commit log 的映射文件大小
deleteWhen 04 在每天的什么时间删除已经超过文件保留时间的 commit log
fileReservedTime 72 以小时计算的文件保留时间
brokerRole ASYNC_MASTER SYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskType ASYNC_FLUSH SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。

broker-a,a主服务器配置

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
brokerClusterName=RocketMQCluster
brokerName=broker-a
brokerId=0
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

##Broker 对外服务的监听端口
listenPort=10911
#nameserver地址,分号分割
namesrvAddr=10.146.15.8:9876;10.146.15.9:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

brokerIP1=10.146.15.8
storePathRootDir=/usr/local/rocketmq-all-4.5.2-bin-release/data/store
storePathCommitLog=/usr/local/rocketmq-all-4.5.2-bin-release/data/store/commitlog
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq-all-4.5.2-bin-release/data/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/data/store/index

#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
#diskMaxUsedSpaceRatio=88
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 3h 4h 5h 6h 7h 8h 9h 10h 11h 12h 24h

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
brokerClusterName=RocketMQCluster
brokerName=broker-a
brokerId=1
listenPort=10921
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

brokerIP1=10.146.15.9
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

storePathRootDir=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store
storePathCommitLog=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store/commitlog
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store/index

#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
#diskMaxUsedSpaceRatio=88
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 3h 4h 5h 6h 7h 8h 9h 10h 11h 12h 24h

broker-b,b主服务器配置

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
brokerClusterName=RocketMQCluster
brokerName=broker-b
brokerId=0
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

##Broker 对外服务的监听端口
listenPort=10911
#nameserver地址,分号分割
namesrvAddr=10.146.15.8:9876;10.146.15.9:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

brokerIP1=10.146.15.9
storePathRootDir=/usr/local/rocketmq-all-4.5.2-bin-release/data/store
storePathCommitLog=/usr/local/rocketmq-all-4.5.2-bin-release/data/store/commitlog
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq-all-4.5.2-bin-release/data/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/data/store/index

#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
#diskMaxUsedSpaceRatio=88
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 3h 4h 5h 6h 7h 8h 9h 10h 11h 12h 24h

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
brokerClusterName=RocketMQCluster
brokerName=broker-b
brokerId=1
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10921
#nameserver地址,分号分割
namesrvAddr=10.146.15.8:9876;10.146.15.9:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

brokerIP1=10.146.15.8
storePathRootDir=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store
storePathCommitLog=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store/commitlog
# 消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.5.2-bin-release/data2/store/index

#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
#diskMaxUsedSpaceRatio=88
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 3h 4h 5h 6h 7h 8h 9h 10h 11h 12h 24h

启动name server

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

1
2
cd /usr/local/rocketmq-all-4.5.2-bin-release
nohup sh bin/mqnamesrv > ./namesrvrun.log 2>&1 &

启动broker

在服务器1启动broker-a和broker-b-s

1
2
3
4
5
# broker-a
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties -n "10.146.15.8:9876;10.146.15.9:9876" > ./broker-a.log 2>&1 &

# broker-b-s
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties -n "10.146.15.8:9876;10.146.15.9:9876" > ./broker-b-s.log 2>&1 &

在服务器1启动broker-b和broker-a-s

1
2
3
4
5
# broker-b
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties -n"10.146.15.8:9876;10.146.15.9:9876" > ./broker-a.log 2>&1 &

# broker-a-s
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties -n"10.146.15.8:9876;10.146.15.9:9876" > ./broker-b-s.log 2>&1 &

检查启动的服务

1
2
3
4
5
6
## 查看 java 进程
[root@localhost rocketmq-all-4.5.2-bin-release]# jps
1877 Jps
1655 BrokerStartup
1719 BrokerStartup
1164 NamesrvStartup

启动管理界面

1
2
3
4
5
## 启动管理界面
nohup java -jar rocketmq-console-ng-1.0.1.jar \
--server.port=8080 \
--rocketmq.config.namesrvAddr='10.146.15.8:9876;10.146.15.9:9876' \
&