原文:http://blog.csdn.net/chenliuzuo/article/details/52882703?locationNum=2&fps=1
在我们使用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、集群配置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
以后其他节点想要加入集群,都可以通过上面的操作进行配置
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的默认配置文件,启动时也可以通过参数指定配置文件位置):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
配置完成后 通过http访问haprox的主机端口8100即可查询所代理服务器的状态
到此 rabbitmq的集群、镜像及代理配置完毕