RabbitMQ集群搭建
Posted Lossdate
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ集群搭建相关的知识,希望对你有一定的参考价值。
一、集群搭建
-
环境搭建
B:192.168.200.139
C:192.168.200.140
D:192.168.200.141
配置/etc/hostsvi /etc/hosts 192.168.200.139 nodeB 192.168.200.140 nodeC 192.168.200.141 nodeD
#重启网络 systemctl restart network setenforce 0 #重启 init 6 #关闭防火墙 systemctl stop iptables systemctl stop firewalld systemctl disable firewalld.service
在BCD四个虚拟机上安装RabbitMQ
-
拷贝.erlang.cookie到其它两个的相应目录
如果没有该文件,手动创建 /var/lib/rabbitmq/.erlang.cookie ,生成Cookie字符串,或者启 动一次RabbitMQ自动生成该文件
生产中推荐使用第三方工具生成
我首先在B上启动单机版RabbitMQ,以生成Cookie文件:cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.16/sbin/ rabbitmq-server -detached cd /var/lib/rabbitmq ls -a
就可以看到.erlang.cookie
开始准备同步 .erlang.cookie 文件。RabbitMQ的集群依赖Erlang的分布式特性,需要保持 Erlang Cookie一致才能实现集群节点的认证和通信
接着拷贝到C和D的当前目录下scp .erlang.cookie root@nodeC:/var/lib/rabbitmq/ scp .erlang.cookie root@nodeD:/var/lib/rabbitmq/
-
修改C和D上该文件的所有者为rabbitmq:rabbitmq
ll -a chown rabbitmq:rabbitmq .erlang.cookie
-
也启动C和D
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.16/sbin/ rabbitmq-server -detached
-
将C和D这两个节点加入到集群中
#停止Erlang VM上运行的RabbitMQ应用,保持Erlang VM的运行 rabbitmqctl stop_app #移除当前RabbitMQ虚拟主机中的所有数据:重置 rabbitmqctl reset #将当前RabbitMQ的主机加入到rabbit@nodeB这个虚拟主机的集群中。一个节点也是集群。 rabbitmqctl join_cluster rabbit@nodeB #启动当前Erlang VM上的RabbitMQ应用 rabbitmqctl start_app
rabbit@nodeB表示RabbitMQ节点名称,
默认前缀就是 rabbit , @ 之后是当前虚拟主机所在的物理主机 hostname
join_cluster默认是使用disk模式,后面可以加入参数–ram启用内存模式
在nodeB查看集群状态,可以看到nodeC和nodeD已加入集群
-
添加用户
三台机器启动插件rabbitmq-plugins enable rabbitmq_management
在任意一个机子
rabbitmqctl add_user root 123456 rabbitmqctl set_permissions --vhost "/" root ".*" ".*" ".*" rabbitmqctl set_user_tags --vhost "/" root administrator
-
登入
访问http://192.168.200.139:15672/
登入
-
修改集群名称和查看集群状态
#修改集群名称(任意节点执行都可以) rabbitmqctl set_cluster_name #查看集群状态(任意节点执行都可以) rabbitmqctl cluster_status
-
移除集群
#将虚拟主机(RabbitMQ的节点)rabbit@nodeD从集群中移除, #但是rabbit@nodeD还保留集群信息 #还是会尝试加入集群,但是会被拒绝。可以重置rabbit@nodeD节点。 rabbitmqctl forget_cluster_node rabbit@nodeD
二、镜像集群配置
- 简介
RabbitMQ中队列的内容是保存在单个节点本地的(声明队列的节点)
跟交换器和绑定不同,它 们是对于集群中所有节点的
如此,则队列内容存在单点故障,解决方式之一就是使用镜像队列在多个节点上拷贝队列的副本
- 启用镜像队列
#对/节点配置镜像队列,使用全局复制 rabbitmqctl set_policy ha-all "^" '"ha-mode":"all"' #配置过半(N/2 + 1)复制镜像队列 rabbitmqctl set_policy ha-halfmore "queueA" '"ha-mode":"exactly", "haparams":2' #指定优先级,数字越大,优先级越高 rabbitmqctl set_policy --priority 1 ha-all "^" '"ha-mode":"all"'
三、负载均衡-HAProxy
- 简介
nodeA:192.168.200.136
将客户端的连接和操作的压力分散到集群中的不同节点,防止单个或几台服务器压力过大成为访问的瓶颈,甚至宕机 - 安装
在nodeA上安装HAProxy
haproxy默认在/usr/sbin/haproxy,且会自动创建配置文 件/etc/haproxy/haproxy.cfgyum -y install haproxy
- 配置haproxy.cfg
配置详细:#查看uid, 用于配置 id haproxy #配置 vim /etc/haproxy/haproxy.cfg
global log 127.0.0.1 local0 info #服务器最大并发连接数;如果请求的连接数高于此值,将其放入请求队列,等待其它连接被释放; maxconn 5120 #chroot /tmp #指定用户 uid 188 #指定组 gid 188 #让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能 #当然,也可以在命令行中以“-db”选项将其禁用; daemon #debug参数 quiet #指定启动的haproxy进程的个数,只能用于守护进程模式的haproxy; #默认只启动一个进程, #鉴于调试困难等多方面的原因,在单进程仅能打开少数文件描述符的场景中才使用多进程模式; #nbproc 20 nbproc 1 pidfile /var/run/haproxy.pid defaults log global #tcp:实例运行于纯TCP模式,第4层代理模式,在客户端和服务器端之间将建立一个全双工的连接, #且不会对7层报文做任何类型的检查; #通常用于SSL、SSH、SMTP等应用; mode tcp option tcplog option dontlognull retries 3 option redispatch maxconn 2000 #contimeout 5s timeout connect 5s #客户端空闲超时时间为60秒则HA 发起重连机制 timeout client 60000 #服务器端链接超时时间为15秒则HA 发起重连机制 timeout server 15000 listen rabbitmq_cluster #VIP,反向代理到下面定义的三台Real Server bind 192.168.200.136:5672 #配置TCP模式 mode tcp #简单的轮询 balance roundrobin #rabbitmq集群节点配置 # nter 每隔五秒对mq集群做健康检查,2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制 server rabbitmqNode1 192.168.200.139:5672 check inter 5000 rise 2 fall 2 server rabbitmqNode2 192.168.200.140:5672 check inter 5000 rise 2 fall 2 server rabbitmqNode3 192.168.200.141:5672 check inter 5000 rise 2 fall 2 #配置haproxy web监控,查看统计信息 listen stats bind 192.168.200.136:9000 mode http option httplog #启用基于程序编译时默认设置的统计报告 stats enable #设置haproxy监控地址为http://192.168.200.136:9000/rabbitmq-stats stats uri /rabbitmq-stats #每5s刷新一次页面 stats refresh 5s
- 启动
haproxy -f /etc/haproxy/haproxy.cfg
- 查看
访问http://192.168.200.136:9000/rabbitmq-stats
- 关闭
kill -9 <pid>
以上是关于RabbitMQ集群搭建的主要内容,如果未能解决你的问题,请参考以下文章