==========================================================================================
一、RocketMQ简介
==========================================================================================
RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:
1、支持严格的消息顺序;
2、支持Topic与Queue两种模式;
3、亿级消息堆积能力;
4、比较友好的分布式特性;
5、同时支持Push与Pull方式消费消息;
更多介绍可以参考以下链接:
https://github.com/alibaba/RocketMQ/wiki
http://blog.csdn.net/a19881029/article/details/34446629
http://singlefly.blog.51cto.com/4658189/1368579
本文采用双Master的架构模式。
==========================================================================================
二、服务器分布
==========================================================================================
1、相关说明
IP地址 |
主机名 |
机型 |
角色 |
架构模式 |
10.217.121.123 |
rocketmq-master1 |
128G内存 |
nameserver、brokerserver |
Master1(双Master模式) |
10.217.122.31 |
rocketmq-master2 |
128G内存 |
nameserver、brokerserver |
Master2(双Master模式) |
2、hosts信息添加
# vim /etc/hosts
10.217.121.123 mqnameserver1
10.217.122.31 mqnameserver2
10.217.121.123 rocketmq-master1
10.217.122.31 rocketmq-master2
3、系统环境
CentOS 6.3
4、总体架构
==========================================================================================
三、RocketMQ安装与配置
==========================================================================================
1、JDK安装
http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz
# tar xvzf jdk-7u65-linux-x64.gz -C /usr/local
# rm -f jdk-7u65-linux-x64.gz
# cd /usr/local && ln -s jdk1.7.0_65 jdk
# cd /usr/local/bin && ln -s /usr/local/jdk/bin/java
2、RocketMQ安装
https://github.com/alibaba/RocketMQ/releases
# tar xvzf alibaba-rocketmq-3.1.7.tar.gz -C /usr/local
# mv alibaba-rocketmq alibaba-rocketmq-3.1.7
# ln -s alibaba-rocketmq-3.1.7 rocketmq
# rm alibaba-rocketmq-3.1.7.tar.gz
# ll /usr/local
3、环境变量设置
# vim /etc/profile
export PATH=$PATH:/usr/local/bin
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export ROCKETMQ_HOME=/usr/local/rocketmq
export PATH=$PATH::$ROCKETMQ_HOME/bin
# source /etc/profile
# cd /usr/local/rocketmq/bin && sh os.sh
4、主机名设置
(1)、Master1服务器
# vim /etc/hosts
10.217.121.123 mqnameserver1
10.217.122.31 mqnameserver2
10.217.121.123 rocketmq-master1
10.217.122.31 rocketmq-master2
# sed -i '/HOSTNAME/d' /etc/sysconfig/network
# echo 'HOSTNAME=rocketmq-master1' >> /etc/sysconfig/network
# hostname rocketmq-master1
(2)、Master2服务器
# vim /etc/hosts
10.217.121.123 mqnameserver1
10.217.122.31 mqnameserver2
10.217.121.123 rocketmq-master1
10.217.122.31 rocketmq-master2
# sed -i '/HOSTNAME/d' /etc/sysconfig/network
# echo 'HOSTNAME=rocketmq-master2' >> /etc/sysconfig/network
# hostname rocketmq-master2
5、RocketMQ配置
(1)、Master1服务器
# vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
brokerClusterName=AdpMqCluster
brokerName=broker-a
brokerId=0
namesrvAddr=mqnameserver1:9876;mqnameserver2:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=50000000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
(2)、Master2服务器
# vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties
brokerClusterName=AdpMqCluster
brokerName=broker-b
brokerId=1
namesrvAddr=mqnameserver1:9876;mqnameserver2:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=50000000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
(3)、runbroker.sh参数调整
runbroker.sh需要根据内存大小进行适当地调整
JAVA_OPT_1="-server-Xms80g -Xmx80g -Xmn20g -XX:PermSize=1g -XX:MaxPermSize=1g"
6、服务启动
# mkdir -p /data/rocketmq/store/commitlog /data/logs
# cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/data#g' *.xml
(1)、启动NameServer【master1、master2】
# cd /usr/local/rocketmq/bin
# nohup sh mqnamesrv &
(2)、启动BrokerServer A【master1】
# cd /usr/local/rocketmq/bin
# nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
(3)、启动BrokerServer B【master2】
# cd /usr/local/rocketmq/bin
# nohup sh mqbroker -c ../conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
# netstat -ntlp
# jps
==========================================================================================
四、RocketMQ服务健康监控
==========================================================================================
1、依赖组件安装
# yum -y install nmap
2、nameserver监控
# vim /data/scripts/check_nameserver_health.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#!/bin/sh PATH= /sbin : /bin : /usr/sbin : /usr/bin : /usr/local/bin : /usr/local/sbin
SRV_PORT= "9876" ## 端口号
SRV_PROT= "tcp" ## 协议类型
SRV_NAME= "rocketmq_nameserver" ## 服务名
## 是否已正确扫描 SCAN_FLAG=0 for ETH_NAME in ` /sbin/ifconfig | grep eth1 | awk '{print $1}' `
do ETH1_ADDR=` /sbin/ifconfig ${ETH_NAME} | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g' `
[[ -z "${ETH1_ADDR}" ]] && continue || break
done TMP_SRV_PROT=` echo ${SRV_PROT} | tr '[A-Z]' '[a-z]' `
if [[ "${TMP_SRV_PROT}" == "tcp" ]]; then
PROT_OPT= "S"
elif [[ "${TMP_SRV_PROT}" == "udp" ]]; then
PROT_OPT= "U"
else echo "未知的协议类型!" && exit1
fi ## 最多扫描3次,成功一次即可,以避免网络抖动而导致误判 for ((i=0; i<3; i++)); do
RETVAL=` /usr/bin/nmap -n -s${PROT_OPT} -p ${SRV_PORT} ${ETH1_ADDR} | grep open `
[[ -n "${RETVAL}" ]] && SCAN_FLAG=1; break || sleep 10
done if [[ ${SCAN_FLAG} - ne 1 ]]; then
[[ -n ` ps aux | grep java | grep namesrv` ]] && kill -9 ` ps aux | grep java | awk '/namesrv/{print $2}' `
cd /usr/local/rocketmq/bin && nohup sh mqnamesrv &
fi |
3、brokerserver监控
# vim /data/scripts/check_brokerserver_health.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#!/bin/sh PATH= /sbin : /bin : /usr/sbin : /usr/bin : /usr/local/bin : /usr/local/sbin
SRV_PORT= "10911" ## 端口号
SRV_PROT= "tcp" ## 协议类型
SRV_NAME= "rocketmq_brokerserver" ## 服务名
## 是否已正确扫描 SCAN_FLAG=0 for ETH_NAME in ` /sbin/ifconfig | grep eth1 | awk '{print $1}' `
do ETH1_ADDR=` /sbin/ifconfig ${ETH_NAME} | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g' `
[[ -z "${ETH1_ADDR}" ]] && continue || break
done TMP_SRV_PROT=` echo ${SRV_PROT} | tr '[A-Z]' '[a-z]' `
if [[ "${TMP_SRV_PROT}" == "tcp" ]]; then
PROT_OPT= "S"
elif [[ "${TMP_SRV_PROT}" == "udp" ]]; then
PROT_OPT= "U"
else echo "未知的协议类型!" && exit1
fi ## 最多扫描3次,成功一次即可,以避免网络抖动而导致误判 for ((i=0; i<3; i++)); do
RETVAL=` /usr/bin/nmap -n -s${PROT_OPT} -p ${SRV_PORT} ${ETH1_ADDR} | grep open `
[[ -n "${RETVAL}" ]] && SCAN_FLAG=1; break || sleep 10
done if [[ ${SCAN_FLAG} - ne 1 ]]; then
[[ -n ` ps aux | grep java | grep broker` ]] && kill -9 ` ps aux | grep java | awk '/broker/{print $2}' `
cd /usr/local/rocketmq/bin && nohup sh mqbroker -c .. /conf/2m-noslave/broker-a .properties &
fi |
【注意】
以上红色标注部分,在master2上的名称为“broker-b.properties”
4、crontab信息添加
# touch /var/run/check_rocketmq_nameserver.lock
# touch /var/run/check_rocketmq_brokerserver.lock
# echo 'touch /var/run/check_rocketmq_nameserver.lock' >> /etc/rc.d/rc.local
# echo 'touch /var/run/check_rocketmq_brokerserver.lock' >> /etc/rc.d/rc.local
# crontab -e
*/2 * * * * (flock --timeout=0 /var/run/check_rocketmq_nameserver.lock /data/scripts/check_nameserver_health.sh >/dev/null 2>&1)
*/2 * * * * (flock --timeout=0 /var/run/check_rocketmq_brokerserver.lock /data/scripts/check_brokerserver_health.sh >/dev/null 2>&1)
本文出自 “人生理想在于坚持不懈” 博客,请务必保留此出处http://sofar.blog.51cto.com/353572/1540874
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
附:
https://github.com/alibaba/RocketMQ/releases
相关推荐
分布式消息队列RocketMQ部署与监控
【阿里云专有云企业版 V3.12.0 消息...综上,阿里云专有云企业版V3.12.0消息队列RocketMQ版是一个强大且灵活的消息中间件,为企业提供了可靠的实时数据交换平台,同时用户在使用过程中需遵守相关的法律声明和操作规范。
本文档是阿里云专有云企业版V3.12.0中关于消息队列RocketMQ版的技术白皮书,旨在为用户提供关于RocketMQ的全面技术信息。RocketMQ是一款高可用、高吞吐量、低延迟的消息中间件,广泛应用于分布式系统中的消息传递和...
综上所述,阿里云专有云企业版V3.8.2消息队列RocketMQ版是一款强大的消息中间件,旨在解决大型分布式系统中的异步处理、解耦和数据一致性问题。用户在使用时需遵循相应的法律声明和通用约定,确保合法合规地利用其...
分布式消息引擎Apache RocketMQ是阿里巴巴开源的一款高性能、高可用、高可扩展的分布式消息中间件,广泛应用于大数据处理、实时交易系统以及物联网等场景。它提供了丰富的消息模型,包括发布/订阅模式和点对点模式,...
阿里云专有云企业版V3.9.0...总的来说,阿里云专有云企业版V3.9.0消息队列RocketMQ版开发指南是一份全面的参考资料,旨在帮助开发者有效地利用RocketMQ进行分布式系统的设计和实现,同时也强调了合法合规的使用规则。
阿里云专有云企业版V3.8.2的消息队列RocketMQ版是一款高度可扩展、高吞吐量、低延迟的分布式消息中间件,专为企业级应用设计。RocketMQ源于阿里巴巴内部的核心消息系统,经过大规模生产验证,具有强大的稳定性和可靠...
阿里云专有云企业版V3.8.2...总之,这份阿里云专有云企业版V3.8.2消息队列RocketMQ版开发指南是一份全面的参考资料,为开发者提供了从基础到高级的RocketMQ使用知识,帮助他们在分布式系统中实现高效、稳定的消息传递。
阿里云专有云企业版V3.8.2的消息队列RocketMQ版运维指南,主要针对的是企业级用户,提供了一套详细的操作和维护指导,旨在确保用户能够有效地管理和使用这款分布式消息中间件。RocketMQ是一款由阿里巴巴开发的高吞吐...
6. **监控与诊断**:说明如何监控RocketMQ服务的运行状态,以及如何排查和解决可能出现的问题。 7. **故障排除**:提供常见问题的解决方案,帮助开发者快速定位和修复问题。 8. **法律声明**:强调了文档的使用...
- **监控与调优**:包括实时监控RocketMQ的各项指标(如消息发送延迟、消费速度、队列利用率等),根据监控数据进行性能优化,例如调整Broker的配置参数,增加资源以应对高并发场景。 - **故障排查**:在遇到消息...
RocketMQ是一款高性能、分布式的消息队列,广泛应用于大数据、实时计算和微服务等领域。MQTT是它支持的一种轻量级的发布/订阅协议,特别适合于物联网(IoT)设备和低带宽、高延迟或不可靠的网络环境。 此运维指南主要...
RocketMQ是一款分布式消息中间件,广泛应用于大数据和实时计算场景,而MQTT是一种轻量级的消息协议,常用于物联网(IoT)设备通信。 **一、产品概述** RocketMQ的MQTT版提供了对MQTT协议的支持,允许设备和应用程序...
至于监控平台,RocketMQ提供了名为RocketMQ Monitor的监控工具,用于实时查看和分析RocketMQ集群的状态,包括消息发送与消费速率、队列状态、broker性能指标等。监控平台的部署步骤应该会包括安装JMX工具、配置监控...
1. **部署监控程序**:将`mq-monitor`解压,配置相关的RocketMQ服务器地址、端口等信息。 2. **启动监控服务**:运行监控程序的启动脚本,启动Web服务。 3. **访问监控界面**:通过浏览器访问Web服务的URL,输入登录...
《阿里云专有云企业版 V3.12.0 消息队列 RocketMQ 版 MQTT技术白皮书》是针对阿里云企业级专有云环境中的RocketMQ消息队列服务,特别是针对MQTT协议的详细技术文档。这份白皮书详细阐述了MQTT在阿里云平台上的实现和...
"auto_cfg_rmqshell脚本"是针对RocketMQ部署的自动化工具,旨在简化RocketMQ的安装和配置过程。在IT运维中,手动部署复杂的服务如RocketMQ可能会耗费大量时间和精力,因此,这样的自动化脚本能够极大地提高工作效率...
6. **强大的监控与管理**:RocketMQ提供了一套完整的管理工具,包括消息推送、监控、报警等功能,便于运维人员对系统状态进行实时监控和问题排查。 7. **丰富的生态**:作为开源项目,RocketMQ拥有活跃的社区,不断...
本书《分布式消息中间件实践》可能会涵盖如何选择合适的消息中间件、如何设计消息模型、如何保证消息的可靠传输、如何处理消息积压和消费延迟等问题,还会涉及到性能调优、监控和故障排查等实战经验。对于想要深入...