2 生产环境下的配置和使用
rocketMQ的各部分角色Producer 、Consumer 、Broker 和NameServer
现实生活中的邮政系统要正常运行,离不开下面这四个角色,
一是发信者, 二是收信者, 三是负责暂存、传输的邮局, 四是负责协调各个地方邮局的管理机构。
对应到 RocketMQ 中,这四个角色就是
Producer 、Consumer 、Broker 和NameServer
启动RocketMQ 的顺序是先启动NameServer ,再启动Broker ,这时候消息队列已经可以提供服务了,
想发送消息就使用Producer 来发送,想接收消息就使用Consumer 来接收
为了消除单点故障,增加可靠性或增大吞吐量,可以在多台机器上部署多
个NameServer 和Broker ,为每个Broker 部署一个或多个Slave 。
多机集群配置和部署
//假设这两台物理机的IP 分别是192.168.100.131 和192.168 . 100.132 。
我的本机是:192.168.1.3
虚拟机是:172.16.151.240
首先在这两台机器上分别启动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 目录下)。
这里注意点是:
我用的centos虚拟机,默认开启了防火墙,关闭防火墙:
[lakeslove@centos8-ui ~]$ firewall-cmd --state running [lakeslove@centos8-ui ~]$ systemctl stop firewalld.service [lakeslove@centos8-ui ~]$ firewall-cmd --state not running
测试联通性:
[lakeslove@centos8-ui ~]$ telnet 192.168.1.3 9876 Trying 192.168.1.3... Connected to 192.168.1.3. Escape character is '^]'.
bogon:netty lakeslove$ telnet 172.16.151.240 9876 Trying 172.16.151.240... Connected to bogon. Escape character is '^]'.
这里遇到的坑主要以下几个,
1、虚拟机的内存分配太小,导致rocketmq无法启动。
2、虚拟机没有用网络桥接模式。
3、这本书里的讲解时把namesrvAddr=192.168.1.3:9876;192.168.1.10:9876的两个网址间添加了空格,导致无法访问第二个网址。
4、虚拟机中的broker-b-s 无法获取主机中broker-b的正确ip,需要在broker-b的配置文件下添加 brokerIP1=192.168.1.3
集群配置完了这个样子
关于broker配置参数介绍
namesrvAddr=192.168.1.3:9876;192.168.1.10:9876 brokerClusterName=DefaultCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH listenPort=10911 storePathRootDir=/home/lakeslove/software/rocketmq/store-b
l)namesrvAddr=192.168.100.131:9876; 192.168.100.132:9876 NamerServer 的地址,可以是多个。 2) brokerCl usterName=Defaul tCl uster Cluster 的地址,如果集群机器数比较多,可以分成多个Cluster ,每个 Cluster 供一个业务群使用。 3) brokerName=broker- a Broker 的名称, Master 和Slave 通过使用相同的Broker 名称来表明相互关 系,以说明某个Slave 是哪个Master 的Slave 。 4) brokerid=O 一个Master Barker 可以有多个Slave, 0 表示Master ,大于0 表示不同 Slave 的ID 。 5) fileReservedTime=48
在磁盘上保存消息的时长,单位是小时,自动删除超时的消息。
6) deleteWhen=04
与fileReservedTim巳参数呼应,表明在几点做消息删除动作,默认值04 表示凌晨4 点。
7) brokerRole=SYNC MASTER
broker Role 有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 ) listenPor t=l0 911
Broker 监听的端口号,如果一台机器上启动了多个Broker , 则要设置不同的端口号,避免冲突。
10 ) storePathRootDir= /home/rocketmq/store - a
存储消息以及一些配置信息的根目录。
这些配置参数,在Broker 启动的时候生效,如果启动后有更改,要重启Broker 。
现在使用云服务或多阿卡的机器比较普遍, Broker 自动探测获得的ip地址可能不符合要求,
通过brokerIPl =47 .98.41.234 这样的配置参数,可以设置Broker 机器对外暴露的ip 地址。
有几个地方没看明白,主要是
1、订阅组
2、从slave节点读取时,如何不重复?
3、topic和组和(生产者与消费者的)名字和broker的关系
管理集群可以用命令行也可以用界面。
MQAdmin 是RocketMQ 自带的命令行管理工具,在bin 目录下,运行mqadmin 即可执行。
可以修改topic,修改订阅组,热更新broker配置,查询topic信息,查询集群信息。
rocketmq-console可以图形化管理集群。