1、安装内容说明
每个Master配置一个Slave,有多对Master-Slave,HA(双机集群)采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:
-
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
-
缺点:Master宕机,磁盘损坏情况下会丢失少量消息。
安装模块
-
NameServer是一个非常简单的
Topic路由注册中心
,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现
。主要包括两个功能:
-
Broker管理,NameServer接受
Broker集群的注册信息并且保存下来作为路由信息的基本数据
。然后提供心跳检测机制,检查Broker是否还存活; -
路由信息管理,每个
NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息
。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群
的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息
。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer和Consumer仍然可以动态感知Broker的路由的信息。
-
-
BrokerServer:Broker主要
负责消息的存储、投递和查询以及服务高可用保证
-
rocketmq-console 控制台(可选):通过UI界面监控和管理mq
-
下载镜像包
docker pull apache/rocketmq:4.9.0
-
首先运行命令启动Name Server
docker run -d \ --restart=always \ --name rmqnamesrv \ -p 9876:9876 \ -v /home/RocketMQ/nameServer/log:/root/logs \ -v /home/RocketMQ/nameServer/store:/root/store \ -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \ -e "JAVA_OPTS=-Duser.home=/opt" \ apache/rocketmq:4.9.0 \ sh mqnamesrv
sh mqnamesrv:执行启动启动namesrv服务
JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128mjvm信息可以进入容器中查看运行的sh文件
-
配置broker主从节点
如果nameServer是多节点则namesrvAddr=192.168.0.134:9876;192.168.0.135:9876
以;分割配置多个节点
创建四个broker的配置文件listenPort分别为10611、10711、10811、10911,一主一从一组。这里提供一主一从供参考,其余只需要修改brokerName和listenPort即可
master节点配置文件
# 两个server的地址加端口号 namesrvAddr=192.168.0.134:9876 # 所属集群名称,如果节点较多可以配置多个 brokerClusterName = DefaultCluster # broker名称,master和slave使用相同的名称,表明他们的主从关系 brokerName = broker01 # 0表示Master,大于0表示不同的slave brokerId = 0 # 表示几点做消息删除动作,默认是凌晨4点 deleteWhen = 04 # 在磁盘上保留消息的时长,单位是小时 fileReservedTime = 48 # 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制; brokerRole = ASYNC_MASTER # 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要; flushDiskType = ASYNC_FLUSH # 设置broker节点所在服务器的ip地址 brokerIP1 = 192.168.0.134 brokerIP2 = 192.168.0.134 # 监听端口 listenPort=10611 # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full diskMaxUsedSpaceRatio=95
slave配置文件
# 两个server的地址加端口号 namesrvAddr=192.168.0.134:9876 # 所属集群名称,如果节点较多可以配置多个 brokerClusterName = DefaultCluster # broker名称,master和slave使用相同的名称,表明他们的主从关系 brokerName = broker01 # 0表示Master,大于0表示不同的slave brokerId = 1 # 表示几点做消息删除动作,默认是凌晨4点 deleteWhen = 04 # 在磁盘上保留消息的时长,单位是小时 fileReservedTime = 48 # 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制; brokerRole = ASYNC_MASTER # 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要; flushDiskType = ASYNC_FLUSH # 设置broker节点所在服务器的ip地址 brokerIP1 = 192.168.0.134 brokerIP2 = 192.168.0.134 # 监听端口 listenPort=10711 # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full diskMaxUsedSpaceRatio=95
运行docker命令启动Broker集群
docker run -d \ --restart=always \ --name rmqbrokerMaster1 \ -p 10611:10611 \ -p 10901:10909 \ -v /home/liushiwei/tools/RocketMQ/brokerServer01/masterLogs:/root/logs \ -v /home/liushiwei/tools/RocketMQ/brokerServer01/masterStore:/root/store \ -v /home/liushiwei/tools/RocketMQ/brokerServer01/conf/masterBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \ -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \ -e "JAVA_OPTS=-Duser.home=/opt" \ apache/rocketmq:4.9.0 \ sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf docker run -d \ --restart=always \ --name rmqbrokerSlave1 \ -p 10711:10711 \ -p 10902:10909 \ -v /home/RocketMQ/brokerServer01/slaveLogs:/root/logs \ -v /home/RocketMQ/brokerServer01/slaveStore:/root/store \ -v /home/RocketMQ/brokerServer01/conf/slaveBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \ -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \ -e "JAVA_OPTS=-Duser.home=/opt" \ apache/rocketmq:4.9.0 \ sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf docker run -d \ --restart=always \ --name rmqbrokerMaster2 \ -p 10811:10811 \ -p 10903:10909 \ -v /home/RocketMQ/brokerServer02/masterLogs:/root/logs \ -v /home/RocketMQ/brokerServer02/masterStore:/root/store \ -v /home/RocketMQ/brokerServer02/conf/masterBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \ -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \ -e "JAVA_OPTS=-Duser.home=/opt" \ apache/rocketmq:4.9.0 \ sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf docker run -d \ --restart=always \ --name rmqbrokerSlave2 \ -p 10911:10911 \ -p 10904:10909 \ -v /home/RocketMQ/brokerServer02/slaveLogs:/root/logs \ -v /home/RocketMQ/brokerServer02/slaveStore:/root/store \ -v /home/RocketMQ/brokerServer02/conf/slaveBroker.conf:/opt/rocketmq-4.9.0/conf/broker.conf \ -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \ -e "JAVA_OPTS=-Duser.home=/opt" \ apache/rocketmq:4.9.0 \ sh mqbroker -c /opt/rocketmq-4.9.0/conf/broker.conf
Broker与Slave配对是通过指定相同的BrokerName参数来配对,Master的BrokerId必须是0,Slave的BrokerId必须是大于0的数。另外一个Master下面可以挂载多个Slave,同一Master下的多个Slave通过指定不同的BrokerId来区分
-
安装rockermq-console容器
docker run -d \ --restart=always \ --name rmqadmin \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.134:9876 \ -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ -p 9999:8080 \ pangliang/rocketmq-console-ng
详细说明GitHub官方文档
这里讲的非常非常非常详细