栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

OpenStack云平台Rabbitmq集群清除队列消息积压,重启rabbitmq-server服务

OpenStack云平台Rabbitmq集群清除队列消息积压,重启rabbitmq-server服务

【问题描述】

OpenStack云平台上1个控制节点因未知原因重启,导致Rabbitmq消息队列积压。OpenStack是K版本,Rabbitmq是3.3.5版本。

【问题分析】

由于OpenStack控制节点未知原因导致重启,致使Rabbitmq队列消息积压。可以通过登录Rabbitmq管理页面针对存在消息积压的队列进行Purge清除;若是不行,还可以通过执行的方式对消息队列进行清楚;最后若是前二者没有起到作用的话,可以重启3个控制节点的rabbitmq-server服务来清除积压的消息。

队列有消息积压时,首先要查看Rabbitmq集群是否正常,然后再观察队列消息是否持续积压增长,排除隐患

【处理方法】

先查看集群状态,正常

rabbitmqctl cluster_status

结果:Nodes、running_nodes 个数都是3个,{partitions,[]},partitions为空值,说明为出现脑裂

1、页面检查,清楚积压的消息,Queues-->点击进去积压的队列-->Purge

登录Rabbitmq页面

点击Queues ,进入Queues管理页面,点击 Ready 倒序排列

观察页面消息队列积压情况,目前积压的消息没有继续增长的现象

1)点击Queues进入消息队列页面

2)选择一个有消息积压的队列,点击进入队列详情

3)点击队列详情页面,右下角“Purge”对该队列积压的消息进行清除

正常效果:页面过一小段时间会自动清除积压的消息队列,ready的数量应该很小或者为0

异常情况:页面弹框“多个页面无响应”,页面卡顿,清除操作无效果

2、在部署机上,执行指令进行销毁

先找一个消息积压的队列,获取到队列的名称

rabbitmqctl  purge_queue  

执行命令,执行完后在页面查看这个队列堆积的消息是否清除

若是上面指令不对,可以使用这个指令mq版本3.3.5:

rabbitmqctl  -q  purge_queue 

rabbitmqctl -n <主机名> -q purge_queue

3、页面清除和指令清除积压的消息队列都没有效果,建议同时重启三台控制节点的rabbitmq-server ,然后重启所有计算节点的:openstack-nova-compute.service 服务和所有计算和控制节点的: neutron-openvswitch-agent.service 服务

核实确认目前,队列积压消息没有新增,操作过程需要重启neutron服务,会对业务有1-2秒的网络中断影响(若是重启neutron-ovs-cleanup.service调度服务网络可能会有1ms的中断可能会丢1-2个包,但是本次操作不需要重启neutron-ovs-cleanup.service服务;对于重启neutron-openvswitch-agent.service服务对整个云平台本身是没有实质性影响的;为了规避操作风险,对外口径统一为对云平台网络会有1-2s的网络影响)。3个控制节点上同样也有neutron-openvswitch-agent.service操作过程中也需要重启

准备阶段:

整理编辑ansible操作的hosts文件

/etc/ansible/hosts

openstack-controller 为 OpenStack控制节点模块

openstack-compute 为 OpenStack计算节点模块

hosts内容如下:

[all:vars]

ansible_ssh_user=root

ansible_ssh_pass=XX@xxoo

[openstack-controller]

Ip1

Ip2

Ip3

[openstack-compute]

nodeip1

nodeip2

......

1)登录openstack控制节点,检查集群状态以及rabbitmq-server状态

rabbitmqctl cluster_status

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'systemctl status rabbitmq-server'

2)检查所有控制节点和计算节点相应的服务状态

ansible -i /etc/ansible/hosts openstack-compute -m shell -a 'systemctl status openstack-nova-compute.service'

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'systemctl status neutron-openvswitch-agent.service'

ansible -i /etc/ansible/hosts openstack-compute -m shell -a 'systemctl status neutron-openvswitch-agent.service'

实施阶段:

1)登录openstack控制节点,批量重启rabbitmq-server服务,并检查rabbitmq-server服务的状态,以及Rabbitmq集群状态

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'systemctl restart rabbitmq-server'

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'systemctl status rabbitmq-server'

rabbitmqctl cluster_status

2)重启所有计算节点相应的服务openstack-nova-compute.service、neutron-openvswitch-agent.service 状态并检查服务状态,重启所以控制节点nova、neutron-openvswitch-agent.service服务并检查服务状态

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'openstack-service restart nova '

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'openstack-service status nova '

ansible -i /etc/ansible/hosts openstack-compute -m shell -a ' systemctl restart openstack-nova-compute.service'

ansible -i /etc/ansible/hosts openstack-compute -m shell -a ' systemctl status openstack-nova-compute.service'

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'systemctl restart neutron-openvswitch-agent.service'

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'systemctl status neutron-openvswitch-agent.service'

ansible -i /etc/ansible/hosts openstack-compute -m shell -a 'systemctl restart neutron-openvswitch-agent.service'

ansible -i /etc/ansible/hosts openstack-compute -m shell -a 'systemctl status neutron-openvswitch-agent.service'

验证阶段:

1)登录openstack控制节点检查集群状态

rabbitmqctl cluster_status

nodes、running_nodes分别为3个节点,partitions为空值,表明Rabbitmq未出现脑裂现象

2)登录openstack基础云Rabbitmq页面,检查是否有消息积压

Queues对应Ready列ready的数量应该很小或者为0

3)所有计算节点的nova-compute服务状态

nova service-list

对应的State值为up,Status为enabled

【附带问题】

操作完之后,发现OpenStack云平台的云主机网络都出现了中断,此时需要重启OpenStack控制节点上的 neutron服务,重启完 neutron服务后,OpenStack云平台云主机的网络便自动恢复正常

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'openstack-service restart neutron '

ansible -i /etc/ansible/hosts openstack-controller -m shell -a 'openstack-service status neutron '

写在最后:

你每天学习一点点,每天只进步1%,一年以后你的水平值是多少呢?
37.78(1.01×365=37.78)
相信概率,不要相信运气,在过程中提升概率

详情请见,微信公众号

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号