RabbitMQ集群搭建(rabbitmq3.8.26+Erlang24.0.6+cenos8.4)
克隆三台机器:位置可以自定义,没有相应文件夹的话会自动创建配置网络和ip请参考:https://blog.csdn.net/weixin_38568503/article/details/118816557开机,然后配置网络等:配置当前虚拟机的网络配置文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33命令:ip addr :查看本机ip地址/或者if
目录
集群架构
当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的。RabbitMQ 集群是一个或多个节点的逻辑分组,集群中的每个节点都是对等的,每个节点共享所有的用户,虚拟主机,队列,交换器,绑定关系,运行时参数和其他分布式状态等信息。一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图:
(1)克隆三台linux机器:
虚拟机名称和位置(L)可以自定义,位置处如果没有相应文件夹的话会自动创建:
(2)配置虚拟机的网络和ip:
配置网络和ip请参考: https://blog.csdn.net/weixin_38568503/article/details/118816557
演示其中一台linux的配置,其他克隆机类似:
虚拟机开机,然后配置网络,ip等:
配置当前虚拟机的网络配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
命令:
ip addr :查看本机ip地址/或者ifconfig命令
i :修改配置文件内容。安装上图进行自定义的修改。
ESC: 修改完成后按ESC,然后按shit+: 输入wq 用来保存退出文件。
然后重启:reboot
然后重新查看ip addr地址
(3)RabbitMQ集群搭建步骤:
①. 修改三台机器的主机名称:
vim /etc/hostname
如图配置:其中主机一的hostname设置值node1,主机二的hostname设置值node2,主机三的hostname设置值node3,然后保存退出即可:
②. 配置各个节点的hosts文件,让各个节点能相互识别对方:
vim /etc/hosts
每台设置以下相同的内容:192.168.211.231等为三台机器的ip地址,node1为节点名称
192.168.211.231 node1
192.168.211.232 node2
192.168.211.233 node3
如图配置:
三台同样的设置,然后重启三台机器,便于系统识别hosts文件:reboot
③. 设置各个节点的cookie文件使用同一个值:
在node1(即机器一) 上操作,将 .erlang.cookie 文件拷贝到其他两台主机上。该 cookie 文件相当于密钥令牌,集群中的 RabbitMQ 节点需要通过交换密钥令牌以获得相互认证,因此处于同一集群的所有节点需要具有相同的密钥令牌,否则在搭建过程中会出现 Authentication Fail 错误。
RabbitMQ 服务启动时,erlang VM 会自动创建该 cookie 文件,默认的存储路径为 /var/lib/rabbitmq/.erlang.cookie 或 $HOME/.erlang.cookie,该文件是一个隐藏文件,需要使用 ls -al 命令查看。(拷贝.cookie时,各节点都必须停止MQ服务):
// 各节点分别停止所有服务,构建Erlang的集群环境
systemctl stop rabbitmq-server
//主机node1上的操作:
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie
配置如图:
④. 启动RabbitMQ服务,顺带启动Erlang虚拟机和RabbitMQ应用服务(在三台节点上分别执行以下命令):
启动MQ服务,Erlang虚拟机:
rabbitmq-server -detached
⑤. 在节点2(node2)机器上执行:
#先关闭防火墙,再启动:
systemctl stop firewalld
#下次开机防火墙也是关闭的
systemctl enable firewalld
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
# node2加入node1, node3加入node2
rabbitmqctl join_cluster rabbit@node1
# 4.启动服务
rabbitmqctl start_app
⑥. 在节点3(node3)机器上执行:
#先关闭防火墙,再启动:
systemctl stop firewalld
#下次开机防火墙也是关闭的
systemctl enable firewalld
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
# node2加入node1, node3加入node2
rabbitmqctl join_cluster rabbit@node2
# 4.启动服务
rabbitmqctl start_app
⑦. 查看集群状态:
此时可以在任意节点上使用以下命令查看集群状态:
rabbitmqctl cluster_status
状态如图:
其他操作:
⑧. 需要重新设置用户:
# 添加用户
rabbitmqctl add_user 用户名 密码
# 设置用户角色,分配操作权限
rabbitmqctl set_user_tags 用户名 administrator
# 为用户添加资源权限(授予访问虚拟机根节点的所有权限)
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
#查看当前用户和角色
rabbitmqctl list_users
角色有四种:
administrator:可以登录控制台、查看所有信息、并对rabbitmq进行管理
monToring:监控者;登录控制台,查看所有信息
policymaker:策略制定者;登录控制台指定策略
managment:普通管理员;登录控制
这里创建用户admin,密码123,设置administrator角色,赋予所有权限
创建完成后,访问服务器公网ip:15672进行登录,然后便可进入到后台:
测试:http://192.168.211.231:15672/
其他操作一:解除集群节点(node2和node3机器分别执行)
# 1.停止服务
rabbitmqctl stop_app
# 2.重置集群状态
rabbitmqctl reset
# 3.重启服务
rabbitmqctl start_app
#查看集群状态
rabbitmqctl cluster_status
#在集群其他正常节点将节点踢出集群,在node1机器上执行
rabbitmqctl forget_cluster_node rabbit@node2
其他操作二:重新加入集群:
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入
rabbitmqctl join_cluster rabbit@node1
# 4.重启服务
rabbitmqctl start_app
(4)镜像队列(备份队列):
搭建步骤:任何一台机器的控制台创建:
1.启动三台集群节点:
2.随便找一个节点添加policy(策略),如下图:
3.在node1上创建一个队列发送一条消息,队列存在镜像队列:
4.停掉node1之后发现node2成为镜像队列:
5.
(5)Haproxy+Keepalive实现高可用负载均衡(实现MQ的ip切换):
(6)联合交换机:
搭建步骤:
成功安装后的:
3.原理图:
4.在下游节点(node2)配置上游节点(node1):
然后
(7)联合队列:
更多推荐
所有评论(0)