rabbitmq集群的各种运维操作

摘要:在rabbitmq集群操作或者搭建的时候,常常会因为对于集群的不熟练而导致各种异常错误,常见的有绑定了浮动ip没有绑定实体ip导致,页面上操作mq完全没有问题,但是一到程序操作就出现问题,我们一起来学习下,rabbitmq集群的正确操作


以下操作都以三节点集群为例,机器名标记为机器A、机器B、机器C,如果为双节点忽略机器C,如果为各多节点则与机器C操作相同

一、rabbitmq集群必要条件

1.1. 绑定实体ip,即ifconfig所能查询到的绑定到网卡上的ip,以下是绑定方法

1
2
#编辑配置路径 /etc/rabbitmq/rabbitmq-env.conf
NODE_IP_ADDRESS=172.16.136.133

1.2. 配置域名映射到实体ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#配置文件1所在路径 /etc/rabbitmq/rabbitmq.config (如果是集群,每台机器都需要修改这个绑定本机实体ip)
#其中rabbit@master是创建集群时所配置的参数,@后面的参数为主机名,示例中为master
[
{rabbit, [
{cluster_nodes, {['rabbit@master'], disc}},
{cluster_partition_handling, ignore},
{default_user, <<"guest">>},
{default_pass, <<"guest">>},
{tcp_listen_options, [binary,
{packet, raw},
{reuseaddr, true},
{backlog, 128},
{nodelay, true},
{exit_on_close, false},
{keepalive, true}]}
]},
{kernel, [
{inet_dist_listen_max, 44001},
{inet_dist_listen_min, 44001}
]}
].
1
2
3
4
#配置文件2 所在路径 /etc/hosts (如果是集群,每台机器都需要修改这个绑定本机实体ip,而且hosts文件的映射不得重复,如果重复linux系统为以最下面一条记录为准)
172.16.136.133 master
172.16.136.134 venus
172.16.136.135 venus2

二、启动停止

2.1 停止

1
2
3
4
5
6
7
8
9
#机器A
service rabbitmq-server stop
epmd -kill
#机器B
service rabbitmq-server stop
epmd -kill
#机器C
service rabbitmq-server stop
epmd -kill

2.2 启动

1
2
3
4
5
6
#机器A
service rabbitmq-server start
#机器B
service rabbitmq-server start
#机器C
service rabbitmq-server start

三、重建集群

注1:此处的mq集群重建是比较快速和有效的方法,面向的是初次安装或者可以接受mq中所存有的数据丢失的情况下,必须先有mq的.json后缀的配置文件或者有把握写入集群中exchange、queue等配置。

注2:如果是运行中的mq出现问题,需要在保存数据和配置的情况下恢复集群时,请跳到rabbitmq集群恢复

3.1 使用2.1方法停止所有机器

3.2 移除rabbitmq配置记录与存储文件

1
2
#位于 /var/lib/rabbitmq/mensia
mv /var/lib/rabbitmq/mensia /var/lib/rabbitmq/mensia.bak

3.3 按2.2方法启动所有机器

3.4 停止被加入集群节点app

比如A、B、C三台机器,将B和C加入到A中去,需要执行以下命令

1
2
3
4
#机器B
rabbitmqctl stop_app
#机器C
rabbitmqctl stop_app

3.5 建立集群

注意此处master为唯一没有执行rabbitmqctl stop_app的机器

1
2
3
4
#机器B
rabbitmqctl join_cluster rabbit@master
#机器C
rabbitmqctl join_cluster rabbit@master

3.6 启动集群

1
2
3
4
#机器B
rabbitmqctl start_app
#机器C
rabbitmqctl start_app

3.7 检查集群状态

在任意一台机器上执行rabbitmqctl cluster_status命令即可检查,输出包含集群中的节点与运行中的节点,兼以主机名标志

3.8 添加集群配置 (见第四)

四 添加集群配置

4.1 创建用户

例子中创建了两个用户
添加用户add_user,设置角色set_user_tags,添加rabbitmq虚拟主机add_vhost,设置访问权限set_permissions,以下是详细用法

1
2
3
4
5
6
7
8
9
# 创建第一个用户
/usr/sbin/rabbitmqctl add_user 用户名 密码
/usr/sbin/rabbitmqctl set_user_tags 用户名 administrator
/usr/sbin/rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
# 创建第二个用户
/usr/sbin/rabbitmqctl add_user 用户名2 密码
/usr/sbin/rabbitmqctl set_user_tags 用户名2 management
/usr/sbin/rabbitmqctl add_vhost sip_ext
/usr/sbin/rabbitmqctl set_permissions -p sip_ext 用户名2 '.*' '.*' '.*'

备注:RabbitMQ 虚拟主机,RabbitMQ 通过虚拟主机(vhost)来分发消息。拥有自己独立的权限控制,不同的vhost之间是隔离的,单独的。

权限控制的基本单位:vhost。

用户只能访问与之绑定的vhost。

vhost是AMQP中唯一无法通过协议来创建的基元。只能通过rabbitmqctl工具来创建。 

4.2 打开15672网页管理端,访问mq

/usr/sbin/rabbitmq-plugins enable rabbitmq_management
备注:如果发现命令执行完毕没有打开此服务,15672端口没有监听,则是由于没有重启mq导致的

4.3 在底部导入.json后缀的配置文件即可

rabbitmq更新配置

如果覆盖了用户需要使用以下命令修改mq用户密码
/usr/sbin/rabbitmqctl change_password 用户名 密码

坚持原创技术分享,您的支持将鼓励我继续创作!