在我们使用rabbitmq作为消息服务时,在服务负载不是很大的情况下,一般我们只需要一个rabbitmq节点便能为我们提供服务,可这难免会发生单点故障,要解决这个问题,我们便需要配置rabbitmq的集群和镜像,以下便是使用两台服务器进行rabbitmq集群和镜像的实施步骤。
1、环境准备
a、两台安装有rabbitmq实例的主机(假定主机ip分别为192.168.1.2、192.168.1.3);
b、配置两台主机的hosts(/etc/hosts)
主机192.168.1.2 的hosts文件添加配192.168.1.3 rabbitmq_cluster_3
主机192.168.1.3 的hosts文件添加配192.168.1.2 rabbitmq_cluster_2
c、复制erlang的cookie文件(rabbitmq/erlang使用cookie进行相互认证)
该文件一般为:/var/lib/rabbitmq/.erlang.cookie
任意选择一台主机上面的该文件复制到另一台主机即可
注意目的主机更改该文件的权限及属性如:
chown rabbitmq /var/lib/rabbitmq/.erlang.cookie & chmod 400 /var/lib/rabbitmq/.erlang.cookie
2、高可用部署
因为我们使用两台机器进行rabbitmq的高可用配置,所以需要在两台集群配置后的主机上进行镜像的配置,以便在一台主机宕机后,还能继续提供服务,同时两个主机上的节点都使用磁盘节点,以便在两台主机都宕机的情况下消息不能丢失。
a、集群配置
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq_cluster_3
rabbitmqctl start_app
rabbitmqctl cluster_status
以后其他节点想要加入集群,都可以通过上面的操作进行配置
b、镜像配置
要保证集群的高可用,就必须进行集群的镜像的配置,镜像其实是队列的一个副本,如果队列进行了镜像的配置,那么队列都有最多一个master和任意多个slave(由配置策略和集群中的实例个数决定),生产者发送的消息必须在所有副本复制完成后,才会与生产者确认消息发送成功,而每个消费者都只能与master连接(集群会自动将消费者重连到master),消费者消费一个消息时,在消费者确认消息被接收后,master会通知所有slave删除该消息;
配置方式有两种,一是使用rabbitmqctl,二是使用rabbitmq_management(非常简单,此外还提供丰富的restapi),在一个节点上配置后,会在所有节点生效,这里使用management,步骤如下:
首先启用rabbitmq_management插件 默认端口15672 可在启动节点时配置
rabbitmq-plugins enable rabbitmq_management
登陆rabbitmq_management http://127.0.0.1:15672/
在节点所在机器环境可以直接使用账号/密码 guest/guest 登陆
针对我们目前的情况配置策略如截图
3、使用haproxy代理
haproxy代理的配置非常简单,可以单独找台机器部署,也可以直接在其中一个rabbitmq节点配置,之后客户端使用时,直接链接haproxy代理服务即可,简单配置样例如下(/etc/haproxy/haproxy.cfg haproxy的默认配置文件,启动时也可以通过参数指定配置文件位置):
global
log 127.0.0.1 local0
maxconn 4096
chroot /opt/haproxy
stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin
daemon
nbproc 1
pidfile /opt/haproxy/haproxy.pid
defaults
log 127.0.0.1 local3
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
option abortonclose
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
listen haproxy_stats
bind 0.0.0.0:8100
mode http
log 127.0.0.1 local0 info
stats refresh 5s
stats uri /haproxy-stats
stats realm Haproxy\ Statistics
stats auth admin:admin
stats hide-version
stats admin if TRUE
listen haproxy_rabbitmq_cluster
mode tcp
bind 0.0.0.0:5672
balance roundrobin
server rabbit_1 192.168.1.2:5672 check inter 5000 rise 2 fall 3
server rabbit_2 192.168.1.3:5672 check inter 5000 rise 2 fall 3
配置完成后 通过http访问haprox的主机端口8100即可查询所代理服务器的状态
到此 rabbitmq的集群、镜像及代理配置完毕