主/备架构图:
使用192.168.111.201:5672/5671访问haproxy,由haproxy转发请求,这是一对主/备独立服务器,并前置一台负载均衡器来处理故障转移。这是真正的无共享架构,主服务器和备用服务器之间没有协作,所以任何影响到主服务器的问题不会自动转移到备用服务器上。分隔的足够彻底,可以运行不同版本的RabbitMQ,运行在生产环境中引入新版RabbitMQ。
当主节点发生故障时,让备用节点拥有主节点的所有消息可使用共享存储架构(主服务器故障时,使用Pacemaker将RabbitMQ的IP地址转移到备用节点上并启动RabbiMQ服务器,采用共享存储上的当前元数据、内容和状态),但存在如下的问题:
(1) 因为是共享的,所以如果由于某些原因导致主节点故障那么同样的事情会发生在备用节点上,从而RabbitMQ服务器无法启动。
(2) 需要确保两台服务器拥有相同的节点名称和UID,当两处有一处不同备用节点就无法访问主节点共享存储的信息了。
官网给出了传统的基于pacemaker的active/passive模式的集群,由于崩溃会在主备间复制的事实,并且在使用共享存储方法时无法在两个节点上都运行RabbitMQ,因此选择基于负载均衡器的主/备搭建。
RabbitMQ与HAProxy的搭建参考我的上一篇,当然使用主/备模式安装RabbitMQ集群时就不需要节点连接了。
http://my.oschina.net/lzhaoqiang/blog/701618
接下来是配置haproxy:
#---------------------------------------------------------------------
# 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,当主机宕掉时,备机就会接管服务