>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20110 个阅读者 刷新本主题
 * 贴子主题:  分布式消息队列RocketMQ部署与监控 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-03-11 20:00:57     消息  查看  搜索  好友  邮件  复制  引用

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

  一、  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  、总体架构

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

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

  三、  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

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

                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

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

               # jps

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

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

  四、  RocketMQ  服务健康监控

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

  1  、依赖组件安装

  # yum -y install nmap

                2  、  nameserver  监控

  # 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/[url=]//g'`
       [[ -z "${ETH1_ADDR}" ]] && continue || break
done

TMP_SRV_PROT=`echo ${SRV_PROT} | tr '[A-Z]' '[url=]'`

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

#!/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/[url=]//g'`
       [[ -z "${ETH1_ADDR}" ]] && continue || break
done

TMP_SRV_PROT=`echo ${SRV_PROT} | tr '[A-Z]' '[url=]'`

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)

            

----------------------------
原文链接:https://blog.51cto.com/sofar/1540874

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-13 10:58:27 重新编辑]
  Java面向对象编程-->Swing组件(下)
  JavaWeb开发-->自定义JSP标签(Ⅱ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->Java反射机制
  精通Spring-->Vue Router路由管理器
  Vue3开发-->Vue组件开发基础
  Netty权威指南:I/O 多路复用技术
  说一下Spring @Autowired 注解自动注入流程
  阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!
  SSE(Server Sent Events) HTTP服务端推送详解 - hadoop_a9bb...
  Spring MVC异常处理机制
  Spring MVC的拦截器的详细用法
  回字有四种写法,那你知道单例有五种写法吗
  【项目实践】后端接口统一规范的同时,如何优雅地扩展规范
  微服务架构的基础框架选择:Spring Cloud还是Dubbo?
  RESTful API 设计最佳实践
  SpringBoot构建Restful接口
  微服务架构的优点和缺点
  vue项目编译75%时很慢的解决办法
  Gradle入门
  Spring Framework 组件注册 之 @Import
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。