CentOS7环境RabbitMQ集群配置管理------------镜像队列集群
1、集群节点规划
ip地址 | 用途 | 主机名 |
---|---|---|
192.168.16.24 | mq 主节点 | server1 |
192.168.16.46 | mq 从节点 | server2 |
192.168.16.59 | mq 从节点 | server3 |
192.168.16.61 | HAProxy KeepAlive | server4 |
192.168.16.78 | HAProxy KeepAlive | server5 |
注意 : 主机名称根据列表的主机名保持一致,因为我们后面的命令中会使用到所以需要提前设置好。
以上列表五个主机做1.1 , 1.2调整
1.1 CentOS7每个主机名调整
命令: hostnamectl set-hostname XXXX
1.2 配置每个主机名的映射
命令:vi /etc/hosts
192.168.16.24 server1
192.168.16.46 server2
192.168.16.59 server3
2、安装RabbitMQ
分别 在 192.168.16.24、192.168.16.46、192.168.16.59 安装rabbitMQ
2.1 安装Socat ,在线安装依赖环境:
yum install gcc
yum install socat
2.2 安装Erlang
mkdir /program
cd /program
# 上传 erlang-22.0.7-1.el7.x86_64.rpm 安装包上传
# 安装
rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
[aaa@qq.com program]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
警告:erlang-22.0.7-1.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, ** ID 6026dfca: NOKEY
错误:依赖检测失败:
libcrypto.so.10(OPENSSL_1.0.2)(64bit) 被 erlang-22.0.7-1.el7.x86_64 需要
【解决方案】把升级OpenSSL 1.0.1到OpenSSL 1.0.2
在右下角找到并下载
| CentOS 7.7.1908 for x86_64 | openssl-libs-1.0.2k-19.el7.x86_64.rpm |
上传到服务器后,使用rpm进行升级,为了防止和已经有的版本冲突,强制安装(--force)
[aaa@qq.com /home/kiosk/repod]# rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force
warning: openssl-libs-1.0.2k-16.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:openssl-libs-1:1.0.2k-16.el7 ################################# [100%]
2. 3 安装RabbitMQ
# 上传 rabbitmq-server-3.7.17-1.el7.noarch.rpm 安装包
# 安装
rpm -ivh rabbitmq-server-3.7.17-1.el7.noarch.rpm
2.4 开启管理界面及配置
rabbitmq-plugins enable rabbitmq_management
3、复制主节点的.erlang.cookie文件到其他所有的从节点
#停止mq的运行 | systemctl stop rabbitmq-server
/etc/init.d/rabbitmq-server stop
#机器之间通信借助于erlang进行消息传输,所以要求集群中所有节点必须有相同的erlang.cookie
#将主节点的文件同步到到192.168.16.46 和 192.168.16.59中
scp /var/lib/rabbitmq/.erlang.cookie 192.168.16.46:/var/lib/rabbitmq
scp /var/lib/rabbitmq/.erlang.cookie 192.168.16.59:/var/lib/rabbitmq
然后去了46与59上修改权限:分别执行如下
chmod 400 /var/lib/rabbitmq/.erlang.cookie
4、停掉所有的MQ节点然后使用集群的方式启动
主节点:
#停止mq的运行,在启动mq的节点上执行
#centos7 这样启动
systemctl stop rabbitmq-server
systemctl start rabbitmq-server
5、将从节点添加到主节点的集群中
# 如果每个节点还没有启动的 先启动 : systemctl start rabbitmq-server
server2:rabbitmqctl stop_app
#server2节点添加到server1所在集群,--ram 指定消息以内存的方式存储,如果不指定默认为磁盘存储
server2:rabbitmqctl join_cluster --ram aaa@qq.com
server2:rabbitmqctl start_app
server3配置同上
6、查看集群的状态
我这里创建完成之后,之前的用户无法使用了,重新添加用户,参考之前搭建单机版的命令
[aaa@qq.com ~]# rabbitmqctl start_app
Starting node aaa@qq.com ...
completed with 3 plugins.
[aaa@qq.com ~]# rabbitmqctl cluster_status
Cluster status of node aaa@qq.com ...
[{nodes,[{disc,[aaa@qq.com]},{ram,[aaa@qq.com,aaa@qq.com]}]},
{running_nodes,[aaa@qq.com,aaa@qq.com,aaa@qq.com]},
{cluster_name,<<"aaa@qq.com">>},
{partitions,[]},
{alarms,[{aaa@qq.com,[]},{aaa@qq.com,[]},{aaa@qq.com,[]}]}]
7、访问集群中的任何一个节点的控制台查看集群情况
8、设置镜像队列策略
主节点执行
# 将所有队列设置为镜像队列,即队列会被复制到各个节点: 主节点执行
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
9、在管控台创建一个队列然后发送一条消息查看其他节点是否接收到
10、修改集群信息【可选项】
#在任何一个节点上执行该命令修改集群的名字
rabbitmqctl set_cluster_name rabbitmq_cd_itcast
#在非server2的节点上执行可以移除server2节点
rabbitmqctl forget_cluster_node aaa@qq.com
# 修改了信息以后可以查看修改是否成功
rabbitmqctl cluster_status
11、总结
到此为止我们的镜像队列的集群就搭建完成了,主要注意.erlang.cookie文件的同步和集群命令的书写
上一篇: Java MYSQL连接