由于我的电脑内存不够大,所以集群方式没办法做了,rocketmq很吃内存。本文我会把书上资料的步骤给大家贴出来。如有疑问请直接联系我,联系方式在最下方。
启动 RocketMQ 的顺序是先启动 NameServer,再启动 Broker,这时候消 息队列已 经可以提供服务了,想发送消息就使用 Producer来发送,想接收消息 就使用 Consumer来接收 。 很多应用程序既要发送,又要接收,可以启动多个Producer 和 Consumer 来发送多种消息,同时接收多种消息 。
为了消除单点故障,增加可靠性或增大吞吐 量 ,可以在多台机器上部署多 个 NameServer 和 Broker,为每个 Broker部署一个或多个 Slave。
下图是RocketMQ各角色之间的关系
用两台物理机,搭建 出双主 、 双从 、 无单点故 障的高可用 RocketMQ集群。 假设这两台物理机的 IP分别是 192.168.100.131 和 192.168 . 100.132 。
启动多个 NameServer 和 Broker
首先我们两台机器上都应有同样的rocketMQ服务,具体做法,包括安装启动,查看日志等点击链接:【RocketMq实战第一篇】-RocketMq下载与安装
首先在这 两台机器上分别启动 NameServer ( nohup sh bin/mqnamesrv &), 这样我们就得到了 一个无单点的 NameServer服务, 服务地址是“ 192.168.100. 131:9876;192.168.100.132:9876”。
然后启动 Broker,每台机器上都要分别启动一个 Master 角色的 Broker 和一 个 Slave 角色的 Broker,并互为 主备 。 可以 基于 RocketMQ 自带的 示例配置 文件写自己的配置文件(示例配置文件在 conf/2m-2s-sync 目录下)。
1)192.168.100.131 机器上 Master Broker 的配置文件:
namesrvAddr=192.168.100. 131:9876;192.168.100.132:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
storePathRootDir=/home/rocketmq/store-a
2)192.168.100.132 机器上 Master Broker 的配置文件:
namesrvAddr=192.168.100. 131:9876;192.168.100.132:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
storePathRootDir=/home/rocketmq/store-b
3) 192.168.100.131 机器上 Slave Broker 的配置文件:
namesrvAddr=192.168.100. 131:9876;192.168.100.132:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10111
storePathRootDir=/home/rocketmq/store-b
4) 192.168.100.132机器上 SlaveBroker的配置文件:
namesrvAddr=192.168.100. 131:9876;192.168.100.132:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10111
storePathRootDir=/home/rocketmq/store-a
以上配置文件内容分别是红色框里的,大家要仔细看好,然后把对应的配置进行替换,记得namesrvAddr要换成自己服务器ip,storePathRootDir目录要有。
然后分别使用如下命令启动四个 Broker: “config_file”是变量分别是这四个配置文件的绝对路径。
nohup sh . /bin/mqbroker - c config_file &
这样就是两台物理机,每台都有一主一从。
1)namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876
NamerServer 的地址,可以是多个 。
2) brokerClusterName=DefaultCluster
Cluster 的地址,如果集群机器数比较多,可以分成多个 Cluster,每个 Cluster 供一个业务群使用 。
3) brokerName=broker-a
Broker 的名称, Master 和 Slave 通过使用相同的 Broker 名称来表明相互关系,以说明某个 Slave 是哪个 Master 的 Slave。
4) brokerId=0
一个 Master Barker可以有多个 Slave, 0表示 Master,大于 0表示不同 Slave 的 ID。
5) fileReservedTime=48
在磁盘上保存消息的时长,单位是小时,自动删除超时的消息 。
6) deleteWhen=04
与 fileReservedTim巳参数呼应,表明在几点做消息删除动作,默认值 04表 示凌晨 4点。
7) brokerRole=SYNC_MASTER
brokerRole 有 3 种: SYNC_MASTER、 ASYNC_MASTER、 SLAVE。 关键 词 SYNC 和 ASYNC 表示 Master 和 Slave 之间同步消息的机制, SYNC 的意思 是当 Slave 和 Master 消息同步完成后,再返回发送成功的状态 。
8) flushDiskType=ASYNC_FLUSH
flushDiskType表示刷盘策略,分为SYNC_FLUSH和ASYNC_FLUSH两 种,分别代表同步刷盘和异步刷盘。 同步刷盘情况下,消息真正写人磁盘后再 返回成功状态;异步刷盘情况下,消息写人 page_cache 后就返回成功状态 。
9) listenPort=10911
Broker监听的端口 号,如果一台机器上启动了多个 Broker, 则要设置不同的端口号,避免冲 突 。
10 ) storePathRootDir=/home/rocketmq/store-a 存储消息以及一些配置信息的根目录 。
这些配置参数,在 Broker启动的时候生效,如果启动后有更改,要重启 Broker。
运维服务程序是个 SpringBoot项目,需要从 GitHub 上的 apache/rocketmq externals 里下载 源 码 (https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console)。
下载然后进入下载源码的 目录,运行如下命令 即可启 动:mvn spring-boot:run
也可以编译成 jar 包,通过 java -jar 来执行 。
服务启动后 ,在浏览器里访问 server ip_address:8080 (server_ip_address 是 启动rocketmq心onsole的机器IP) 地址就可看到集群的状态。
大家应该会碰到问题,请关注公众号查找我的联系方式。