RabbitMQ高可用性集群镜像实施方案

在我们使用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 status 可以查看当前rabbitmactl默认操作的节点信息 
    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 #后台运行haproxy
nbproc 1 #启动1个haproxy实例
pidfile /opt/haproxy/haproxy.pid #将所有进程PID写入pid文件

defaults #默认设置
 #log global
log 127.0.0.1 local3 #日志文件的输出定向

 #默认的模式:tcp|http|health
mode tcp #所处理的类别,默认采用http模式
option tcplog #日志类别,采用http日志格式`
option dontlognull
retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查
option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
option abortonclose #当服务器负载很高时,自动结束掉当前队列中处理比较久的链接
maxconn 2000 #默认最大连接数
timeout connect 5000 #连接超时时间
timeout client 50000 #客户端连接超时时间
timeout server 50000 #服务器端连接超时时间 

 # Haproxy统计页面
listen haproxy_stats
bind 0.0.0.0:8100 #侦听IP:Port
mode http
log 127.0.0.1 local0 info #err|warning|info|debug]
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 #rabbitmq代理配置

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的集群、镜像及代理配置完毕

PS:如果您想和业内技术大牛交流的话,请加qq群(527933790)或者关注微信公众 号(AskHarries),谢谢!

转载请注明原文出处:Harries Blog™ » RabbitMQ高可用性集群镜像实施方案

赞 (0)

分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址