rabbitmq 镜像集群搭建

一、背景

二、步骤

1.找两台linux机器,可以是物理机,也可以是虚拟机,只要保证有网络,彼此能互通即可。此处选取两台虚拟机,ip为192.168.137.249和192.168.137.172.
2.安装epel源。两台机器分别安装。
yum install epel-release -y
3.安装erlang。erlang是rabbitmq的依赖包,两台机器分别安装。
yum install erlang -y
4.分别安装rabbitMq。两台机器分别安装。此处也可选择自己想要的版本,详情可百度查找rabbitmq官网。
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.0/rabbitmq-server-3.5.0-1.noarch.rpm
yum localinstall rabbitmq-server-3.5.0-1.noarch.rpm -y
5.分别添加开机启动。
 chkconfig rabbitmq-server on
6.分别启动rabbitmq。
systemctl start rabbitmq-server

##查看状态
systemctl status rabbitmq-server
7.分别开启web管理界面
rabbitmq-plugins enable rabbitmq_management
8.修改配置文件。
cp /usr/share/doc/rabbitmq-server-3.5.0/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

##{loopback_users, []} 删除前面的注释%%,同时注意后面的逗号,只有一个配置项的时候,请删除后面的逗号。

在这里插入图片描述

9.rabbitmq 默认用户为guest,要添加其他的管理账户。此处建rabbitmq集群,只要在一台主机(rabbit主)上设置即可,其他会自动同步。
rabbitmqctl add_user xxx xxx
rabbitmqctl set_user_tags xxx administrator
rabbitmqctl set_permissions -p / xxx ".*" ".*" ".*"

##重启rabbitmq
systemctl restart rabbitmq-server
10.浏览器访问rabbitmq-server, http://ip:15672
11.设置每个节点Cookie。将rabbitmq主节点上的.erlang.cookie拷贝到从上。必须保证各节点cookie保持一致,否则节点之间就无法通信。
#从
chmod 777 /var/lib/rabbitmq/.erlang.cookie

#拷贝
scp -p /var/lib/rabbitmq/.erlang.cookie root@xxxx:/var/lib/rabbitmq/

#恢复从权限
chmod 600 /var/lib/rabbitmq/.erlang.cookie

##停止所有节点rabbitmq,用detached参数独立运行,这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可以参照这个顺序。
##主节点
systemctl stop rabbitmq-server
##从节点
systemctl stop rabbitmq-server

##主节点
rabbitmq-server -detached
##从节点
rabbitmq-server -detached
##这步报错的话,请检查rabbitmq进程是否正常退出,未正常退出,用ps -ef|grep rabbitmq|grep -v grep|awk -F ' ' '{print $2}'|xargs kill -9 删除进程

##分别查看下每个节点
rabbitmqctl cluster_status

##将从节点作为内存节点与主节点连接起来,在从节点上执行如下命令:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@xxx
rabbitmqctl start_app

##主节点如果要使从节点在集群里也是磁盘节点,join_cluster 命令去掉--ram参数即可

##查看各节点状态
rabbitmqctl cluster_status

在这里插入图片描述

12.添加镜像模式配置。上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。
##安装haproxy,在除了以上两个主从节点外完成
yum install -y haproxy

##修改配置/etc/haproxy/haproxy.cfg
##删除 main frontend which proxys to the backends以下的所有内容,并添加
listen rabbitmq_cluster 0.0.0.0:5672
   mode tcp
   balance roundrobin
   server   rqslave1 114.55.29.241:5672 check inter 2000 rise 2 fall 3
   server   rqmaster 114.55.29.86:5672 check inter 2000 rise 2 fall 3

##如果有3台或3台以上,可以把disc节点注释掉,原因就是让rabbitmq性能最佳化。这样负载均衡器会监听5672端口,轮询多个内存节点的5672端口,磁盘节点可以只做备份不提供给生产者、消费者使用,当然如果我们服务器资源充足情况也可以配置多个磁盘节点.

##此外,还需要修改defaults段配置

在这里插入图片描述

##检查配置文件语法
haproxy -c -f /etc/haproxy/haproxy.cfg

##启动haproxy
systemctl start haproxy 

##查看状态
systemctl status haproxy

##若haproxy启动失败,开启允许绑定非本机的IP
vi /etc/sysctl.conf
#新增net.ipv4.ip_nonlocal_bind=1

##生效
sysctl -p

##重新启动
systemctl start haproxy 

##查看状态
systemctl status haproxy

##配置策略:设置ha模式。使用Rabbit镜像功能,需要基于rabbitmq策略来实现,政策是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。 其中ha-mode有三种模式:all: 同步至所有的;exactly: 同步最多N个机器. 当现有集群机器数小于N时,同步所有,大于等于N时则不进行同步. N需要额外通过ha-params来指定;nodes: 只同步至符合指定名称的nodes. N需要额外通过ha-params来指定。

##主节点执行
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
13.以上rabbitmq镜像集群搭建已结束。能看到ha-all的说明用我的ha-all策略啦,属于镜像模式,没有表示的就是普通模式。

在这里插入图片描述

14.集群退出。
##从节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

##主节点
rabbitmqctl forget_cluster_node rabbit@xxx

三、问题总结

搭建过程出现的问题,已写在过程中,请仔细观看。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章