安装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 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
|
修改完后, 让环境变量立即生效
减小 RocketMQ使用的内存(根据环境配置)
rocketmq需要启动两个服务: name server
和 broker
,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' \ &
|