前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS7 RabbitMQ 3.7.4 集群安装使用

CentOS7 RabbitMQ 3.7.4 集群安装使用

作者头像
shaonbean
发布2019-05-26 10:16:22
4190
发布2019-05-26 10:16:22
举报
文章被收录于专栏:运维前线

版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://cloud.tencent.com/developer/article/1434941

RabbitMQ 集群安装

代码语言:javascript
复制
# rabbitmq cluster
192.168.0.62 rabbitmq1
192.168.0.63 rabbitmq2
192.168.0.64 rabbitmq3
  • 由于笔者的rabbitmq节点是虚拟机,rabbitmq2,rabbitmq3由rabbitmq1克隆而来,因此笔者三台的erlang.cookie都一样,如果rabbitmq节点单独安装的需要同步erlang.cookie值到每个节点
代码语言:javascript
复制
#以rabbitmq1为例:

scp /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
  • 配置集群,以rabbitmq1节点为例:
代码语言:javascript
复制
systemctl restart rabbitmq-server
  • 创建集群
代码语言:javascript
复制
#把rabbitmq2加到rabbitmq1集群当中,再把rabbitm3加到rabbitmq1集群中

# rabbitmq2上执行:
[root@rabbitmq2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq2 ...
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbitmqctl join_cluster^C
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1
[root@rabbitmq2 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...
 completed with 6 plugins.

# rabbitmq3上执行:
[root@rabbitmq3 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq3 ...
[root@rabbitmq3 ~]# rabbitmqctl join_cluster rabbitmqctl join_cluster^C
[root@rabbitmq3 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1
Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq1
[root@rabbitmq3 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq3 ...
 completed with 6 plugins.

#rabbitmq1上查看:

 [root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
 {running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}] # rabbitmq2先加到集群中来
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}] # rabbitmq3也加到集群中来

[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}]
[root@rabbitmq1 ~]# 

[root@rabbitmq2 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...
 completed with 6 plugins.
[root@rabbitmq2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq2 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq1,rabbit@rabbitmq2]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq1,[]},{rabbit@rabbitmq2,[]}]}]
[root@rabbitmq3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq3 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq1,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq3,[]}]}]
  • 可以通过在任何节点上运行cluster_status命令来看到这三个节点已加入到群集中:

rabbitmqctl cluster_status

重启集群节点

模拟故障:停掉rabbit@rabbitmq1、rabbit@rabbitmq3,检查集群状态

代码语言:javascript
复制
[root@rabbitmq1 ~]# rabbitmqctl stop
Stopping and halting node rabbit@rabbitmq1 ...

# rabbitmq2: 查看
[root@rabbitmq2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq2 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]}]}]

# rabbitmq3上查看:
[root@rabbitmq3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq3 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq3]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq2,[]},{rabbit@rabbitmq3,[]}]}] 
  • 停掉rabbitmq3,rabbitm2上查看集群状态:
代码语言:javascript
复制
[root@rabbitmq2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq2 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq2]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq2,[]}]}]
  • 重新启动rabbitmq1,rabbitmq3,查看集群状态
代码语言:javascript
复制
[root@rabbitmq1 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed. # 忽略
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}]

 [root@rabbitmq3 ~]# rabbitmq-server -detached

[root@rabbitmq3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq3 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq1,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq3,[]}]}]

破坏集群

  • 从集群中移除rabbitmq3
代码语言:javascript
复制
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

即可
  • 远程删除节点,在rabbitmq2上,删除rabbitmq1
代码语言:javascript
复制
rabbitmqctl stop_app # rabbitmq1上操作

rabbitmqctl forget_cluster_node rabbit@rabbitmq1 # rabbitmq2上操作

rabbitmqctl forget_cluster_node  # 自动清理未知节点
  • 创建ram节点
代码语言:javascript
复制
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
  • 改变节点类型
代码语言:javascript
复制
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app

报错

代码语言:javascript
复制
# 重启rabbitmq-server服务器,再次登录之前创建的rabbitmq用户报错:

[warning] <0.694.0> HTTP access denied: user 'rabbitmq' - invalid credentials

## 解决:

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.4/ebin/rabbit.app # 使用find / -name rabbit.app搜索

找到:loopback_users里的<<”guest”>>删除

如下:{loopback_users, []}

重启:systemctl restart rabbitmq-server.service  # 生产环境不建议这么做

## 创建一个管理员用户登录管理界面

rabbitmqctl add_user rabbitmq rabbitmqpassword && rabbitmqctl set_user_tags rabbitmq administrator # 集群情况下,创建用户时,每个节点会自动同步

管理界面登录

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年05月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RabbitMQ 集群安装
    • 重启集群节点
      • 破坏集群
        • 报错
          • 管理界面登录
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档