当前位置:   article > 正文

rabbitmq基础4——集群部署、基础功能测试_单机搭建rabbitmq集群

单机搭建rabbitmq集群

一、一机多实例集群

一机多实例,顾名思义就是在一台机器上面部署多个rabbitmq服务组成集群。RabbitMQ的单机多节点配置大多用于实验性论证,安全性和高可用性太低。

  • 需要注意,每个rabbitmq节点名称、内部端口、插件端口等信息不能冲突。

1.1 三机启动

参照前面章节,先部署erlang环境、安装rabbitmq服务,再开始做以下步骤。

1.启动第一个节点,第一个节点名称为rabbitmq_1,监听端口为5672,web页面的端口默认为15672,节点内部通信的端口为25672就不需要使用指定参数多此一举了。

[root@node1 ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbitmq_1 rabbitmq-server start
  • 1

在这里插入图片描述
2. 查看第一个节点进程
在这里插入图片描述
3. 启动第二个节点,第二个节点名称为rabbitmq_2,监听端口为5673,web页面的端口默认为15673,节点内部通信的端口为25673。

[root@node1 rabbitmq_2]# RABBITMQ_NODE_PORT=5673  RABBITMQ_DIST_PORT=25673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbitmq_2   rabbitmq-server start
  • 1

在这里插入图片描述
4. 查看第二个节点进程。
在这里插入图片描述
5. 启动第三个节点,第三个节点名称为rabbitmq_3,监听端口为5674,web页面的端口默认为15674,节点内部通信的端口为25674。

[root@node1 ~]# RABBITMQ_NODE_PORT=5674  RABBITMQ_DIST_PORT=25674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbitmq_3   rabbitmq-server start
  • 1

在这里插入图片描述

6 查看第三个节点进程。

在这里插入图片描述

1.2 立主纳从

假设把rabbitmq_1当作主节点,rabbitmq_2和rabbitmq_3当作从节点。

1.设置rabbitmq_1为主节点

#停止rabbitmq_1节点应用服务。
[root@node1 ~]# rabbitmqctl -n rabbitmq_1 stop_app

#将rabbitmq_1重置还原到最初状态,包括从原来所在的集群中删除此节点,从管理数据库中删除所有的配置数据、配置的用户、vhost 等,以及删除所有的持久化消息。
[root@node1 ~]# rabbitmqctl -n rabbitmq_1 reset

#启动rabbitmq_1节点应用服务。
[root@node1 ~]# rabbitmqctl -n rabbitmq_1 start_app
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
2. 将rabbitmq_2、rabbitmq_3加入到主节点。

#停止rabbitmq_2节点应用服务。
[root@node1 ~]# rabbitmqctl -n rabbitmq_2 stop_app

#将rabbitmq_2节点加入到主节点(rabbitmq_1),“node1”为服务器主机名。
[root@node1 ~]# rabbitmqctl -n rabbitmq_2 join_cluster rabbitmq_1@node1

#启动rabbitmq_2节点应用服务。
[root@node1 ~]# rabbitmqctl -n rabbitmq_2 start_app

#停止rabbitmq_3节点应用服务。
[root@node1 ~]# rabbitmqctl -n rabbitmq_3 stop_app

#将rabbitmq_3节点加入到主节点(rabbitmq_1),“node1”为服务器主机名。
[root@node1 ~]# rabbitmqctl -n rabbitmq_3 join_cluster rabbitmq_1@node1

#启动rabbitmq_3节点应用服务。
[root@node1 ~]# rabbitmqctl -n rabbitmq_3 start_app
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述

1.3 查看集群状态

[root@node1 ~]# rabbitmqctl cluster_status -n rabbitmq_1
  • 1

在这里插入图片描述

1.4 web监控

  1. 开启web插件
[root@node1 ~]# rabbitmq-plugins enable rabbitmq_management
  • 1
  1. 此时用15672、15673、15674三个端口都可以访问到web界面。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.新建用户,设置密码,指定角色,添加权限。

#给主节点添加baimu用户,密码为citms。
[root@node1 ~]# rabbitmqctl -n rabbitmq_1 add_user baimu citms

#将主节点的baimu用户设置成administrator角色,拥有最高权限。
[root@node1 ~]# rabbitmqctl -n rabbitmq_1 set_user_tags baimu administrator

#给主节点的baimu用户添加权限。可配置、可写、可读。
[root@node1 ~]# rabbitmqctl -n rabbitmq_1 set_permissions -p / baimu ".*" ".*" ".*"


同时也给其他两个从节点添加用户,授权,不然15673和15674页面登陆不了。
[root@node1 ~]# rabbitmqctl -n rabbitmq_2 add_user baimu citms
[root@node1 ~]# rabbitmqctl -n rabbitmq_2 set_user_tags baimu administrator
[root@node1 ~]# rabbitmqctl -n rabbitmq_2 set_permissions -p / baimu ".*" ".*" ".*"
[root@node1 ~]# rabbitmqctl -n rabbitmq_3 add_user baimu citms
[root@node1 ~]# rabbitmqctl -n rabbitmq_3 set_user_tags baimu administrator
[root@node1 ~]# rabbitmqctl -n rabbitmq_3 set_permissions -p / baimu ".*" ".*" ".*"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述
4. 使用创建的用户密码分别登录IP:15672、IP:15673、IP:15674。

在这里插入图片描述

1.5 测试

1.5.1 数据同步

  1. 主节点创建一个交换器和队列,并绑定,发送消息“武汉”。

在这里插入图片描述
在这里插入图片描述
2. 从节点查看消息“武汉”,主从消息同步。

在这里插入图片描述

1.5.2 一从死,主仍战

其中一个从节点宕机后,不影响主节点的写入,也不影响其余存活的从节点数据同步。

  1. 将rabbitmq_2从节点停掉。
[root@node1 mnesia]# rabbitmqctl -n rabbitmq_2 stop_app
  • 1

在这里插入图片描述

  1. IP:15673访问不了,但是主节点依然可以写入,rabbitmq_3从节点依然可以消息同步。

在这里插入图片描述
在这里插入图片描述

1.5.3 从复活,死亡期间数据同步

  1. 将rabbitmq_2从节点启动。
[root@node1 mnesia]# rabbitmqctl -n rabbitmq_2 start_app
Starting node rabbitmq_2@node1 ...
  • 1
  • 2
  1. IP:15673恢复访问,死掉期间主节点写入的“beijing”数据依然可以读出来。

在这里插入图片描述

1.5.4 主死,从活但不可用

  1. 停止rabbitmq_1主节点
[root@node1 mnesia]# rabbitmqctl -n rabbitmq_1 stop_app
Stopping rabbit application on node rabbitmq_1@node1 ...
  • 1
  • 2
  1. rabbitmq_2等从节点仍然可以访问,但是无法数据写入。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、多机集群

2.1 确定主机名

准备三台服务器,并修改主机名,最好是能一眼看出哪个节点的。
如图:

  • 192.168.130.129为第一个节点,主机名为node1;
  • 192.168.130.130为第二个节点,主机名为node2;
  • 192.168.130.131为第三个节点,主机名为node3。

在这里插入图片描述

  1. 编辑各节点的/etc/hosts文件,在其上添加IP 地址与节点名称的映射信息。
[root@node1 ~]# tail -3 /etc/hosts
192.168.130.129 node1
192.168.130.130 node2
192.168.130.131 node3

[root@node2 ~]# tail -3 /etc/hosts
192.168.130.129 node1
192.168.130.130 node2
192.168.130.131 node3


[root@node3 ~]# tail -3 /etc/hosts
192.168.130.129 node1
192.168.130.130 node2
192.168.130.131 node3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

2.2 三机部署rabbitmq

第一步,分别在三台机器上部署rabbitmq服务,怎么来部署可以参考第二章节,这里我就提前部署好了。各节点的erlang和rabbitmq版本需一致。可以设置rabbitmq-enc.conf变量文件来定义我们想要的信息。

  • 第一个节点信息。

在这里插入图片描述

  • 第二个节点信息。

在这里插入图片描述

  • 第三个节点信息

在这里插入图片描述

  • 各节点启动正常,可以直接后台运行:rabbitmq-server -detached。

在这里插入图片描述

第二步,把所有节点的rabbitmq停掉,将node1节点的cookie文件内容复制替换node2、node3节点上的cookie文件,以确保各个节点的 cookie 文件使用的是同一个值。

  • cookie文件默认路径为/var/lib/rabbitmq/.erlang.cookie ,或者在$HOME/.erlang.cookie。
  • 二进制安装的rabbitmq服务,.erlang.cookie文件在/root/目录下面,是个隐藏文件。
  • cookie文件权限必须是400,不然启动时会报错。
  • 第一个节点

在这里插入图片描述

  • 第二个节点

在这里插入图片描述

  • 第三个节点

在这里插入图片描述

第三步,三节点的.erlang.cookie文件内容替换统一后,依次启动各节点rabbitmq服务,必须保证每个节点的rabbitmq服务运行正常。

  • 如果遇到启动异常,应该是在第一步先启动了未停止好,导致有端口占用,可以用 lsof -i:25672命令查看进程,将其杀掉,再重新启动就可以了。
  • 问题:
    在这里插入图片描述
  • 解决:
    在这里插入图片描述
  1. 查看各节点运行状态。
  • 第一个节点运行正常

在这里插入图片描述

  • 第二个节点运行正常

在这里插入图片描述

  • 第三个节点运行正常

在这里插入图片描述
2. 查看各节点集群信息

  • node1节点。

在这里插入图片描述

  • node2节点

在这里插入图片描述

  • node3节点

在这里插入图片描述

2.3 设主纳从

这里把node1名为主节点,node2和node3为从节点,操作步骤和前面差不多。

1.主节点不用做任何操作,分别在node2和node3机器上进行加入集群操作,先把node2节点加进来。

# 把node2节点加入到node1节点,组成以node1为主、node2为从的集群。
[root@node2 ~]# rabbitmqctl stop_app
[root@node2 ~]# rabbitmqctl reset
[root@node2 ~]# rabbitmqctl join_cluster rabbitmq_1@node1
[root@node2 ~]# rabbitmqctl start_app


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
2. 分别在node1和node2上查看集群状态,此时node1和node2已经组成集群。

在这里插入图片描述
3. 将node3加入node1。

# 把node3节点加入到node1节点,组成以node1为主、node3为从的集群。
[root@node3 ~]# rabbitmqctl stop_app
[root@node3 ~]# rabbitmqctl reset
[root@node3 ~]# rabbitmqctl join_cluster rabbitmq_1@node1
[root@node3 ~]# rabbitmqctl start_app
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
4.分别在node1和node3上查看集群状态,此时node1、node2、node3已经组成集群。

在这里插入图片描述

2.4 开启web插件

每个节点上都需要开启。

[root@node1 ~]# rabbitmq-plugins enable rabbitmq_management

[root@node2 ~]# rabbitmq-plugins enable rabbitmq_management

[root@node3 ~]# rabbitmq-plugins enable rabbitmq_management
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

2.5 新建用户,赋权限

只需要在主节点执行就可以了。

#创建一个qingjun用户,密码为citms。
[root@node1 ~]# rabbitmqctl add_user qingjun citms

#给qingjun用户设为administrator角色,拥有最高权限。
[root@node1 ~]# rabbitmqctl set_user_tags qingjun administrator

#给qingjun用户授权,可操作、可写、可读。
[root@node1 ~]# rabbitmqctl set_permissions -p / qingjun ".*" ".*" ".*"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

2.6 web监控

通过web页面可以只管看到集群状态。

在这里插入图片描述

2.7 测试

2.7.1 正常关闭时,最后关闭的节点需要第一个启动

  • 如果关闭了集群中的所有节点,则需要确保在启动的时候最后关闭的那个节点是第一个启动的。如果第一个启动的不是最后关闭的节点,那么这个节点会等待最后关闭的节点启动。
  • 比如,现在依次关闭node1、node2、node3节点,node3节点是最后关闭的,那么启动的时候需要先启动node3节点。若先启动node1或者node2,会一致等待node3节点启动,等待多久有个机制,后面再讲,咱们先来测试下效果。

1.依次关闭node1、node2、node3节点。

[root@node1 rabbitmq]# rabbitmqctl stop
Stopping and halting node rabbitmq_1@node1 ...

[root@node2 ~]# rabbitmqctl stop
Stopping and halting node rabbitmq_2@node2 ...

[root@node3 ~]# rabbitmqctl stop
Stopping and halting node rabbitmq_3@node3 ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.此时先启动node1,node1日志显示一直在启动中,这个时候就是在等待node3节点启动。

在这里插入图片描述
3.此时启动node3节点,node1会过一段时间更新日志,显示服务启动成功。此时node2节点还是死掉状态,所以监控node2节点是红色。

在这里插入图片描述
在这里插入图片描述
4.最后我们启动node2节点,集群恢复。
在这里插入图片描述

在这里插入图片描述

2.7.2 异常断电

  • 如果集群中的所有节点由于某些非正常因素,比如断电而关闭,那么集群中的节点都会认为还有其他节点在它后面关闭,此时需要调用 rabbitmgctl force_boot 命令来启动一个节点,之后集群才能正常启动。
  • 我这里是在虚拟机运行正常的情况下突然关掉电脑来模拟此种情况。

1.电脑关机前,所有节点运行正常。

在这里插入图片描述
2.电脑突然关闭后,所有节点全部停止运行,监控页面不能访问。此时随便启动一个节点显示一直启动中。

在这里插入图片描述

在这里插入图片描述
3.此时执行命令,再次启动node1,就会启动成功,监控页面可以访问。

在这里插入图片描述
在这里插入图片描述
4.此时再去正常启动第二个节点就会启动成功,无论是node2,还是node3。我这里启动的是node2,192.168.130.130:15672监控页面可以访问。

在这里插入图片描述
在这里插入图片描述
5.最后再把第三个节点正常启动起来,恢复集群。

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号