腾讯消息队列CMQ部署与验证
环境
| IP | 备注 |
|---|---|
| 192.168.1.66 | node1 前置机 |
| 192.168.1.110 | node2 |
| 192.168.1.202 | node3 |
架构图

组件介绍
| 组件 | 监听端口 |
|---|---|
| access | 12000/120001 |
| pushserver | 50012 |
| nameserver | 80 |
| broker | 11011/11012/11013/11014 |
| barad | 11112 |
| ctsdb | 9201 |
| oss | 80 |
| master | 9992 |
| moni | 9999 |
| accessGW | 80 |

CMP依赖VIP:

准备工作
3台8*16服务器
安装文档:
物料包(组件物料包和python脚本) :https://cmq-1255613487.cos.ap-chengdu.myqcloud.com/install_cmq/CMQ-ALL.zip
安装[192.168.1.66] 前端组件:
#安装
#[root@node_66 ~]# ls
CMQ-1.0.2-软件包.tar.gz
mkdir -p /opt/tmp
tar xf CMQ-1.0.2-软件包.tar
cp -r v1.0.0/cmq_console/precomponent/* /opt/tmp/
#安装cmq_console组件
cd /opt/tmp/
#执行部署[填写内网IP]
sh pre_component_install.sh 192.168.1.66 192.168.1.66
#---------------------------------------------------------------------------
#安装 auth access 组件
#将 cmq_console/auth-access 目录下所有文件拷贝到 /opt/tmp 目录下,并进入此目录
cp -r /root/v1.0.0/cmq_console/auth-access/* /opt/tmp
sh access_auto_install.sh 192.168.1.66 192.168.1.66
#提示:
#backup script to /opt/script
#cp: cannot stat ‘./*.md’: No such file or directory 报错忽略
#安装cmq_backserver
cp -r /root/v1.0.0/cmq_backserver /opt/tmp
cd /opt/tmp/cmq_backserver
## 脚本内容 vim 1.sh
#-------------------------------------------------------------------#
cat >1.sh<<eof
#!/bin/bash
ip_a=192.168.1.66 # 根据上面的部署图修改为a、b、c三个节点的ip
ip_b=192.168.1.160
ip_c=192.168.1.202
password=123456 # 节点的登录密码修改
coreNum=6 # 节点的核数减2
#dbhost=192.168.1.66
sed -i "s/^passwd=.*/passwd=${password}\r/" config.txt
sed -i "s/^routeProxy=.*/routeProxy=${ip_c}\r/" config.txt
sed -i "s/^access=.*/access=${ip_b} ${ip_c}\r/" config.txt
sed -i "s/^pushServer=.*/pushServer=${ip_b}\r/" config.txt
sed -i "s/^broker=.*/broker=${ip_a} ${ip_b} ${ip_c}\r/" config.txt
sed -i "s/^monitor=.*/monitor=${ip_a} ${ip_c}\r/" config.txt
sed -i "s/^master=.*/master=${ip_a} ${ip_b}\r/" config.txt
sed -i "s/^oss=.*/oss=${ip_b}\r/" config.txt
sed -i "/^coreNum=.*/d" config.txt
sed -i "/^oss=.*/a\\coreNum=${coreNum}\r" config.txt
sed -i "s/^barad=.*/barad=${ip_c}\r/" config.txt
sed -i "s/^ctsdb=.*/ctsdb=${ip_a} ${ip_b} ${ip_c}\r/" config.txt
sed -i "s/^jvmMem=.*/jvmMem=4g\r/" config.txt
sed -i "s/^indexTtl=.*/indexTtl=30\r/" config.txt
sed -i "s/^metricTtl=.*/metricTtl=7\r/" config.txt
sed -i "s/^nameserverVip=.*/nameserverVip=${ip_c}\r/" config.txt
sed -i "s/^baradIp=.*/baradIp=${ip_c}\r/" config.txt
sed -i "s/^ctsdbIp=.*/ctsdbIp=${ip_a}\r/" config.txt
sed -i "s/^dbhost=.*/dbhost=${ip_a}\r/" config.txt
eof
#-------------------------------------------------------------------#
#执行修改
sh -x 1.sh
# 执行安装
sh install_all.sh config.txt
#此时访问 :http://192.168.1.66/ 已经可以打开控制台,但是没什么卵用,啥都没有,后台都还没装
默认账号: qcloudAdmin
默认密码: qcloudAdmin
打开web页面 http://192.168.1.66/

问题解决:
问题1: Connect to 172.16.33.42:80 [/172.16.33.42] failed: connect timed out
解决: 进入http://[IP]/tsf-manager/action-path?rid=1
搜索cmq,改为oss组件IP
[root@node_66 ~]# cd /opt/tmp/cmq_backserver
[root@node_66 cmq_backserver]# grep oss config.txt
oss=172.16.66.198 172.16.67.224
oss=192.168.1.110

修改IP:
搜索修改monitor:

确定barad IP monitor的IP需要改为barad的IP:
[root@node_66 cmq_backserver]# grep barad config.txt
barad=192.168.1.202
baradIp=192.168.1.202

完成结果:

CMQ使用:
新建仓库:
新建仓库使用的是access节点IP grep access config.txt
http://[ip]/cmq-manager/zone
[root@node_66 simple_demo]# grep access /opt/tmp/cmq_backserver/config.txt
access=192.168.1.160 192.168.1.202


创建结果:

两个主题仓库,操作一样,端口不变,ip用另一个access节点的ip
创建集群:


配置结果

向 queue添加节点
添加节点首先添加前置机
192.168.1.66

向topoc添加节点

初始化推送节点

初始化推送节点使用 pushServer ip
[root@node_66 simple_demo]# grep pushServer /opt/tmp/cmq_backserver/config.txt
pushServer=192.168.1.160
端口 50012
[这个图丢了 方法一样的 过滤出来改为初始化节点IP接可以了]

添加接入层注册access [也是pushserver节点IP]
添加队列
[root@node_66 simple_demo]# grep pushServer /opt/tmp/cmq_backserver/config.txt
pushServer=192.168.1.160

[root@node_66 simple_demo]# grep access /opt/tmp/cmq_backserver/config.txt
access=192.168.1.160 192.168.1.202

添加主题:

添加完成后如图:
添加节点后 出现版本号才算成功
添加完成后,直到 **出现版本号** 才算注册成功,多在运营端刷新一下会发现版本号出现,这个版本号可能需要10-30分钟出现,基于服务器配置
信令服务器添加

创建队列:


进入 SDK 目录
#先得到nameserver ip
[root@node_66 simple_demo]# grep nameserver /opt/tmp/cmq_backserver/config.txt
nameserverVip=192.168.1.202
#解压python_sdk_private.tar.gz文件,然后进入解压的 sdk/simple_demo/ 目录下,修改cmq_sample_queue.py 文件
[root@node_66 opt]# cd /root/v1.0.0/SDK/
[root@node_66 SDK]# tar xf python_sdk_private.tar.gz
[root@node_66 simple_demo]# cd /root/v1.0.0/SDK/sdk/simple_demo
#替换为nameserver的IP 这个IP通过网页上的信令服务器管理中看到的 namserver ip地址
[root@node_66 simple_demo]#
sed -i "s/^nameserver =.*/nameserver = 'http:\/\/192.168.1.202'/" /root/v1.0.0/SDK/sdk/simple_demo/cmq_sample_queue.py

# 执行以下命令替换创建的queue的名称,这里刚创建的是queue_test
sed -i "s/^queue_name=.*/queue_name='queue'/" cmq_sample_queue.py

## 向队列发送消息:
python ./cmq_sample_queue.py
然后通过页面查看发送消息状态:

测试主题模式
同样先在客户端新建主题,添加订阅者,然后进入控制台
http://ip/cmq/topic?rid=1



进入 simple_demo/ 目录下,执行以下命令修改参数,参数来源和队列一样
cd /root/v1.0.0/SDK/
cd /root/v1.0.0/SDK/sdk/simple_demo
#查询
[root@node_66 simple_demo]# grep nameserver /opt/tmp/cmq_backserver/config.txt
nameserverVip=192.168.1.202
#修改
sed -i "s/^nameserver =.*/nameserver = 'http:\/\/192.168.1.202'/" /root/v1.0.0/SDK/sdk/simple_demo/cmq_sample_topic.py
[root@node_66 simple_demo]# grep 'nameserver = ' /root/v1.0.0/SDK/sdk/simple_demo/cmq_sample_topic.py
nameserver = 'http://192.168.1.202'
# 执行以下命令修改topic的名称,这里刚创建的是topic
vim /root/v1.0.0/SDK/sdk/simple_demo/cmq_sample_topic.py
找到:topic_name ="topic"
改为:topic_name ="topic"
[root@node_66 simple_demo]# grep queue_name /root/v1.0.0/SDK/sdk/simple_demo/cmq_sample_queue.py
queue_name='queue'
my_queue = my_account.get_queue(queue_name)
# 执行命令向主题发送信息,Ctrl+C停止 python ./cmq_sample_topic.py
python ./cmq_sample_topic.py
测试:

此时去看服务器堆积是否正常

压力测试
# 在部署机节点安装压测工具
yum install httpd-tools -y
# 进入simple_demo目录下
cd /root/v1.0.0/SDK/sdk/simple_demo
# 先修改sendmsg.txt的queueName和appid
echo 'clientRequestId=1231231231&Nonce=37&Timestamp=1563198200&msgBody=my_message+is+1563198200&uin=0&Action=SendMessage&SignatureMethod=HmacSHA1&appId=1&delaySeconds=0&queueName=queue&RequestClient=SDK_Python_1.3' >sendmsg.txt
其中queueName=test 就是队列名称:queue
所以需要改为
# 再修改batchsendmsg.txt的queueName和appid
# 执行压测,nameserver-ip进行替换 ,命令不能执行请先安装工具: yum install -y httpd-tools
# 压测时应该选择 barad 的IP 进行压测,grep barad /opt/tmp/cmq_backserver/config.txt
ab -k -n 500000 -c 500 -p sendmsg.txt -T application/json "http://192.168.1.202/v2/index.php"
appid查询:
http://192.168.1.66/cmq-manager/queue?rid=1&userAppId=1
appId=1
Name=queue

清空队列:

卸载ACCESS
######################################################
#!/bin/sh
# Host Login Info
user=`sed '/^user=/!d;s/.*=//' $1 | sed 's/\r//g'`
passwd=`sed '/^passwd=/!d;s/.*=//' $1 | sed 's/\r//g'`
sshPort=`sed '/^sshPort=/!d;s/.*=//' $1 |sed 's/\r//g'`
# DB Info
dbhost=`sed '/^dbhost=/!d;s/.*=//' $1 | sed 's/\r//g'`
dbport=`sed '/^dbport=/!d;s/.*=//' $1 | sed 's/\r//g'`
dbuser=`sed '/^dbuser=/!d;s/.*=//' $1 | sed 's/\r//g'`
dbpasswd=`sed '/^dbpasswd=/!d;s/.*=//' $1 | sed 's/\r//g'`
# Component IP List
cmq_nameserver=`sed '/^routeProxy=/!d;s/.*=//' $1 | sed 's/\r//g'`
cmq_access=`sed '/^access=/!d;s/.*=//' $1 | sed 's/\r//g'`
cmq_moni=`sed '/^monitor=/!d;s/.*=//' $1 | sed 's/\r//g'`
#cmq_moni2=`sed '/^monitor2=/!d;s/.*=//' $1 | sed 's/\r//g'`
cmq_master=`sed '/^master=/!d;s/.*=//' $1 | sed 's/\r//g'`
#cmq_master2=`sed '/^master2=/!d;s/.*=//' $1 | sed 's/\r//g'`
cmq_oss=`sed '/^oss=/!d;s/.*=//' $1 | sed 's/\r//g'`
cmq_publisher=`sed '/^pushServer=/!d;s/.*=//' $1 | sed 's/\r//g'`
cmq_broker=`sed '/^broker=/!d;s/.*=//' $1 | sed 's/\r//g'`
# Barad Info
barad=`sed '/^barad=/!d;s/.*=//' $1 | sed 's/\r//g'`
ctsdb=`sed '/^ctsdb=/!d;s/.*=//' $1 | sed 's/\r//g'`
jvmMem=`sed '/^jvmMem=/!d;s/.*=//' $1 | sed 's/\r//g'`
indexTtl=`sed '/^indexTtl=/!d;s/.*=//' $1 | sed 's/\r//g'`
metricTtl=`sed '/^metricTtl=/!d;s/.*=//' $1 | sed 's/\r//g'`
yum=$barad" "$ctsdb
baradList=${barad// /,}
ctsdbList=${ctsdb// /,}
# Some Vip
nameserverVip=`sed '/^nameserverVip=/!d;s/.*=//' $1 | sed 's/\r//g'`
baradIp=`sed '/^baradIp=/!d;s/.*=//' $1 | sed 's/\r//g'`
ctsdbIp=`sed '/^ctsdbIp=/!d;s/.*=//' $1 | sed 's/\r//g'`
ctsdbVport=`sed '/^ctsdbVport=/!d;s/.*=//' $1 | sed 's/\r//g'`
# Directory Of Component
targetDir=`sed '/^targetDir=/!d;s/.*=//' $1 | sed 's/\r//g'`
packageTmpDir='/opt/cmqTmp/'
packageDir=`pwd`'/package'
for moduleName in cmq_oss cmq_moni cmq_master cmq_broker cmq_access cmq_nameserver cmq_publisher yum barad ctsdb;
#for moduleName in cmq_access;
#for moduleName in barad;
#for moduleName in cmq_publisher;
#for moduleName in cmq_moni;
#for moduleName in ctsdb;
#for moduleName in cmq_master;
#for moduleName in cmq_nameserver;
#for moduleName in cmq_oss;
#for moduleName in cmq_broker;
do
iplist=`eval echo '$'"$moduleName"`
for host in $iplist;
do
./onlineUninstall.sh $host $user $passwd $packageDir $packageTmpDir $targetDir$moduleName $moduleName $sshPort $dbhost $dbport $dbuser $dbpasswd $cmq_moni $cmq_master $baradIp $nameserverVip $jvmMem $indexTtl $metricTtl $baradList $ctsdbList $ctsdbIp $ctsdbVport
done
done
######################################################
注释: for moduleName in cmq_oss cmq_moni cmq_master cmq_broker cmq_access cmq_nameserver cmq_publisher yum barad ctsdb; 行
取消注释: #for moduleName in cmq_access; 行 改为 for moduleName in cmq_access;
修改结果:
#for moduleName in cmq_oss cmq_moni cmq_master cmq_broker cmq_access cmq_nameserver cmq_publisher yum barad ctsdb;
for moduleName in cmq_access;
#执行卸载操作:
sh uninstall_all.sh config.txt

错误问题重现:
#卸载了一个组件然后查看日志和执行结果
cd /root/v1.0.0/SDK/sdk/simple_demo
python ./cmq_sample_topic.py

进入日志/data/cmq_nameserver/log
192.168.1.202服务器进入目录监控日志:
cd /data/cmq_access/log/
[root@node_202 log]# tailf /data/cmq_nameserver/log/*
2021/01/09 17:28:29 requestId: 8649737934421390396, clientIP: 192.168.1.66, scheme: http, arg: clientRequestId: 1231231231; appId:1; Action: PublishMessage; topicName: topic;
2021/01/09 17:28:29 ResponseVipVport, url:http://192.168.1.202:12001, req.host: 192.168.1.202
2021/01/09 17:28:29 ResponseVipVport, clinent_ip: 192.168.1.66, ipHash: 3232279594, proxy_idx: 194
2021/01/09 17:28:29 ResponseVipVport, addr: http://192.168.1.202:12001 has found in vipProxyArr
2021/01/09 17:28:29 $$$, ResponseVipVport, Dial error: dial tcp 192.168.1.202:12001: connect: connection refused
2021/01/09 17:28:29 http: proxy error: dial tcp 192.168.1.202:12001: connect: connection refused
2021/01/09 17:28:29 ResponseVipVport finish request, requestId: 8649737934421390396

恢复组件:

注释:
# ./cmq_db_init.sh $dbhost $dbport $dbuser $dbpasswd
# for moduleName in cmq_oss cmq_moni cmq_master cmq_broker cmq_access cmq_nameserver cmq_publisher yum barad ctsdb;
第一行注释是为了不重新初始化数据库,避免数据丢失
第二行不重装所有组件
启用:
for moduleName in cmq_access;

#执行安装组件:
sh install_all.sh config.txt
验证发送消息:
cd /root/v1.0.0/SDK/sdk/simple_demo
python ./cmq_sample_topic.py
验证恢复后的组件是否正常

腾讯消息队列CMQ部署与验证的更多相关文章
- 腾讯云分布式高可靠消息队列CMQ架构
版权声明:本文由张浩原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126 来源:腾云阁 https://www.qclou ...
- RocketMQ 消息队列单机部署及使用
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...
- 消息队列之 RabbitMQ【验证通过】
消息队列之 RabbitMQ 预流 关注 22.9 2017.05.06 16:03* 字数 4884 阅读 284691评论 41喜欢 618赞赏 2 关于消息队列,从前年开始断断续续看了些资料, ...
- 基于Raft深度优化,腾讯云金融级消息队列CMQ高可靠算法详解
背景介绍 分布式系统是指一组独立的计算机,通过网络协同工作的系统,客户端看来就如同单台机器在工作.随着互联网时代数据规模的爆发式增长,传统的单机系统在性能和可用性上已经无法胜任,分布式系统具有扩展性强 ...
- (原创)Rocketmq分布式消息队列的部署与监控
-------------------------------------------------------------------------------------------- 一.Rocke ...
- 分布式消息队列RocketMQ部署
一.RocketMQ简介: RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 1.支持严格的消息顺序: 2.支持Topic与Queue两种模式: 3.亿级消息堆积能力: 4.比较友好 ...
- Linux分布式消息队列RocketMQ部署与监控--双Master
环境准备:CentOS_6.5_x64 IP: 192.168.0.249 dbTest249 Master1 IP: 192.168.0.251 webTest251 Master2 下载 ali ...
- 高性能消息队列 CKafka 核心原理介绍(上)
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...
- 为什么会需要消息队列(MQ)?
为什么会需要消息队列(MQ)? #################################################################################### ...
随机推荐
- 【面试题】在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)
整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议.ARP协议和OSPF协议. 发起TCP的三次握手 建立TCP连接后发起HTTP请求 服务器响应HTTP请求 浏览器解析h ...
- 对象存储COS全球加速助力企业出海
近年来,中国互联网行业迅猛发展,国内庞大的市场孕育出了许多现象级的产品,也锤炼出了非常成熟的产业链.与此同时,很多海外市场还处于萌芽期,存在着巨大的流量红利,越来越多的互联网企业开始加速"出 ...
- 重庆聚焦区块链应用,Panda Global觉得春天真的来了!
近日,由2020中国智博会组委会主办.重庆市大数据应用发展管理局与渝中区人民政府联合承办.重庆市区块链应用创新产业联盟和四川省区块链行业协会联合执行的"2020线上智博会区块链应用创新大赛& ...
- 题解-Railgun
题面 Railgun \(T\) 组测试数据,每次给定 \(n,k\),求(\(F(i)\) 为斐波那契数列第 \(i\) 项): \[\sum_{1\le x_i\le n(1\le i\le k) ...
- 笔记-[AH2017/HNOI2017]礼物
笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...
- KVM初体验之virt-manager unable to connect to libvirt的处理办法
解决方法 需要用root身份运行virt-manager
- Python 学习笔记 之 03 - 函数总结
函数总结 最基本的一种代码抽象的方式. 定义函数 使用def语句进行定义, return进行函数返回. 一旦执行导return,函数就执行完毕. 即使函数未指定retur ...
- 轮廓检测论文解读 | Richer Convolutional Features for Edge Detection | CVPR | 2017
有什么问题可以加作者微信讨论,cyx645016617 上千人的粉丝群已经成立,氛围超好.为大家提供一个遇到问题有可能得到答案的平台. 0 概述 论文名称:"Richer Convoluti ...
- js下 Day12、案例
一.垃圾分类 效果图: 功能思路分析: 1. 鼠标按下 (1) 获取鼠标到元素的距离(e.offsetX) (2) 开启开关变量 (3) 获取事件源 (4) 记录垃圾初始位置 2. 鼠标移动 ( ...
- [日常摸鱼]bzoj2038[2009国家集训队]小Z的袜子-莫队算法
今天来学了下莫队-这题应该就是这个算法的出处了 一篇别人的blog:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 题意:一个序列,$m$次询 ...