《Linux运维实战:Centos7.6使用haproxy部署rabbitmq3.9.16高可用镜像模式集群》

Posted 东城绝神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Linux运维实战:Centos7.6使用haproxy部署rabbitmq3.9.16高可用镜像模式集群》相关的知识,希望对你有一定的参考价值。

一、集群架构

说明:对于消息的生产和消费者可以通过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
global
    log         192.168.1.194 local2 info

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     5000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    tcp
    log                     global
    option                  tcplog
    option                  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_cluster
    mode tcp
    bind 0.0.0.0:5672
    balance roundrobin
    timeout server 168h
    server  192.168.1.192 192.168.1.192:5672 check inter 1000 fall 3 rise 3
    server  192.168.1.193 192.168.1.193:5672 check inter 1000 fall 3 rise 3

#监听RabbitMQ管理页面
listen rabbitmq_admin
    mode http
    bind 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 2
    server 192.168.1.192 192.168.1.192:15672 check inter 1000 rise 2 fall 2
    server 192.168.1.193 192.168.1.193:15672 check inter 1000 rise 2 fall 2  

#监听HAProxy的管理页面
listen stats
    mode tcp
    bind 0.0.0.0:15000 #监听端口
    stats enable 
    stats realm Haproxy Manager #统计页面密码框上提示文本
    stats hide-version #隐藏统计页面上HAProxy的版本信息
    stats uri /rabbitmq-stats #统计页面url
    stats 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系统运维指南》

以上是关于《Linux运维实战:Centos7.6使用haproxy部署rabbitmq3.9.16高可用镜像模式集群》的主要内容,如果未能解决你的问题,请参考以下文章

《Linux运维实战:Centos7.6基于ansible一键离线部署elasticsearch7.6.2容器版分布式集群》

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》

《Linux运维总结:Centos7.6使用yum安装rabbitmq3.9.16》

Linux系统运维与架构设计之文件管理

20170124L07-02-06老男孩linux运维实战培训-parted分区命令实战讲解

运维实战:Linux系统扩展oracle数据库所在的分区