RocketMq集群
1.安装RocketMq
1.解压RocketMq
unzip rocketmq45.zip /usr/local/rocketmq
根据实际情况修改内存配置(默认值太大)
vim bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
参数如下:
内存:
-Xms 和 -Xmx:设置 JVM 的初始堆大小和最大堆大小。
建议将 -Xms 和 -Xmx设置为相同的值,以避免堆大小动态调整带来的性能开销。-XX:NewSize 和 -XX:MaxNewSize
:设置年轻代的初始大小和最大大小。年轻代是存放新创建对象的地方,合理设置可减少GC 的频率。-XX:SurvivorRatio:设置 Eden 区和 Survivor
区的比例。例如:-XX:SurvivorRatio=8 表示 Eden 区与一个
Survivor 区的比例为 8:1。-XX:MetaspaceSize和*-XX:MaxMetaspaceSize** :设置元空间的初始大小和最大大小。
元空间用于存放类的元数据,合理设置可以避免频繁的元空间垃圾回收。
垃圾回收:
-XX:+UseSerialGC:使用串行垃圾回收器,适用于单核 CPU
或小型应用。-XX:+UseParallelGC:使用并行垃圾回收器,适用于多核
CPU,适合吞吐量优先的应用。-XX:+UseConcMarkSweepGC:使用
CMS(并发标记清除)垃圾回收器,适用于低延迟应用。-XX:+UseG1GC:使用 G1
垃圾回收器,适用于大内存、低延迟的应用。
2.RocketMq集群搭建三种模式
2.1 2m-2s-async(主从异步)
在多master模式的基础上,每个master节点都有至少一个对应的slave。
master节点可读可写,但是slave只能读不能写,类似于mysql的主从模式。
优点:在master宕机时,消费者可以从slave读取消息,消息的实时性不会受影响,性能几乎和多master一样。
缺点:使用异步复制的同步方式有可能会有消息丢失的问题。
2.1.1broker主节点配置
#进入主节点的mq
cd /usr/local/rocketmq
#更改配置文件
vim conf/2m-2s-async/broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
#0 表示 Master,大于0 表示 Slave
brokerId=0
#Broker 对外服务的监听端口
listenPort=10910
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/usr/local/rocketmq/a_storea #数据存储目录
storePathCommitLog=/usr/local/rocketmq/a_store/commitlog #提交日志存储目录
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/a_store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/a_store/index
2.1.2启动主节点mq(192.168.1.123)
#进入目录
cd /usr/local/rocketmq/
#创建日志目录
mkdir logs
#运行名称服务器
nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
#查看启动日志
tail -f -n 30 logs/mqnamesrv.log
#启动消息服务器主节点
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties -n '192.168.1.123:9876;192.168.1.124:9876' > logs/broker-a.log 2>&1 &
#查看消息服务器主节点启动日志
tail -f -n 30 logs/broker-a.log
2.1.3broker从节点配置
#进入从节点的mq
cd /usr/local/rocketmq
#拷贝配置文件
vim conf/2m-2s-async/broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
#主从节点的节点名称要一样
#0 表示 Master,大于0 表示 Slave
brokerId=1
#Broker 对外服务的监听端口
listenPort=10911
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
storePathRootDir=/usr/local/rocketmq/b_storea #数据存储目录
storePathCommitLog=/usr/local/rocketmq/b_store/commitlog #提交日志存储目录
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/b_store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/b_store/index
brokerName" 注:它们共享同一个brokerName,客户端是通过brokerId来区分主机和从机的,
所以不能把主从的brokerName设置得不一样。"
2.1.4启动从节点mq(192.168.1.124)
#进入目录
cd /usr/local/rocketmq/
#创建日志目录
mkdir logs
#运行服务器
nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
#查看启动日志
tail -f -n 30 logs/mqnamesrv.log
#启动消息服务器从节点
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties -n '192.168.1.123:9876;192.168.1.124:9876' > logs/broker-b-s.log 2>&1 &
#查看消息服务器从节点启动日志
tail -f -n 30 logs/broker-b-s.log
2.2 2m-2s-sync (主从同步)
同多master多slave异步复制模式类似,区别在于master和slave之间的数据同步方式。
优点:同步双写的同步模式能保证数据不丢失。
缺点:发送单个消息RT会略长,性能相比异步复制低10%左右。
刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
同步方式:同步双写和异步复制(指的一组master和slave之间数据的同步)
**注意:**要保证数据可靠,需要采用同步刷盘和同步双写的方式,但性能会较其他方式低。
2.2.1broker主节点配置
#进入主节点的mq
cd /usr/local/rocketmq
#更改配置文件
vim conf/2m-2s-sync/broker-a.properties`
brokerClusterName=DefaultCluster
brokerName=broker-a
#0 表示 Master,大于0 表示 Slave
brokerId=0
#Broker 对外服务的监听端口
listenPort=10911
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/usr/local/rocketmq/a_storea #数据存储目录
storePathCommitLog=/usr/local/rocketmq/a_store/commitlog #提交日志存储目录
2.2.2启动主节点mq(192.168.1.123)
#进入目录
cd /usr/local/rocketmq/
#创建日志目录
mkdir logs
#运行名称服务器
nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
#查看启动日志
tail -f -n 30 logs/mqnamesrv.log
#启动消息服务器主节点
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties -n '192.168.1.123:9876;192.168.1.124:9876' > logs/broker-a.log 2>&1 &
#查看消息服务器主节点启动日志
tail -f -n 30 logs/broker-a.log
2.2.3broker从节点配置
#进入从节点的mq
cd /usr/local/rocketmq
#更改配置文件
vim conf/2m-2s-sync/broker-b-s.properties
br
okerClusterName=DefaultCluster
brokerName=broker-a#主从节点的节点名称要一样
#0 表示 Master,大于0 表示 Slave
brokerId=1
#Broker 对外服务的监听端口
listenPort=10911
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
storePathRootDir=/usr/local/rocketmq/b_store #数据存储目录
storePathCommitLog=/usr/local/rocketmq/b_store/commitlog#提交日志存储目录
brokerName" 注:它们共享同一个brokerName,客户端是通过brokerId来区分主机和从机的,
所以不能把主从的brokerName设置得不一样。"
2.2.4启动从节点mq(192.168.1.124)
#进入目录
cd /usr/local/rocketmq/
#创建日志目录
mkdir logs
#运行服务器
nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
#查看启动日志
tail -f -n 30 logs/mqnamesrv.log
#启动消息服务器从节点
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties -n '192.168.1.123:9876;192.168.1.124:9876' > logs/broker-b-s.log 2>&1 &
#查看消息服务器从节点启动日志
tail -f -n 30 logs/broker-b-s.log
2.3 2m-noslave (仅master)
多个master节点组成集群,单个master节点宕机或者重启对应用没有影响。
优点:所有模式中性能最高
缺点:单个master节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。
注意:使用同步刷盘可以保证消息不丢失,同时Topic相对应的queue应该分布在集群中各个节点,而不是只在某节点上,否则,该节点宕机会对订阅该Topic的应用造成影响。
2.1.1broker主节点配置
#进入主节点的mq
cd /usr/local/rocketmq
#更改配置文件
vim conf/2m-noslave/broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
#0 表示 Master,大于0 表示 Slave
brokerId=0
#Broker 对外服务的监听端口
listenPort=10910
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC\_FLUSH 异步刷盘
#- SYNC\_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#限制的消息大小
maxMessageSize=65536
storePathRootDir=/usr/local/rocketmq/a_storea #数据存储目录
storePathCommitLog=/usr/local/rocketmq/a_store/commitlog #提交日志存储目录
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/a_store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/a_store/index
2.1.2启动主节点mq(192.168.1.123)
#进入目录
cd /usr/local/rocketmq/
#创建日志目录
mkdir logs
#运行名称服务器
nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
#查看启动日志
tail -f -n 30 logs/mqnamesrv.log
#启动消息服务器主节点
nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties -n '192.168.1.123:9876;192.168.1.124:9876' > logs/broker-a.log 2>&1 &
#查看消息服务器主节点启动日志
tail -f -n 30 logs/broker-a.log
2.1.2启动主节点mq(192.168.1.124)
#进入主节点的mq
cd /usr/local/rocketmq
#更改配置文件
vim conf/2m-noslave/broker-b.properties
与broker-a.properties唯一不同的就是brokerName属性
brokerName=broker-b
然后启动
#进入目录
cd /usr/local/rocketmq/
#创建日志目录
mkdir logs
#运行名称服务器
nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
#查看启动日志
tail -f -n 30 logs/mqnamesrv.log
#启动消息服务器主节点
nohup sh bin/mqbroker -c conf/2m-noslave/broker-b.properties -n '192.168.1.123:9876;192.168.1.124:9876' > logs/broker-b.log 2>&1 &
#查看消息服务器主节点启动日志
tail -f -n 30 logs/broker-b.log
2.4 启动管理界面
nohup java -jar /usr/local/rocketmq/rocketmq-console-ng-1.0.1.jar --server.port=7777 --rocketmq.config.namesrvAddr=192.168.1.123:9876;192.168.1.124:9876 &