RocketMQ笔记(2)_双主双从部署
来源:互联网 发布:system.log windows 编辑:程序博客网 时间:2024/05/20 18:42
RocketMQ作为分布式的消息中间件,生产环境中只有集群部署才有实际意义。本文主要介绍双主双从的配置与及部署过程中可能遇到的问题,并假定每台机器均已安装好RocketMQ和JDK。如编译安装过程有疑问,请参考:
RocketMQ笔记(1)_Linux下编译部署
1. 环境信息
1.1 版本说明
RocketMQ: 3.5.8
JDK: jdk-8u111-linux-x64
OS: Centos6.5_x64
1.2 安装目录
ROCKETMQ_HOME: /usr/javawork/RocketMQ
JAVA_HOME: /usr/java/jdk1.8.0_111
2. 服务器信息
4台服务器均是虚拟机,配置为 1核CPU + 2g内存。
IP
主机名
用途
Broker角色
192.168.0.11
broker-a
NameServer,Broker
Master
192.168.0.14
broker-b
NameServer, Broker
Master
192.168.0.16
broker-a-s
NameServer, Broker
Slave
192.168.0.17
broker-b-s
NameServer, Broker
Slave
3. Hosts信息
依次修改每台主机的hosts文件:
vim /etc/hosts
添加如下信息:
192.168.0.11 mqnameserver1
192.168.0.14 mqnameserver2
192.168.0.16 mqnameserver3
192.168.0.17 mqnameserver4
192.168.0.11 broker-a
192.168.0.14 broker-b
192.168.0.16 broker-a-s
192.168.0.17 broker-b-s
4. 主机名修改
依次修改每台主机的network文件:
vim /etc/sysconfig/network
根据服务器信息设定主机名:
HOSTNAME=broker-b
这一步非必需,但为了让主机名更加清晰,所以重新命名。
5. Broker配置文件
5.1 配置文件模板生成
cd /usr/javawork/RocketMQ/bin/
mkdir ../conf/me-2m-2s-async/
sh mqbroker -m >../conf/me-2m-2s-async/broker.p
5.2 配置文件信息修改
vim ../conf/me-2m-2s-async/broker.p
主机192.168.0.11(broker-a)修改后的配置文件信息如下
namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
brokerIP1=192.168.0.11
brokerName=broker-a
brokerClusterName=TestCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=1000
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true
红色部分是根据模板文件修改的内容:
namesrvAddr=mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
指定broker注册的NameServer服务器
brokerIP1=192.168.0.11
强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误
brokerName=broker-a
系统根据此名称确定主从关系,因此master和slave必须一致。每台机器的设定如下:
192.168.0.11
192.168.0.14
192.168.0.16
192.168.0.17
broker-a
broker-b
broker-a-s
broker-b-s
brokerClusterName=TestCluster
集群名称,可根据自己的需要修改。
brokerId=0
0 表示 Master, >0 表示 Slave,每台机器的设定如下:
192.168.0.11
192.168.0.14
192.168.0.16
192.168.0.17
0
0
1
1
brokerRole=ASYNC_MASTER
主从角色和是否异步,每台机器的设定如下:
192.168.0.11
192.168.0.14
192.168.0.16
192.168.0.17
ASYNC_MASTER
ASYNC_MASTER
SLAVE
SLAVE
6. 启动NameServer
每台机器依次执行命令:
screen sh mqnamesrv
出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON
按 Ctrl+a 保存会话,然后按d 返回命令窗口
7. 启动Broker
每台机器依次执行命令:
screen sh mqbroker -c ../conf/me-2m-2s-async/broker.p
出现如下信息表示启动成功:
load config properties file OK, ../conf/me-2m-2s-async/broker.p
The broker[broker-a, 192.168.0.11:10911] boot success. serializeType=JSON and name server is mqnameserver1:9876;mqnameserver2:9876;mqnameserver3:9876;mqnameserver4:9876
8. 简单测试
8.1 Windows环境测试
添加环境变量:
NAMESRV_ADDR
192.168.0.11:9876;192.168.0.14:9876;192.168.0.16:9876;192.168.0.17:9876
运行测试:
分别运行Producer和PushConsumer:
⑴ 注释掉NameServer,运行结果消息收发正常。
⑵ 指定任意一台NameServer的IP,运行结果消息收发正常。
⑶ 关闭任意一台机器的NameServer服务,运行结果消息收发正常。
⑷ 关闭Slave的Broker服务,运行结果消息收发正常。
8.2 Linux环境测试
设定环境变量:
export NAMESRV_ADDR=192.168.0.11:9876\;192.168.0.14:9876\;192.168.0.16:9876\;192.168.0.17:9876
运行测试:
bash tools.sh com.alibaba.rocketmq.example.quickstart.Producer
bash tools.sh com.alibaba.rocketmq.example.quickstart.Consumer
运行结果消息收发正常。
9. 问题
9.1 无法启动Broker
查看Broker运行日志:
tail -f ~/logs/rocketmqlogs/broker.log
⑴ 检查JDK版本是否为64bit 1.6+,否则会报“connect to <mqnameserver:9876> failed”。
⑵ 开发环境Broker运行的机器内存不小于2g; runbroker.sh的Java参数最低: -Xms2g -Xmx2g -Xmn512m;否则很容易报“java.lang.OutOfMemoryError: Java heap space”。生产环境按照官方文档说法是内存越大越好。
9.2 测试程序访问异常
com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1
⑴ 启动Broker时是否加载了配置文件并指定NameServer。
⑵ NameServer和Broker所在主机的防火墙是否允许访问。
⑶ broker配置文件是否为“autoCreateTopicEnable=true”,有网友说即使这个选项为true,也无法自动创建超过4个Topic,需要手动创建,经测试并未发现此问题,估计新版已修复Bug。
9.3 其它
RocketMQ的编译、安装、运行都做得非常人性化,出现的问题几乎都跟网络环境有关,开发环境可以选择直接关闭防火墙。
开发环境:每台broker至少能访问一台nameServer;主从broker能互相访问;Producer和Consumer必须能访问至少一台nameServer和一台主broker。
10 配置下载
RocketMQ-3.5.8,双主双从配置文件、已编译安装包、安装部署文档及开发环境测试项目下载
11 参考资料
《分布式消息队列RocketMQ部署与监控》 作者:workming
http://sofar.blog.51cto.com/353572/1540874
- RocketMQ笔记(2)_双主双从部署
- Rocketmq 配置双主双从
- RocketMQ笔记(1)_Linux下编译部署
- 【MQ】Centos7搭建双主双从RocketMQ集群
- rocketmq笔记
- RocketMQ 入门部署
- rocketMQ集群部署
- rocketmq linux 部署
- Apache RocketMQ部署文档
- Centos7 RocketMQ单机部署
- RocketMQ集群部署配置
- rocketmq安装部署
- RocketMQ的集群部署
- RocketMQ部署开发
- RocketMQ 消息队列简单部署
- RocketMQ 消息队列简单部署
- RocketMQ双Master模式部署
- RocketMQ单机部署及使用
- 上海 GDG 为你准备的 Android SDK 的专用更新代理服务器地址
- 《算法》第一章——中缀表达式转前缀和后缀表达式
- 关于WAMPserver中phpadmin连接mysql时出现#1045无法登陆mysql的解决方法
- Android 停止其他App音乐
- 最大公约数GCD(Greatest Common Divisor)算法小结
- RocketMQ笔记(2)_双主双从部署
- hdu 5935 Car
- 二叉树线索化与遍历线索二叉树
- 正则表达式
- LeetCode No.75 Sort Colors
- MySQL基本命令
- 没时间写总结
- BestCoder Round #89
- Xamarin android如何反编译apk文件