《Linux运维实战:Centos7.6使用haproxy部署rabbitmq3.9.16高可用镜像模式集群》
创始人
2024-05-25 12:42:38

一、集群架构

说明:对于消息的生产和消费者可以通过HAProxy的软负载将请求分发至RabbitMQ集群中的Node1~Node7节点,其中Node8~Node10的三个节点作为磁盘节点保存集群元数据和配置信息。
在这里插入图片描述


二、环境信息

环境信息如下:

主机IP操作系统软件版本CPU架构主机名说明
192.168.1.191Centos7.6服务名称3.9.16x86_64rabbit01
192.168.1.192Centos7.6rabbitmq3.9.16x86_64rabbit02
192.168.1.193Centos7.6rabbitmq3.9.16x86_64rabbit03
192.168.1.194Centos7.6haproxy1.5.18x86_64haproxy

三、系统环境

说明:以下操作需分别在Rabbitmq所有节点服务器上操作。

1、修改主机名和/etc/hosts文件

#1、设置主机名(主机192.168.1.191上执行)
[root@localhost ~]# hostnamectl set-hostname rabbit01#2、设置主机名(主机192.168.1.192上执行)
[root@localhost ~]# hostnamectl set-hostname rabbit02#3、设置主机名(主机192.168.1.193上执行)
[root@localhost ~]# hostnamectl set-hostname rabbit03#3、设置主机名(主机192.168.1.194上执行)
[root@localhost ~]# hostnamectl set-hostname haproxy#4、修改hosts文件(主机192.168.1.191、192.168.1.192、192.168.1.193上执行)
[root@localhost ~]# vim /etc/hosts
192.168.1.191 rabbit01
192.168.1.192 rabbit02
192.168.1.193 rabbit03
192.168.1.194 haproxy

2、关闭防护墙和selinux

#主机192.168.1.191、192.168.1.192、192.168.1.193、192.168.1.194上执行,需重启服务器
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# sed -i 's#enforcing#SELINUX=disabled#g' /etc/selinux/config
[root@localhost ~]# sed -i 's#enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux

3、设置进程数

说明:root账号下ulimit -u出现的max user processes的值默认是/proc/sys/kernel/threads-max的值/2,即系统线程数的一半。普通账号下ulimit -u出现的max user processes的值默认是/etc/security/limits.d/20-nproc.conf文件中定义的大小。

#主机192.168.1.191、192.168.1.192、192.168.1.193上执行
#1.在/etc/security/limits.conf文件里添加如下内容
* soft nproc 65535
* hard nproc 65535
#注意:修改这里,普通用户max user process值是不生效的,需要修改/etc/security/limits.d/20-nproc.conf文件中的值。

4、设置文件描述符数

#主机192.168.1.191、192.168.1.192、192.168.1.193上执行
#1.在/etc/security/limits.conf文件里添加如下内容
* soft nofile 65535
* hard nofile 65535

如下图所示,则表示进程数和文件描述符数设置成功!
在这里插入图片描述


四、集群部署

4.1、下载安装软件包

说明:以下操作需分别在Rabbitmq所有节点服务器上操作。

[root@rabbit01~]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
[root@rabbit01~]# yum install erlang-23.3.4.11-1.el7.x86_64 -y
[root@rabbit01~]# yum install socat logrotate -y
[root@rabbit01~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.16/rabbitmq-server-3.9.16-1.el7.noarch.rpm
[root@rabbit01~]# yum install rabbitmq-server-3.9.16-1.el7.noarch.rpm -y

4.2、新增变量文件

说明:以下操作需分别在Rabbitmq所有节点服务器上操作。

#1、创建数据及日志目录
[root@rabbit01~]# mkdir /data/basic-data/rabbitmq-server/{data,logs} -pv#2、修改rabbitmq-env.con文件
[root@rabbit01~]# vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/basic-data/rabbitmq-server/data
RABBITMQ_LOG_BASE=/data/basic-data/rabbitmq-server/logs#3、目录授权
[root@rabbit01~]# chown -R rabbitmq:rabbitmq /data/basic-data/rabbitmq-server -R

注明:默认配置在/etc/rabbitmq目录下,如果不存在直接创建就可以,RabbitMQ应用会自动加载;rabbitmq-env.conf包含重写RabbitMQ脚本和CLI工具中内置的默认值的环境变量。


4.3、修改配置文件

说明:以下操作需分别在Rabbitmq所有节点服务器上操作。

[root@rabbit01 ~]# vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.9.16/plugins/rabbit-3.9.16/ebin/rabbit.app
{vm_memory_high_watermark, 0.7},

4.4、同步cookie文件

说明:将rabbit01机器的.erlang.cookie文件复制到rabbit02和rabbit03机器(此文件在rabbitmq服务启动时自动生成),因为节点之间需要通过此文件来判断是否允许交流(判断是否属于集群内部节点),如果三台机器的此文件内容不一致则集群无法启动成功。此文件内容一般是由不超过255个数字或字母组成的字符串构成。

#1、启动rabbit01(192.168.1.191)节点的rabbitmq-server服务
[root@rabbit01 ~]# systemctl start rabbitmq-server#2、将rabbit01机器的.erlang.cookie文件复制到rabbit02和rabbit03机器上
[root@rabbit01 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@rabbit02:/var/lib/rabbitmq/
[root@rabbit01 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@rabbit03:/var/lib/rabbitmq/#3、目录授权
[root@rabbit02 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
[root@rabbit03 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie#4、分别启动rabbit02节点(192.168.1.192)和rabbit03(192.168.1.193)节点的rabbitm-server服务
[root@rabbit02 ~]# systemctl start rabbitmq-server
[root@rabbit03 ~]# systemctl start rabbitmq-server

4.4、将节点加入集群中

说明:分别在rabbit02节点和rabbit03节点上执行。

#1、停止服务
#注:这里的参数stop_app和stop是不一样的,stop是停掉服务,stop_app是停掉这个节点,但是并没有停止rabbitmq依赖的erlang进程
[root@rabbit02 ~]# rabbitmqctl stop_app#2、加入集群,--ram是以内存方式加入
[root@rabbit02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbit01#3、启动服务
[root@rabbit02 ~]# rabbitmqctl start_app

如下图所示:
在这里插入图片描述


4.4、配置镜像队列

说明:以下操作只需在其中一个节点上操作即可,这里默认操作在rabbit01节点。

# 所有队列exchangess 或者 queue都为镜像模式
# ^'表示所有匹配所有队列名称
[root@rabbit01 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

4.5、添加用户授权

说明:以下操作只需在其中一个节点上操作即可,这里默认操作在rabbit01节点。

# 1、创建用户并设置密码
[root@rabbit01 ~]# rabbitmqctl add_user admin admin123#2、赋予其administrator角色
[root@rabbit01 ~]# rabbitmqctl set_user_tags admin administrator#3、设置权限
[root@rabbit01 ~]# rabbitmqctl  set_permissions -p "/" admin '.*' '.*' '.*'

4.5、开启管理插件

说明:以下操作需分别在Rabbitmq所有节点服务器上操作。

[root@rabbit01 ~]# rabbitmq-plugins enable rabbitmq_management

五、负载均衡

说明:以下操作只需要在haproxy节点操作即可。

1、安装haproxy

说明:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。HAProxy支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。为了实现RabbitMQ集群的软负载均衡,这里可以选择HAProxy。

[root@haproxy ~]# yum install haproxy -y

2、配置haproxy

说明:在当前rabbitmq镜像集群汇总,rabbit01节点为磁盘节点,rabbit02和rabbit03节点为内存节点,为了更好的提高性能,对于消息的生产和消费者可以通过HAProxy的软负载将请求分发至RabbitMQ集群中的rabbit02和rabbit03节点,其中rabbit01节点作为磁盘节点保存集群元数据和配置信息。

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
globallog         192.168.1.194 local2 infochroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     5000user        haproxygroup       haproxydaemonstats socket /var/lib/haproxy/statsdefaultsmode                    tcplog                     globaloption                  tcplogoption                  dontlognull#打开http协议中服务器端关闭功能,使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录option http-server-close# option forwardfor       except 127.0.0.0/8#当与上游服务器的会话失败(服务器故障或其他原因)时,把会话重新分发到其他健康的服务器上,当原来故障的服务器恢复时,会话又被定向到已恢复的服务器上。option                  redispatch#向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用retries                 3#客户端发送http请求的超时时间timeout http-request    10s#当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中,timeout queue定义放入这个队列的超时时间timeout queue           1m#haproxy与后端服务器连接超时时间,如果在同一个局域网可设置较小的时间。timeout connect         10s#定义客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间timeout client          1m#定义haproxy与上游服务器非活动连接的超时时间timeout server          1m#设置新的http请求连接建立的最大超时时间,时间较短时可以尽快释放出资源,节约资源timeout http-keep-alive 10s#健康检测的时间的最大超时时间timeout check           10s#最大并发连接数maxconn                 3000#监听Rabbitmq业务
listen rabbitmq_clustermode tcpbind 0.0.0.0:5672balance roundrobintimeout server 168hserver  192.168.1.192 192.168.1.192:5672 check inter 1000 fall 3 rise 3server  192.168.1.193 192.168.1.193:5672 check inter 1000 fall 3 rise 3#监听RabbitMQ管理页面
listen rabbitmq_adminmode httpbind 0.0.0.0:15672 #监听端口#check inter 1000 是检测心跳的频率,rise 2 是2次正确认为服务器可用,fall 3 是3次失败认为服务器不可用server 192.168.1.191 192.168.1.191:15672 check inter 1000 rise 2 fall 2server 192.168.1.192 192.168.1.192:15672 check inter 1000 rise 2 fall 2server 192.168.1.193 192.168.1.193:15672 check inter 1000 rise 2 fall 2  #监听HAProxy的管理页面
listen statsmode tcpbind 0.0.0.0:15000 #监听端口stats enable stats realm Haproxy Manager #统计页面密码框上提示文本stats hide-version #隐藏统计页面上HAProxy的版本信息stats uri /rabbitmq-stats #统计页面urlstats refresh 30s #统计页面自动刷新时间stats auth admin:admin@2022 #统计页面用户名和密码设置mode http #配置TCP模式option httplog

3、启动haproxy

[root@haproxy ~]# haproxy -f /etc/haproxy/haproxy.cfg

4、访问haproxy

说明:访问如下地址可以对rabbitmq节点进行监控:http://192.168.1.194:15000/rabbitmq-stats,如下图所示:
在这里插入图片描述

总结:客户端连接用192.168.1.194:5672去连接,查看rabbitmq的管理后台192.168.1.194:15672,192.168.1.194:15000/rabbitmq-stats查看haproxy的状态


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...