#haproxy+keepalived+rabbitmq集群
192.168.6.128 haproxy+keepalived
192.168.6.129 haproxy+keepalived
192.168.6.130 rabbitmq
192.168.6.131 rabbitmq
192.168.6.132 vip
1、erlang安装:
wget http://www.erlang.org/download/otp_src_R15B01.tar.gz
tar zxvf otp_src_R15B01.tar.gz
cd otp_src_R15B01
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll
make;make install
添加这三句到/etc/profile
ERL_HOME=/usr/local/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH
source /etc/profile
1、rabbit安装 :
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.0.1/rabbitmq-server-3.0.1.tar.gz
tar zxvf rabbitmq-server-3.0.1.tar.gz
cd rabbitmq-server-3.0.1
yum install python-simplejson libxslt xmlto -y
make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/sbin MAN_DIR=/usr/local/man install
在安装好的两台节点服务器中,分别修改/etc/hosts文件,指定他们的hosts文件
192.168.6.130 web3
192.168.6.131 web4
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,cookie有可能会在$HOME/.erlang.cookie,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信。
rabbitmq-server start 两个节点启动
rabbitmqctl stop
rabbitmq-server -detached
131上执行:rabbitmqctl join_cluster rabbit@web3
rabbitmqctl cluster_status 查看是否组成集群
上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。
使用Rabbit镜像功能,需要基于rabbitmq策略来实现,政策是用来控制和修改群集范围的某个vhost队列行为和Exchange行为
在cluster中任意节点启用策略,策略会自动同步到集群节点
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
haproxy配置文件:
global
maxconn 51200
chroot /usr/local/haproxy
uid 99
gid 99
daemon
#quiet
nbproc 1 #进程数
pidfile /usr/local/haproxy/logs/haproxy.pid
defaults
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
#retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
log 127.0.0.1 local0 err #[err warning info debug]
balance roundrobin #负载均衡算法
# option httplog #日志类别,采用httplog
# option httpclose #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
# option dontlognull
# option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
frontend HAPROXY
bind *:80
mode http
option httplog
default_backend www.web.com
#listen localhost 192.168.6.128:80
# mode http
# option httplog #采用http日志格式
# stats refresh 30s #统计页面自动刷新时间
# stats uri /stats #统计页面url
# stats realm Haproxy Manager #统计页面密码框上提示文本
# stats auth admin:admin #统计页面用户名和密码设置
# #stats hide-version #隐藏统计页面上HAProxy的版本信息
backend www.web.com #这是做的nginx负载均衡
balance source
server web2 192.168.6.131:80 check inter 1500 rise 3 fall 3
server web3 192.168.6.130:80 check inter 1500 rise 3 fall 3
listen rabbitmq_cluster 0.0.0.0:5672 #这是rabbitmq
mode tcp
balance roundrobin
server rqslave1 192.168.6.131:5672 check inter 2000 rise 2 fall 3
server rqslave2 192.168.6.130:5672 check inter 2000 rise 2 fall 3
#keepalived详情见自己博客!