高可用的RabbitMQ配置
高可用的Rabbitmq的镜像集群的部署教程
三台机器:
mq1: 192.168.86.157
mq2: 192.168.86.158
mq3: 192.168.86.159
1.配置IP(三台机器)
#分别在各自的机器中配置host ip
#例如 mq1
vim /etc/hosts
#添加以下内容
192.168.86.157 mq1
192.168.86.158 mq2
192.168.86.159 mq3
192.168.86.160 mq4
2.环境的安装(三台机器)
#将需要安装的三个文件以及一个依赖库文件上传到相应的文件夹
#依次安装
rpm -ivh openssl-libs-1.0.2k-21.el7_9.x86_64.rpm --force
rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.7.18-1.el7.noarch.rpm
#复制配置文件
cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
#d打开配置文件rabbitmq.config
vim /etc/rabbitmq/rabbitmq.config
#61行的注释去掉 注意后面的逗号也要去掉
#开启rabbitmq的相关的插件
rabbitmq-plugins enable rabbitmq_management
#开启mqtt协议的插件
rabbitmq-plugins enable rabbitmq_mqtt
rabbitmq-plugins enable rabbitmq_web_mqtt
# .启动RabbitMQ的服务
systemctl start rabbitmq-server
systemctl restart rabbitmq-server
systemctl stop rabbitmq-server
#查看服务状态(见下图:)
systemctl status rabbitmq-server
关闭三台机器的防火墙
systemctl disable firewalld
systemctl stop firewalld.service
同步三台机器的erlang的cookie
#在机器mq1上执行
scp /var/lib/rabbitmq/.erlang.cookie root@mq2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@mq3:/var/lib/rabbitmq/
#查看cookie是否一致:
node1: cat /var/lib/rabbitmq/.erlang.cookie
node2: cat /var/lib/rabbitmq/.erlang.cookie
node3: cat /var/lib/rabbitmq/.erlang.cookie
# 4.后台启动rabbitmq所有节点执行如下命令,启动成功访问管理界面:
systemctl stop rabbitmq-server
rabbitmq-server -detached
# 5.在node2和node3执行加入集群命令:
1.关闭 rabbitmqctl stop_app
2.加入集群 rabbitmqctl join_cluster rabbit@mq1
3.启动服务 rabbitmqctl start_app
# 6.查看集群状态,任意节点执行:
rabbitmqctl cluster_status
# 7.如果出现如下显示,集群搭建成功:
Cluster status of node rabbit@mq3 ...
[{nodes,[{disc,[rabbit@mq1,rabbit@mq2,rabbit@mq3]}]},
{running_nodes,[rabbit@mq1,rabbit@mq2,rabbit@mq3]},
{cluster_name,<<"rabbit@mq1">>},
{partitions,[]},
{alarms,[{rabbit@mq1,[]},{rabbit@mq2,[]},{rabbit@mq3,[]}]}]
#然后在浏览器输入192.168.86.157:15672
192.168.86.157:15672
#登录的账户和密码均为guest 该账户拥有最高的管理员权限
guest
#但是这个时候的集群 还只是主从+集群的方式工作 如果主节点宕机,附属节点无法继续完成主节点的工作,两个附属节点只做了主节点的数据的备份,但是没有对主节点的队列进行备份,所以如果主节点宕机,附属节点还是会有队列的信息,但是并没有保存队列的数据信息。无法自动的进行代替主节点。
#下面将会进行镜像集群的搭建
# 0.策略说明
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
all:表示在集群中所有的节点上进行镜像
exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params:ha-mode模式需要用到的参数
ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级
# 1.查看当前策略
rabbitmqctl list_policies
# 2.添加策略
rabbitmqctl set_policy ha-all '^ys' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
说明:策略正则表达式为 “^” 表示所有匹配所有队列名称 ^hello:匹配hello开头队列
# 3.删除策略
rabbitmqctl clear_policy ha-all
#安装配置Haproxy高可用负载均衡
#解压压缩包
#挂载机器的yum源
mkdir /mnt/cdrom
#挂载命令
mount /dev/sr0 /mnt/cdrom/
#编辑yum配置文件
cat >> /etc/yum.repos.d/CentOS-Media.repo <<EOF
#添加如下内容
[local]
name=local
baseurl=file:///mnt/cdrom
gpgcheck=0
enable=1
EOF
#将默认的yum源配置文件改名 使其失效
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back
yum makecache
#通过yum安装 haproxy
yum -y install haproxy
#查看详细信息
rpm -qi haproxy
#修改配置文件
vim /etc/haproxy/haproxy.cfg
### haproxy 监控页面地址是:http://IP:9188/hastatus
listen admin_stats
bind *:9100 #监听的地址和端口,默认端口1080
mode http #模式
option httplog
stats refresh 5s #页面自动刷新间隔,每隔5s刷新
stats uri /hastatus #访问路径,在域名后面添加/stats可以查看haproxy监控状态,默认为/haproxy?stats
stats realm welcome login\ Haproxy #提示信息,空格之前加\
stats auth guest:guest #登陆用户名和密码
stats hide-version #隐藏软件版本号
stats admin if TRUE #当通过认证才可管理
### rabbitmq 集群配置,转发到
listen rabbitmqcluster
bind *:1884
option tcplog
mode http
balance roundrobin
server mq1 192.168.86.157:1884 check inter 2000 rise 2 fall 3 weight 1 #节点一
server mq2 192.168.86.158:1884 check inter 2000 rise 2 fall 3 weight 1 #节点二
server mq3 192.168.86.159:1884 check inter 2000 rise 2 fall 3 weight 1
#指定配置文件
haproxy -f /etc/haproxy/haproxy.cfg -c
#检查配置文件格式
haproxy -c -f /etc/haproxy/haproxy.cfg
#启动haproxy
haproxy -f /etc/haproxy/haproxy.cfg
#查看状态
service haproxy status
#添加开机自启动
cat <<eof>>/etc/rc.d/rc.local
haproxy -f /etc/haproxy/haproxy.cfg
eof
vim /etc/sysctl.conf #修改内核参数
net.ipv4.ip_nonlocal_bind = 1 #没有就新增此条记录
#访问192.168.86.157:9100/hastatus
#账户 guest 密码 guest