RabbitMQ集群搭建
- 集群方案的原理
- 单机多实例部署
[root@atguigu ~]# systemctl start rabbitmq-server.service [root@atguigu ~]# systemctl status rabbitmq-server.service #停止rabbitmq服务 [root@atguigu ~]# systemctl stop rabbitmq-server.service #启动三个节点做集群演示: [root@atguigu ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" rabbitmq-server -detached [root@atguigu ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" rabbitmq-server -detached [root@atguigu ~]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" rabbitmq-server -detached #启动三个节点后,分别访问三个节点,后台管理页面,看看是否OK. #停止服务命令: rabbitmqctl -n rabbit1 stop rabbitmqctl -n rabbit2 stop rabbitmqctl -n rabbit3 stop #rabbit1操作作为主节点: [root@atguigu ~]# rabbitmqctl -n rabbit1 stop_app [root@atguigu ~]# rabbitmqctl -n rabbit1 reset [root@atguigu ~]# rabbitmqctl -n rabbit1 start_app #rabbit2操作为从节点: [root@atguigu ~]# rabbitmqctl -n rabbit2 stop_app [root@atguigu ~]# rabbitmqctl -n rabbit2 reset [root@atguigu ~]# rabbitmqctl -n rabbit2 join_cluster rabbit1 [root@atguigu ~]# rabbitmqctl -n rabbit2 start_app #rabbit3操作为从节点: [root@atguigu ~]# rabbitmqctl -n rabbit3 stop_app [root@atguigu ~]# rabbitmqctl -n rabbit3 reset [root@atguigu ~]# rabbitmqctl -n rabbit3 join_cluster rabbit1 [root@atguigu ~]# rabbitmqctl -n rabbit3 start_app #查看集群状态: [root@atguigu ~]# rabbitmqctl -n rabbit1 cluster_status
- 集群管理:
#将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点。 rabbitmqctl join_cluster {cluster_node} [–ram] #显示集群的状态。 rabbitmqctl cluster_status #修改集群节点的类型。在这个命令执行前需要停止RabbitMQ应用。 rabbitmqctl change_cluster_node_type {disc|ram} #将节点从集群中删除,允许离线执行。 rabbitmqctl forget_cluster_node [–offline] #在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了。 rabbitmqctl update_cluster_nodes {clusternode} #取消队列queue同步镜像的操作。 rabbitmqctl cancel_sync_queue [-p vhost] {queue} #设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。 rabbitmqctl set_cluster_name {name}
- 镜像集群配置
- rabbitmqctl set_policy my_ha "^"" '
- Name:策略名称
- Pattern:匹配的规则,如果是匹配所有的队列,是^.
- Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档。
- 负载均衡-HAProxy
- HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。
- 安装HAProxy
//下载依赖包 yum install gcc vim wget //上传haproxy源码包 //解压 tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local //进入目录、进行编译、安装 cd /usr/local/haproxy-1.6.5 make TARGET=linux31 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy mkdir /etc/haproxy //赋权 groupadd -r -g 149 haproxy useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy //创建haproxy配置文件 vim /etc/haproxy/haproxy.cfg
- 配置HAProxy
#全局配置 global #日志输出配置,所有日志都记录在本机,通过local0输出 log 127.0.0.1 local0 info #最大连接数 maxconn 5120 #改变当前的工作目录 chroot /usr/local/haproxy #以指定的UID运行haproxy进程 uid 99 #以指定的GID运行haproxy进程 gid 99 #以守护进程方式运行haproxy daemon quiet nbproc 20 #当前进程PID文件 pidfile /var/run/haproxy.pid #默认配置 defaults #应用全局的日志配置 log global #默认的模式mode{tcp|http|health} mode tcp #日志类别 option tcplog #不记录检查检查日志信息 option dontlognull #3次失败则认为服务不可用 retries 3 option redispatch #每个进程可用的最大连接数 maxconn 2000 #连接超时 contimeout 5s #客户端超时 clitimeout 60s #服务端超时 srvtimeout 15s #绑定配置 listen rabbitmq_cluster bind 127.0.0.1:5677 #配置TCP模式 mode tcp #balance url_param userid #balance url_param session_id check_post 64 #balance hdr(User-Agent) #balance hdr(host) #balance hdr(Host) use_domain_only #balance rdp-cookie #balance leastconn #balance source //ip #简单的轮询 balance roundrobin #server rabbit1 定义服务内部标识, #127.0.0.1:5672 服务连接IP和端口, #check inter 5000 定义每隔多少毫秒检查服务是否可用, #rise 2 服务故障后需要多少次检查检查才能被再次确认可用, #fall 2 经历多次失败的检查检查后,haproxy才会停止使用此服务 #weight 1 定义服务权重 server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 2 weight 1 server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 2 weight 1 server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 2 weight 1 #haproxy监控页面地址 listen stats bind 192.168.137.130:8100 mode http option httplog stats enable stats uri /rabbitmq-stats stats refresh 5s
- 启动HAproxy负载
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
- 查看haproxy进程状态
ps -ef | grep haproxy
- 访问如下地址对mq节点进行监控:http://192.168.137.130:8100/rabbitmq-stats