RocketMQ集群,包括多主多从异步复制、多主多从同步双写等多种模式,下面搭建一个一主一从异步复制集群。
准备两个虚拟机节点
node1:部署主节点、部署nameServer、部署RocketMQ管控台
node2:部署从节点、部署nameServer
在node1 node2上传RocketMQ源码包,使用mvn -Prelease-all -DskipTests clean install -U
进行编译,进入 /distribution/target/apache-rocketmq
在两个节点上,根据机器内存,修改脚本文件中的jvm参数
runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=320m"
runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
在两个节点上启动nameServer
nohup sh bin/mqnamesrv &
在node1上启动主节点
编辑 conf/2m-2s-async/broker-a.properties,指定两个nameServer的地址,用;分割
namesrvAddr=192.168.50.136:9876;192.168.50.137:9876 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
在node2上启动从节点
编辑 conf/2m-2s-async/broker-a-s.properties,指定两个nameServer的地址,用;分割
namesrvAddr=192.168.50.136:9876;192.168.50.137:9876 brokerClusterName=XdclassCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
使用管控台
在node1上上传rocketmq-console源码包,修改pom.xml版本为使用的版本,修改springboot的配置文件application.properties,指定nameServer地址,多个地址用;分割
application.properties
server.contextPath= server.port=8080 #spring.application.index=true spring.application.name=rocketmq-console spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true logging.config=classpath:logback.xml #if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876 rocketmq.config.namesrvAddr=192.168.50.136:9876;192.168.50.136:9876 #if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true rocketmq.config.isVIPChannel= #rocketmq-console's data path:dashboard/monitor rocketmq.config.dataPath=/tmp/rocketmq-console/data #set it false if you don't want use dashboard.default true rocketmq.config.enableDashBoardCollect=true #set the message track trace topic if you don't want use the default one rocketmq.config.msgTrackTopicName=
对管控台源码编译:mvn clean compie -DskipTests,在target目录下找到rocketmq-console-ng-1.0.0.jar,使用java命令来启动管控台。
在管控台查看到集群信息,部署成功了。
对一主一从集群进行测试后,具有如下特性:
主节点宕机后,应用程序可以继续在从节点消费,但是不能发送消息,在主节点恢复后,主节点会跟从节点同步已经被消费的消息。



