主/备架构图:javascript
使用192.168.111.201:5672/5671访问haproxy,由haproxy转发请求,这是一对主/备独立服务器,并前置一台负载均衡器来处理故障转移。这是真正的无共享架构,主服务器和备用服务器之间没有协做,因此任何影响到主服务器的问题不会自动转移到备用服务器上。分隔的足够完全,能够运行不一样版本的RabbitMQ,运行在生产环境中引入新版RabbitMQ。css
当主节点发生故障时,让备用节点拥有主节点的全部消息可以使用共享存储架构(主服务器故障时,使用Pacemaker将RabbitMQ的IP地址转移到备用节点上并启动RabbiMQ服务器,采用共享存储上的当前元数据、内容和状态),但存在以下的问题:java
(1) 由于是共享的,因此若是因为某些缘由致使主节点故障那么一样的事情会发生在备用节点上,从而RabbitMQ服务器没法启动。redis
(2) 须要确保两台服务器拥有相同的节点名称和UID,当两处有一处不一样备用节点就没法访问主节点共享存储的信息了。后端
官网给出了传统的基于pacemaker的active/passive模式的集群,因为崩溃会在主备间复制的事实,而且在使用共享存储方法时没法在两个节点上都运行RabbitMQ,所以选择基于负载均衡器的主/备搭建。bash
RabbitMQ与HAProxy的搭建参考个人上一篇,固然使用主/备模式安装RabbitMQ集群时就不须要节点链接了。服务器
http://my.oschina.net/lzhaoqiang/blog/701618架构
接下来是配置haproxy:app
#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 #[err warning info debug] chroot /usr/local/haproxy pidfile /var/run/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 maxconn 4096 #最大链接数,默认4000 daemon #建立1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon" nbproc 1 #后台进程数,这个要求是 daemon ,需小于cpu内核数 #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK log global #采用全局定义的日志 option dontlognull #不记录健康检查的日志信息 option httpclose #每次请求完毕后主动关闭http通道 option tcplog #option forwardfor #若是后端服务器须要得到客户端真实ip须要配置的参数,能够从Http Header中得到客户端ip option redispatch #serverId对应的服务器挂掉后,强制定向到其余健康的服务器 timeout connect 10s #default 10 second timeout if a backend is not found timeout client 30s #客户端链接超时 timeout server 30s #服务器链接超时 timeout check 5s #设置对后端服务器的检测超时时间,默认单位是毫秒 maxconn 60000 #最大链接数 retries 3 #3次链接失败就认为服务不可用,也能够经过后面设置 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- #frontend main *:5000 # acl url_static path_beg -i /static /images /javascript /stylesheets # acl url_static path_end -i .jpg .gif .png .css .js # # use_backend static if url_static #知足策略要求,则响应策略定义的backend页面 # default_backend app #不知足则响应backend的默认页面 #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin #负载均衡模式轮询 # server static 127.0.0.1:4331 check #后端服务器定义 #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- listen stats bind 0.0.0.0:8100 #监听端口 mode http #http的7层模式 option tcplog #采用tcp日志格式 #log 127.0.0.1 local0 err maxconn 5 stats refresh 30s #统计页面自动刷新时间 stats uri /stats #统计页面url stats realm welcome login\ Haproxy #统计页面密码框上提示文本 stats auth admin:admin #统计页面用户名和密码设置 stats hide-version #隐藏统计页面上HAProxy的版本信息 listen rabbitmq_master_backup_cluster bind 0.0.0.0:5672 mode tcp balance roundrobin server rqmaster 192.168.111.136:5672 check inter 2000 rise 2 fall 3 server rqbackup 192.168.111.137:5672 backup check inter 2000 rise 2 fall 3 listen rabbitmq_master_backup_cluster_ssl bind 0.0.0.0:5672 mode tcp balance roundrobin server rqmaster 192.168.111.136:5671 check inter 2000 rise 2 fall 3 server rqbackup 192.168.111.137:5671 backup check inter 2000 rise 2 fall 3
启动:负载均衡
sudo /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
能够看到rmqmaster与rmqbackup两个节点颜色不一样,主机为active UP ,备机为backup UP,当主机宕掉时,备机就会接管服务