发布时间:2025-06-24 19:47:11  作者:北方职教升学中心  阅读量:284


因此,我们决定搭建自建服务。 节点只运行rabbitmq,所以内存阀值调制总在比的70%

rabbimtmq集群搭建

系统均使用CentOS7.9

节点名称节点IPrabbitmq版本docker/compose规格数据盘
pos_rabbitmq_1172.17.80.273.8-manageme18.03.1/1.29.24核8G50GB100GB
pos_rabbitmq_2172.17.80.323.8-manageme18.03.1/1.29.24核8G50GB100GB
pos_rabbitmq_1172.17.80.63.8-manageme18.03.1/1.29.24核8G50GB100GB
腾讯云申请三台实例节点

在这里插入图片描述

在这里插入图片描述

初始化三台实例主机
hostnamectl set-hostname POS_Rabbitmq_1bashinit.sh

init.sh 脚步内容,腾讯云内置了自己的yum源,可以不需要替换

yum clean all &&yum makecacheyum installtelnet curlwgetlrzsz net-tools vimunzipziphtoptree -yecho"=====系统环境初始化脚本====="echo"1.关闭防火墙与SELinux"systemctl stop firewalldsystemctl disable firewalldsetenforce 0sed-i'/SELINUX/{s/enforcing/disabled/}'/etc/selinux/configecho"2.设置系统最大打开文件数"if!grep"* soft nofile 65535"/etc/security/limits.conf &>/dev/null;thencat>>/etc/security/limits.conf <<EOF* soft nofile 65535   #软限制* hard nofile 65535   #硬限制EOFfiecho"3.系统内核优化"cat>>/etc/sysctl.conf <<EOFnet.ipv4.tcp_syncookies = 1             #防范SYN洪水攻击,0为关闭net.ipv4.tcp_max_tw_buckets = 20480     #此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死net.ipv4.tcp_max_syn_backlog = 20480    #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数net.core.netdev_max_backlog = 262144    #每个网络接口 接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目net.ipv4.tcp_fin_timeout = 20           #FIN-WAIT-2状态的超时时间,避免内核崩溃EOFecho"4.减少SWAP使用"echo"0">/proc/sys/vm/swappinessecho"5.安装系统性能分析工具及其他"yum install-ygcc makeautoconf vimsysstat net-tools iostat  lrzsz
格式化数据磁盘

数据盘默认给的是一个空盘需要直接格式化在挂载,在对安全数据要求比较严苛的环境中可以组RAID,这里直接格式化挂载

mkfs.ext4 /dev/vdb mount/dev/vdb /dataecho"/dev/vdb /data ext4 defaults 0 0">>/etc/fstabmount-amkdir-p/data/{apd,logs,prog,setup,backup,www}tee/data/README.md <<EOF/data/|-- apd         数据目录入口|-- backup      数据缓存目录|-- logs        日志目录|-- prog        应用程序目录|-- setup       程序下载目录|-- www         网站的存放目录EOF
安装docker,compose

三台实例主机安装docker、

需求分析基本情况

在进行RabbitMQ搭建时,我们基于现有的连接数据和业务需求进行了深入分析。docker-compose 版本18.03.1、

经过比较发现,即使选择腾讯云的最高规格配置,其Queue数也难以满足我们的需求,并且成本相对较高。
腾讯云:

节点规格2核4G4核12G8核24G16核32G
消息 TPS(生产+消费)600~10002100~35004200~70009000~15000
最大queue数量100200300800
最大连接数500250040008000
费用/月20283537693013434

自建服务:

序号节点1节点2节点3费用/月
业务新选型8核 16GB 100GB 5Mbps /标准型SA58核 16GB 100GB 5Mbps /标准型SA58核 16GB 100GB 5Mbps /标准型SA52485.2

需求变动:
前期功能业务体谅小基于目前的现状考虑,并且不影响未来的扩容的情况下的方案节点规格收容 4核8G内150GB硬(50G系统盘+100G数据盘)/标准型SA5,以及搭建实现和优化需求:
1、 集群建设
2、目前的统计数据显示,连接数为631,队列数为80418。pos_rabbitmq_2、为此,计划使用三台配置为8核 16GB 100GB 5Mbps / 标准型SA5的服务器节点,构建一个高可靠性集群,以确保系统的稳定性和可靠性。为了确保业务需求的顺利满足,我们需要在云产品和自建RabbitMQ消息队列服务之间做出选择。1.29.2

# step 1: 安装必要的一些系统工具sudoyum install-yyum-utils device-mapper-persistent-data lvm2 githtop# Step 2: 添加软件源信息sudoyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3sudosed-i's+download.docker.com+mirrors.aliyun.com/docker-ce+'/etc/yum.repos.d/docker-ce.repo# Step 4: 更新并安装Docker-CEsudoyum makecache fastyum -yinstalldocker-ce-18.03.1.ce# 安装指定版本的Docker-CE:# Step 1: 查找Docker-CE的版本:# yum list docker-ce.x86_64 --showduplicates | sort -r# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)# sudo yum -y install docker-ce-[VERSION]# Step 5: 设置开机自启并且启动docker服务systemctl enable--nowdocker

配置docker镜像加速器

mkdir-p/etc/dockertee/etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://rbmo5xql.mirror.aliyuncs.com"],  "log-driver":"json-file",  "bip": "192.168.1.5/24",  "log-opts": { "max-size": "50m", "max-file": "1" }}EOFsystemctl daemon-reload &&systemctl restart docker

下载docker-compose

cd/data/setupwget-Ohttps://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64mvdocker-compose-Linux-x86_64  docker-composechmod+x docker-composecp/data/setup/docker-compose /usr/local/bin/ln-sf/usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose-v# docker-compose version 1.29.2, build 5becea4c
部署rabbitmq集群

使用rabbitmq:3.8-management镜像,rabbitmq:3.8-management-apline包有高危漏洞[hub.docker.com官网查询](https://hub.docker.com/_/rabbitmq/tags?page=&page_size=&ordering=&name=3.8-managemen)
在这里插入图片描述

Step1 三台主机拉取rabbitmq镜像
[root@pos_rabbitmq_1 /data/setup/public/rabbitmq/mq_1]eth0 =172.17.80.27# docker pull rabbitmq:3.8-management[root@pos_rabbitmq_2 /data/setup/public/rabbitmq/mq_2]eth0 =172.17.80.32# docker pull rabbitmq:3.8-management[root@pos_rabbitmq_3 /data/setup/public/rabbitmq/mq_3]eth0 =172.17.80.6# docker pull rabbitmq:3.8-management
Step2 获取cookie

之前cookie可以在获取后写入docker-comose_env中定义,但是被该方法以被弃用,所以使用挂载的方式

# Step 2: 获取cookie[root@pos_rabbitmq_3 /data/setup/public/rabbitmq/mq_3]eth0 =172.17.80.6# cat > rabbitmq-cookie.sh << eofdockerrun -d--namemq rabbitmq:3.8-managementsleep10dockerexec-itmq cat/var/lib/rabbitmq/.erlang.cookie >.erlang.cookiechmod600.erlang.cookiedockerrm-fmqdockervolume pruneeof[root@pos_rabbitmq_3 /data/setup/public/rabbitmq/mq_3]eth0 =172.17.80.6# sh rabbitmq-cookie.sh
Step3 rabbitmq搭建集群配置文件

不适用guest用户,使用节点模式加入集群,rabbit@pos_rabbitmq_1,在docker- compose中必须定义pos_rabbitmq_1映射IP,否则无法解析找不到节点

[root@pos_rabbitmq_3 /data/setup/public/rabbitmq/mq_3]eth0 =172.17.80.6# cat > rabbitmq.conf << eofloopback_users.guest =falselisteners.tcp.default =5672cluster_formation.peer_discovery_backend =rabbit_peer_discovery_classic_configcluster_formation.classic_config.nodes.1 =rabbit@pos_rabbitmq_1cluster_formation.classic_config.nodes.2 =rabbit@pos_rabbitmq_2cluster_formation.classic_config.nodes.3 =rabbit@pos_rabbitmq_3eof
Step4 docker-compose

rabbitmq内存使用率默认占比总内存的40%,这里需要修改为70%,env中使用RABBITMQ_VM_MEMORY_HIGH_WATERMARK定义设置

pos_rabbitmq_1 中docker-compose.yaml文件

version: "3.6"services: pos_rabbitmq_1:    image: rabbitmq:3.8-management    restart: always    container_name: pos_rabbitmq_1  #每个节点名称修改即可network_mode: hostextra_hosts:      - "pos_rabbitmq_1:172.17.80.27"- "pos_rabbitmq_2:172.17.80.32"- "pos_rabbitmq_3:172.17.80.6"volumes:      - /etc/localtime:/etc/localtime:ro      - /data/apd/rabbitmq:/var/lib/rabbitmq      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf      - .erlang.cookie:/var/lib/rabbitmq/.erlang.cookie      - ../enabled_plugins:/etc/rabbitmq/enabled_plugins       - /data/logs/rabbitmq:/var/log/rabbitmq    environment:      - LANG=C.UTF-8      - RABBITMQ_DEFAULT_USER=root      - RABBITMQ_DEFAULT_PASS=xxxxxx      - RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.7#内存默认阀值设置

pos_rabbitmq_2 中docker-compose.yaml文件

version: "3.6"services: pos_rabbitmq_1:    image: rabbitmq:3.8-management    restart: always    container_name: pos_rabbitmq_2  #每个节点名称修改即可network_mode: hostextra_hosts:      - "pos_rabbitmq_1:172.17.80.27"- "pos_rabbitmq_2:172.17.80.32"- "pos_rabbitmq_3:172.17.80.6"volumes:      - /etc/localtime:/etc/localtime:ro      - /data/apd/rabbitmq:/var/lib/rabbitmq      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf      - .erlang.cookie:/var/lib/rabbitmq/.erlang.cookie      - ../enabled_plugins:/etc/rabbitmq/enabled_plugins       - /data/logs/rabbitmq:/var/log/rabbitmq    environment:      - LANG=C.UTF-8      - RABBITMQ_DEFAULT_USER=root      - RABBITMQ_DEFAULT_PASS=xxxxxx      - RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.7

pos_rabbitmq_3 中docker-compose.yaml文件

version: "3.6"services: pos_rabbitmq_1:    image: rabbitmq:3.8-management    restart: always    container_name: pos_rabbitmq_3  #每个节点名称修改即可network_mode: hostextra_hosts:      - "pos_rabbitmq_1:172.17.80.27"- "pos_rabbitmq_2:172.17.80.32"- "pos_rabbitmq_3:172.17.80.6"volumes:      - /etc/localtime:/etc/localtime:ro      - /data/apd/rabbitmq:/var/lib/rabbitmq      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf      - .erlang.cookie:/var/lib/rabbitmq/.erlang.cookie      - ../enabled_plugins:/etc/rabbitmq/enabled_plugins       - /data/logs/rabbitmq:/var/log/rabbitmq    environment:      - LANG=C.UTF-8      - RABBITMQ_DEFAULT_USER=root      - RABBITMQ_DEFAULT_PASS=xxxxxx      - RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.7
Step5 启动集群,启动完成后逐步启动过mq2,mq3
# Step 4: 启动集群,启动完成后逐步启动过mq2,mq3[root@pos_rabbitmq_1 /data/setup/public/rabbitmq/mq_1]eth0 =172.17.80.27# docker-compose up -dCreating pos_rabbitmq_1 ... done[root@pos_rabbitmq_1 /data/setup/public/rabbitmq/mq_1]eth0 =172.17.80.27# docker logs pos_rabbitmq_1 -f2024-07-30 10:57:54.440 [info]<0.596.0>Server startup complete;9plugins started. * rabbitmq_federation_management * rabbitmq_federation * rabbitmq_web_stomp * rabbitmq_stomp * rabbitmq_web_mqtt * rabbitmq_mqtt * rabbitmq_management * rabbitmq_web_dispatch * rabbitmq_management_agent completed with 9plugins.2024-07-30 10:57:54.440 [info]<0.596.0>Resetting nodemaintenance status
Step6 集群高可用镜像ha,任意节点执行
[root@pos_rabbitmq_1 /data/setup/public/rabbitmq/mq_1]eth0 =172.17.80.27# docker exec -it pos_rabbitmq_1 /bin/bashroot@pos_rabbitmq_1:/# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'Setting policy "ha-all"forpattern "^"to "{"ha-mode":"all"}"with priority "0"forvhost "/"...root@pos_rabbitmq_1:/# exitexit

每个节点目录结构及其enabled_plugins安装插件情况如下:

目录结构[root@pos_rabbitmq_1 /data/setup/public/rabbitmq]eth0 =172.17.80.27# tree -a.|-- enabled_plugins|-- mq_1||-- docker-compose.yml||-- .erlang.cookie||-- .rabbitmq.conf|`-- rabbitmq.conf|-- mq_2||-- docker-compose.yml||-- .erlang.cookie|`-- rabbitmq.conf|-- mq_3||-- docker-compose.yml||-- .erlang.cookie|`-- rabbitmq.conf`-- README.md# cat enabled_plugins[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_web_mqtt,rabbitmq_stomp,rabbitmq_web_stomp].

测试

1.集群建设

pos_rabbitmq_1、 实现高可用
3、pos_rabbitmq_3以组成集群
在这里插入图片描述
在这里插入图片描述

2.实现高可用

集群实现ha镜像高可用,创建队列,镜像备份mq2,mq3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.节点只运行rabbitmq,所以内存阀值调制总在比的70%

总运行内存8G,占比70% 可用5.2GB
在这里插入图片描述