前边简要介绍了单机版rabbitmq的安装,但是实际使用中往往是集群模式,既然是集群就有普通模式与高性能模式之分,同理rabbitmq亦是如此。
一、节点分布:
主机名 | 对应Ip | rabbitmq | haproxy |
node01 | 192.168.1.71 | 1(disk)磁盘节点 |
|
node02 | 192.168.1.72 | 1(memory)内存节点 |
|
node03 | 192.168.1.73 | 1(memory) 内存节点 |
|
node04 | 192.168.1.74 |
| 1 |
二、集群配置
1、配置hosts
在各个节点、编辑 vim /etc/hosts加入
192.168.1.71 node01
192.168.1.72 node02
192.168.1.73 node03
192.168.1.74 node04
2、 设置Erlang Cookie
由于RabbitMQ依赖于erlang,集群间隔节点通信是通过Erlang Cookie进行的。通过rpm包安装的.erlang.cookie一般在/var/lib/rabbitmq/.erlang.cookie,通过源码安装的.erlang.cookie一般在$HOME/.erlang.cookie
由于这个文件权限是 600,所以需要先修改所有mq节点中的该文件权限为 600
$ chmod 600 /var/lib/rabbitmq/.erlang.cookie
注意,设置700执行rabbitmqctl stop_app 时会报错
在node01上设置好后,分发到其它节点
$ scp /var/lib/rabbitmq/.erlang.cookie node02:`pwd`
$ scp /var/lib/rabbitmq/.erlang.cookie node03:`pwd`
3、detached启动mq
分别在每个节点,使用detached参数,后台启动
$ rabbitmqctl stop #如果mq在运行,先停止
$ rabbitmq-server -detached #后台守护模式启
4、组建集群
这里以node01为集群名字,让node02、node03去主动连接node01,通过此方式,将 node2、node3 与 node1 组成集群。
(1)分别在node02、node03上运行命令:
rabbitmqctl stop_app #停止
rabbitmqctl join_cluster rabbit@node01 #加入集群
rabbitmqctl start_app #启动
此时node2 与 node3 便会自动连接node01, node2 与 node3 也会自动建立连接,三个节点便组成了集群
(2)如果要用做内存节点,则可以使用 --ram形式加入集群
rabbitmqctl join_cluster --ram rabbit@node01
(3)查看集群配置是否成功,成功如下:
[root@node01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node01 ...
[{nodes,[{disc,[rabbit@node01,rabbit@node02,rabbit@node03]}]},
{running_nodes,[rabbit@node01,rabbit@node02,rabbit@node03]},
{cluster_name,<<"rabbit@node01">>},
{partitions,[]},
{alarms,[{rabbit@node01,[]},{rabbit@node02,[]},{rabbit@node03,[]}]}]
5、设置镜像队列策略
在以上任意节点执行 $ rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
这行命令创建了一个策略,策略名称为ha-all,“^”为正则表达式,表示所有匹配所有队列名称,策略模式为 all 即复制到所有节点,包含新增节点。设置后,队列会被复制到各个节点,各个节点状态保持一致。至此就完成了高可用集群的搭建。
三、配置Haproxy
HAProxy是一个基于TCP和HTTP的应用代理中间件,其 支持虚拟主机、高可用性、提供一系列负载均衡策略,特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。接下来用Haproxy做负载均衡了
1、安装Haproxy
$ yum -y install Haproxy
2、配置负载策略
编辑Haproxy配置文件 $ vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 # 最大连接数,默认4000
user haproxy # 默认用户
group haproxy # 默认用户组
daemon # 创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon
# Default SSL material locations
# ca-base /etc/ssl/certs
# crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
# ssl-default-bind-options no-sslv3
###########默认配置#########
defaults
log global
mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog # 采用http日志格式
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,
# 需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;
# 官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用
# 该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
timeout connect 5000 # 连接超时时间
timeout client 50000 # 客户端连接超时时间
timeout server 50000 # 服务器端连接超时时间
option httpclose # 每次请求完毕后主动关闭http通道
option httplog # 日志类别http日志格式
#option forwardfor # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
timeout connect 10000 # default 10 second timeout if a backend is not found
maxconn 60000 # 最大连接数
retries 3 # 3次连接失败就认为服务不可用,也可以通过后面设置
# errorfile 400 /yougo/haproxy/home/errors/400.http
# errorfile 403 /yougo/haproxy/home/errors/403.http
# errorfile 408 /yougo/haproxy/home/errors/408.http
# errorfile 500 /yougo/haproxy/home/errors/500.http
# errorfile 502 /yougo/haproxy/home/errors/502.http
# errorfile 503 /yougo/haproxy/home/errors/503.http
# errorfile 504 /yougo/haproxy/home/errors/504.http
##########################开启统计页面##########################################
listen stats
bind 0.0.0.0:8888 #监听端口
stats refresh 10s #统计页面自动刷新时间
stats uri /haproxy?stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:123456 #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats admin if TRUE #当通过认证才可管理
listen rabbitmq_cluster
bind 0.0.0.0:8889 #rabbitmq集群调用的端口
option tcplog
mode tcp
option clitcpka 是否允许客户端发送tcp keepalive 包,这个和http 的keepalive 没有关系
timeout client 3000 # 客户端连接超时时间,3s超时
timeout server 3000 # 服务器端连接超时时间
balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数)
server node01 192.168.1.71:5672 check inter 5s rise 2 fall 3 #check inter 2000 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
server node02 192.168.1.72:5672 check inter 5s rise 2 fall 3
server node03 192.168.1.73:5672 check inter 5s rise 2 fall 3
参考:http://www.rabbitmq.com/clustering.html
参考:http://www.rabbitmq.com/ha.html
参考:https://www.cnblogs.com/telwanggs/p/7124832.html
参考:http://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html