一、背景
二、步骤
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
9.rabbitmq 默认用户为guest,要添加其他的管理账户。此处建rabbitmq集群,只要在一台主机(rabbit主)上设置即可,其他会自动同步。
rabbitmqctl add_user xxx xxx
rabbitmqctl set_user_tags xxx administrator
rabbitmqctl set_permissions -p / xxx ".*" ".*" ".*"
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
systemctl stop rabbitmq-server
systemctl stop rabbitmq-server
rabbitmq-server -detached
rabbitmq-server -detached
rabbitmqctl cluster_status
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@xxx
rabbitmqctl start_app
rabbitmqctl cluster_status
12.添加镜像模式配置。上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。
yum install -y haproxy
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
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl start haproxy
systemctl status haproxy
vi /etc/sysctl.conf
sysctl -p
systemctl start haproxy
systemctl status haproxy
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
三、问题总结
搭建过程出现的问题,已写在过程中,请仔细观看。