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

news2024/9/30 9:34:59

一、集群架构

说明:对于消息的生产和消费者可以通过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系统运维指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 52. 两个链表的第一个公共节点

摘要 剑指 Offer 52. 两个链表的第一个公共节点 一、两个链表的第一个公共节点解析 使用双指针的方法,可以将空间复杂度降至 O(1)。只有当链表 headA headB都不为空时,两个链表才可能相交。因此首先判断链表 headA和 headB是否为空,如果其…

[watevrCTF 2019]Timeout 题解

事不一而理有定在,犹百川万折,必归于海。 ——《容斋随笔》 1.查壳 是一个64位像是ELF的文件 无壳子 2.拖入64位IDA IDA分析失败 是一个.com文件 COM格式文件是一种简单的可执行文件。在迪吉多公司于20世纪70年代推出的操作系统中,.COM被用…

c/c++开发,无可避免的函数指针使用案例

一、函数指针简介 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。例如: char* (*pf1)(char * p1,char *p2); 这是一个函数指针,其…

javassm超市在线配送管理系统

为了解决用户便捷地在网上购物,本文设计和开发了一个超市管理系统。本系统是基于web架构设计,SSM框架 ,使用Mysql数据库管理,综合采用JSP模式来完成系统的相关功能。主要实现了管理员与用户的注册与登陆,个人中心、用户…

[标准库]STM32F103R8T6 高级定时器--PWM输出和带死区互补PWM输出

前言 STM32F103系列的MCU,相比普通的51单片机,在输出硬件PWM这个功能上要强不少,两者实现的方式都类似,都是通过一个定时器来启用硬件PWM输出,不过在输出PWM通道的数量上,32F103要强上不少。仅通过一个高级…

5.Redis 实现点赞 优化登陆(验证码 token..)

Redis(1)简介Redis 是一个高性能的 key-value 数据库原子 – Redis的所有操作都是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。非关系形数据库数据全部存在内存中,性能高。(2&#…

Docker中安装MySQL 8

前言 上一期在Windows中安装好了Docker环境,这一期在Docker中完成MySQL 8安装和配置。 启动Docker Desktop后在cmd窗口中输入docker -v即可查看到安装的docker版本 Docker启动容器的原理流程 Docker启动一个容器(应用)时,大致原理流程如下图&#x…

安全技术与防火墙工具iptables

目录 安全技术 安全技术 补充防水墙 防火墙的分类 按保护范围划分 按实现方式划分 按网络协议划分 iptables iptables的五表五链 三种报文流向 iptables基本语法 数据包常见的控制类型 iptables的基本选项 显示扩展模块 保存规则 持久保存规则 加载规则 开机自…

上岸!轻轻松松打工!Python数据分析证

俗话说的好,活到老学到🤔这个大内卷的时代掌握一项技能还是很重要🙈的,这不趁着下班时间的功夫,偷偷去考了个证 就是一个不论含金量,还是对实习和求职都非常有益的一个双协会认证的高含金量证书~BDA数据分析…

电影订票网站的设计与开发

技术:Java、JSP等摘要:随着科技的发展,时代的进步,互联网已经成为了人们生活中不可缺少的一部分,网上购物已然是一种时代的象征。纵观市场,电影行业的发展尤为迅速,电影种类和数量的增多导致客流…

Portraiture全新4.0最新版人像磨皮插件更新内容

Portraiture是一款智能磨皮插件,为Photoshop和Lightroom添加一键磨皮美化功能,快速对照片中皮肤、头发、眉毛等部位进行美化,无需手动调整,大大提高P图效率。全新4版本,升级AI算法,并独家支持多人及全身模式…

ROS小车研究笔记2/11/2023:使用ssh远程登录小车

1 SSH简介: SSH全称Secure Shell,是一种建立在应用层的安全网络协议。其安全性又非对称加密(RSA)实现 对称加密:使用同一密钥对信息进行加密和解密,但是一旦该密钥被窃取就会威胁通信安全 非对称加密:使用公钥和私钥。…

【Java基础】018 -- 面向对象阶段项目下(拼图小游戏扩展)

文章目录切换游戏图片的业务分析:1,所需要的技术点2,分析业务逻辑项目实现步骤:添加组件绑定事件:代码实现登录界面的业务分析:1,所需要的技术点2,分析业务逻辑项目实现步骤:主界面设…

Day885.NextKeyLock加锁规则 -MySQL实战

NextKeyLock加锁规则 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于NextKeyLock加锁规则的内容。 加锁规则前提说明&#xff1a; MySQL 后面的版本可能会改变加锁策略&#xff0c;所以这个规则只限于截止到现在的最新版本&#xff0c;即 5.x 系列 <5.7.24&#…

搭建流媒体推流/拉流服务(RTMP/RTSP/HLS/HTTP-FLV)

一、什么是流媒体流媒体&#xff08;streaming media&#xff09;是指将一连串的媒体数据压缩后&#xff0c;经过网上分段发送数据&#xff0c;在网上即时传输影音以供观赏的一种技术与过程&#xff0c;此技术使得数据包得以像流水一样发送&#xff1b;如果不使用此技术&#x…

ffmpeg转码转封装小工具开发

如下图所示&#xff0c;是本人开发的一个转码转封装小工具 其中目标文件视频编码格式支持&#xff1a;H264&#xff0c;H265&#xff0c;VP8&#xff0c;VP9。 目标文件封装格式支持&#xff1a;mp4,mkv,avi,mov,flv。 目标文件音频编码格式支持两个&#xff0c;COPY和AAC&am…

安全寒假作业nginx反向代理+负载均衡上传webshell重难点+apache漏洞

1.应用场景 负载均衡作为现今解决web应用承载大流量访问问题的一种方案&#xff0c;在真实环境中得到广泛的部署。实现负载均衡的方式有很多种&#xff0c;比如 DNS 方式、HTTP 重定向方式、IP 负载均衡方式、反向代理方式等等。 比如基于dns的负载均衡&#xff1a; 当然还有…

LTD212次升级 | 官网社区支持PC端展示 • 官网新增证件查询应用,支持条形码扫码查询

1、新增证件查询应用&#xff0c;支持条形码扫码查询&#xff1b; 2、新增用户社区PC端功能&#xff1b; 01证件查询应用 1、新增证件查询应用功能 支持证件信息录入、打印功能&#xff0c;支持条形码扫码识别。 后台管理操作路径&#xff1a;官微中心 - 应用 - 证件查询 …

这才是CSDN最系统完整的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

linux head命令(head指令)(获取文件或管道输出结果前n行,默认前10行)与sed命令区别

head命令是一个在Linux系统中常用的命令&#xff0c;用于读取文件的前几行&#xff08;默认读取前10行&#xff09; 文章目录使用方法读取文件的前10行&#xff1a;head filename读取文件的前n行&#xff1a;head -n行数 filename读取多个文件的前几行&#xff1a;head -n 行数…