分布式消息队列RocketMQ部署与监控

==========================================================================================

一、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模式)

2hosts信息添加

# 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安装与配置

==========================================================================================

1JDK安装

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

2RocketMQ安装

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

5RocketMQ配置

(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=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

(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)、启动NameServermaster1master2

# cd /usr/local/rocketmq/bin

# nohup sh mqnamesrv &

(2)、启动BrokerServer Amaster1

# cd /usr/local/rocketmq/bin

# nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties  >/dev/null 2>&1 &

(3)、启动BrokerServer Bmaster2

# 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

2nameserver监控

# vim /data/scripts/check_nameserver_health.sh

#!/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

3brokerserver监控

# vim /data/scripts/check_brokerserver_health.sh

#!/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”

4crontab信息添加

# 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)

分布式消息队列RocketMQ部署与监控,布布扣,bubuko.com

时间: 2024-10-09 17:29:51

分布式消息队列RocketMQ部署与监控的相关文章

Linux分布式消息队列RocketMQ部署与监控

环境准备:CentOS_6.5_x64 IP: 192.168.0.249 dbTest249  Master1IP: 192.168.0.251 webTest251 Master2 下载 alibaba-rocketmq 软件 https://github.com/alibaba/RocketMQ/releases =========================================================================================

Rocketmq分布式消息队列的部署与监控

-------------------------------------------------------------------------------------------- 一.Rocketmq简介: -------------------------------------------------------------------------------------------- RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点:1.支持严格的消息顺序:2.支持T

分布式消息队列RocketMQ部署

一.RocketMQ简介: RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 1.支持严格的消息顺序: 2.支持Topic与Queue两种模式: 3.亿级消息堆积能力: 4.比较友好的分布式特性: 5.同时支持Push与Pull方式消费消息: 官网链接: rocketmq下载地址: https://github.com/alibaba/RocketMQ/releases rocketmq github:   https://github.com/alibaba/RocketMQ

分布式消息队列RocketMQ与Kafka架构上的巨大差异之1 -- 为什么RocketMQ要去除ZK依赖?

我们知道,在早期的RocketMQ版本中,是有依赖ZK的.而现在的版本中,是去掉了对ZK的依赖,转而使用自己开发的NameSrv. 并且这个NameSrv是无状态的,你可以随意的部署多台,其代码也非常简单,非常轻量. 那不禁要问了:ZooKeeper是业界用来管理集群的一个非常常用的中间件,比如Kafka就是依赖的ZK.那为什么RocketMQ要自己造轮子,自己做集群的管理呢?纯粹就是再做一个Zookeeper吗? 本篇试图通过一个架构上的巨大差异,来阐述为什么RocketMQ可以去掉ZK. 有

RocketMQ 消息队列单机部署及使用

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> < java编写简单消息队列.实现高德坐标变形服务> 0 RocketMQ简单介绍 0.1 介绍 RocketMQ是一个消息中间件. 消息中间件中有两个角色:消息生产者和消息消费者.RocketMQ里相同有这两个概念.消息生产者负责创建消息并发送到RocketMQ服务器.RocketMQ服务器会将

EQueue - 一个纯C#写的分布式消息队列介绍2

一年前,当我第一次开发完EQueue后,写过一篇文章介绍了其整体架构,做这个框架的背景,以及架构中的所有基本概念.通过那篇文章,大家可以对EQueue有一个基本的了解.经过了1年多的完善,EQueue无论是功能上还是成熟性上都完善了不少.所以,希望再写一篇文章,介绍一下EQueue的整体架构和关键特性. EQueue架构 EQueue是一个分布式的.轻量级.高性能.具有一定可靠性,纯C#编写的消息队列,支持消费者集群消费模式. 主要包括三个部分:producer, broker, consume

C#分布式消息队列 EQueue 2.0 发布啦

前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地址:https://github.com/tangxuehua/equeue EQueue相关文档:http://www.cnblogs.com/netfocus/category/598000.html EQueue Nuget地址:http://www.nuget.org/packages/eq

分布式消息队列Apache Pulsar

Pulsar简介 Apache Pulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化.Plusar已经在Yahoo的生产环境使用了三年多,主要服务于Mail.Finance.Sports. Flickr. the Gemini Ads platform. Sherpa以及Yahoo的KV存储. Pulsar之所以能够称为下一代消息队列,主要是因为以下特性: 线性扩展.能够丝滑的扩容到成百上千个节点(Kafka扩容需要占用很多系统资源在

阿里云-ONS-Help:消息队列 RocketMQ 版

ylbtech-阿里云-ONS-Help:消息队列 RocketMQ 版 1.返回顶部 1. 消息队列 RocketMQ 版 查看产品> 消息队列RocketMQ版是阿里云基于Apache RocketMQ构建的低延迟.高并发.高可用.高可靠的分布式消息中间件. 产品更新 常见问题 立即购买 学习路径 由浅入深,带您玩转消息队列RocketMQ版! 了解 消息队列RocketMQ版简介 产品简介 名词解释 适用场景 产品架构 产品定价 计费概述 资源包说明 欠费说明 成本对比 上手 快速入门 主