1.Rocketmq集群部署方式
此处说的master、slave说的都是Rocketmq中的Broker。
1)单Master模式:
这种方式风险较大,一旦单个broker重启或宕机,会导致整个Rocketmq不可用!仅用于本地测试使用。
2)多Master模式:
全是Master,没有Slave。
优点:配置简单,单个broker宕机或者重启了对应用是无影响的
缺点:宕机的Master上未被消费的消息在Master没有恢复之前不可以订阅,消息时效性会受到影响
3)多Master多Slave模式(异步复制):
每个master配置一个slave,HA采用异步复制的方法,主备有短暂延迟(毫秒级)
优点:即使master出问题了,消息者也可以通过slave消费并且此过程对应用透明无需人工干预
缺点:master宕机、磁盘损坏情况下会出现丢失少量消息
4)多Master多Slave模式(同步双写):
每个master配置一个slave,HA采用同步双写的方法,只有主备都写成功了,才向应用返回成功。
有点:数据与服务都无单点故障,master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制占用性高
2.安装环境
java版本:1.8.0_201 centos:7.5 rocketmq:5.1.3
主机A:192.168.37.8 主机B:192.168.37.9
3.Rocketmq集群部署方案:
此处使用两台服务器搭建双NameServer、双主Broker、双从Broker结构的Rocketmq集群
3.0)下载、解压Rocketmq
wget https://dist.apache.org/repos/dist/release/rocketmq/5.1.3/rocketmq-all-5.1.3-bin-release.zip
unzip rocketmq-all-5.1.3-bin-release.zip
mv rocketmq-all-5.1.3-bin-release rocketmq
3.1 搭建NameServer
1)修改jvm参数(可不做)
在启动NameServer之前,建议修改一下启动时的jvm参数,因为默认的参数都比较大,为了避免内存不够,建议修改小。当然,如果你的内存足够大,可以忽略!
vim rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512 -Xmn256m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=50m"
2)修改日志存放位置:
2-1)默认存放位置:
配置文件为conf/rmq.namesrv.logback.xml中
文件存放位置:/app/logs/rocketmqlogs/{namesrv_default.log, namesrv.log,namesrv_traffic.log}
2-2)修改文件存放位置:
创建目录存放位置
mkdir /app/rocketmq/logs
方法1:直接指定日志存放位置
nohup /bin/bash /app/rocketmq/bin/mqnamesrv > /app/rocketmq/logs/mqnamesrv.log 2>&1 &
方法2:启动文件中指定参数值
替换user.home的值为日志存储位置,比如/app/rocketmq
sed -i 's#${user.home}#/app/rocketmq#g' /app/rocketmq/conf/*.xml
3)启动NameServer服务:
nohup /bin/bash /app/rocketmq/bin/mqnamesrv &
4)关闭NameServer:
/bin/bash /app/rocketmq/bin/mqshutdown namesrv
5)NameServer默认监听端口:9876
如果想修改默认监听端口,在rocketmq的conf目录下添加namesrv.properties文件,文件中添加端口配置
listenPort=8876
启动的时候需要指定配置文件:nohup sh bin/mqnamesrv -c conf/namesrv.properties &
3.2安装Broker
每台主机上都要启动一个Master和Slave角色的Broker并且互为主备。
A机器 B机器
broker-a的master节点 broker-a的slave节点
broker-b的slave节点 broker-b的master节点
在conf下面提供了几种集群方式的配日志文件实例:
2m-noslave-----------------双master节点
2m-2s-sync -----------------双master双slave同步双写模式
2m-2s-async----------------双master双slave异步复制模式
此次安装采用2m-2s-async
1)修改A服务器broker-a.properties节点的配置信息:
2)修改A服务器Slave Broker的配置文件broker-b-s.properties(主要关注红色标注的配置信息):
3)修改B服务器上的Master Broker的配置文件broker-b.properties
4)在B服务器上的Slave Broker的配置文件broker-a-s.properties
4)启动有可能会报内存不足,需要手动调整broker的启动参数(broker的java启动内存参数配置的是8g,请根据服务器实际资源做调整):
将JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g" 修改为JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn 512m"
5)启动broker:
启动时,先启动两台机器上的Master节点,再启动两台机器上的Slave节点
A-master:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
B-master:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &
A-slave:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
B-slave:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
6)查看集群情况:
4.关闭rocketmq服务:
先关闭Broker、再关闭NameServer,服务启动的时候正好相反。
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv