# Rabbitmq 集群部署

# 一、环境配置

# 1.1 关闭防火墙、Selinux
systemctl disable --now firewalld 
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 1.2 配置 yum 源
#rocky linux配置
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
    -i.bak \
    /etc/yum.repos.d/rocky-*.repo
yum clean all && yum makecache
mkdir /soft /data /scripts /backup
# 1.3 安装 ntpdate
sudo dnf install epel-release -y
sudo dnf config-manager --set-enabled epel
sudo dnf install ntpsec
# 1.4 配置时间同步
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com
# 加入到crontab
crontab -e
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com
# 1.5 配置文件描述符
ulimit -SHn 65535
vim /etc/security/limits.conf
# 末尾添加如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
# 1.6 系统内核参数调优
cat >>/etc/sysctl.conf<<EOF
vm.max_map_count = 262144
vm.swappiness=1

net.ipv4.tcp_fin_timeout=2
net.ipv4.tcp_tw_reuse=1
#net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_keepalive_time=600
net.ipv4.ip_local_port_range=4000 65000
net.ipv4.tcp_max_syn_backlog=16384
net.ipv4.route.gc_timeout=100
net.ipv4.tcp_max_tw_buckets= 5000

net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_synack_retries=1
net.core.somaxconn=16384
net.core.netdev_max_backlog=16384
net.ipv4.tcp_max_orphans=16384

# 设置最大内存共享段大小bytes
kernel.shmmax=15461882265
kernel.shmall=3774873
# 修改消息队列长度
kernel.msgmax=65535
kernel.msgmnb=65535
EOF
# 1.7 修改默认资源限制
cat >>/etc/systemd/system.conf<< EOF
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
EOF
# 1.8 执行命令生效状态
sysctl -p
# 1.9 安装基础软件包
yum install wget jq psmisc vim unzip net-tools telnet tree yum-utils device-mapper-persistent-data \
lvm2 git nfs-utils iotop httpd-tools dos2unix lrzsz -y
# 1.10 升级系统
yum update -y --exclude=kernel* && reboot

# 二、Rabbitmq 集群部署

# 2.1 环境准备
192.168.40.101192.168.40.102192.168.40.103
masterslave1slave2
# 2.2 修改 hosts
vim /etc/hosts
192.168.40.101 rabbitmq-01
192.168.40.102 rabbitmq-02
192.168.40.103 rabbitmq-03
# 2.3 配置 hosts
hostnamectl set-hostname rabbitmq-01
hostnamectl set-hostname rabbitmq-02
hostnamectl set-hostname rabbitmq-03
# 2.4 安装包下载
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v27.3.1/erlang-27.3.1-1.el8.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v4.1.0/rabbitmq-server-4.1.0-1.el8.noarch.rpm
# 2.5 安装 rabbitmq
  • RabbitMQ 是采用 Erlang 语言开发的,所以系统环境必须提供 Erlang 环境,需要是安装 Erlang。
  • 在 RabiitMQ 安装过程中需要依赖 socat 插件,首先安装该插件。
  • Erlang 和 RabbitMQ 版本对照: https://www.rabbitmq.com/which-erlang.html
yum localinstall erlang-27.3.1-1.el8.x86_64.rpm -y
yum localinstall socat-1.7.3.2-5.el7.lux.x86_64.rpm -y
yum localinstall rabbitmq-server-4.1.0-1.el8.noarch.rpm -y
# 2.6 配置 rabbitmq

所有节点创建自定义数据和日志目录

mkdir -p /data/rabbitmq/data /data/rabbitmq/log

所有节点编辑配置文件

vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/log
RABBITMQ_ERLANG_COOKIE=/data/rabbitmq/.erlang.cookie

所有节点赋予.erlang.cookie 文件权限(其他 2 台从节点 cookie 值要保持一致,权限为 owner 只读),RabbitMQ 的集群是依赖 erlang 集群,而 erlang 集群是通过这个 cookie 进行通信认证的。

vim /data/rabbitmq/.erlang.cookie
KAIJQVKJHAGMUCWXZGVG 

chmod -R 400 /data/rabbitmq/.erlang.cookie
chown -R rabbitmq.rabbitmq /data/rabbitmq/
# 2.7 rabbitmq 启动

所有节点启动 web 管理插件和分片插件

rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_sharding

所有节点设置开机自启

systemctl enable rabbitmq-server
systemctl restart rabbitmq-server
systemctl status rabbitmq-server
# 2.8 加入集群

创建集群,在 node2 和 node3 上执行加入集群命令(主节点无需执行如下操作):

#1.关闭服务
rabbitmqctl stop_app

#2.加入集群
rabbitmqctl join_cluster rabbit@rabbitmq-01

#3.启动服务
rabbitmqctl start_app

#4.查看集群状态,任意节点执行
rabbitmqctl cluster_status

Snipaste_2025-05-29_20-40-27.jpg

# 2.9 配置 rabbitmq 权限

rabbitmq 有一个默认的账号密码 guest,但该情况仅限于本机 localhost 进行访问,所以需要添加一个远程登录的用户。

角色有四种:

  • administrator:可以登录控制台、查看所有信息、并对 rabbitmq 进行管理
  • monToring:监控者;登录控制台,查看所有信息
  • policymaker:策略制定者;登录控制台指定策略
  • managment:普通管理员;登录控制
# 添加用户
rabbitmqctl add_user admin 123456

# 为用户添加资源权限(授予访问虚拟机根节点的所有权限)
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

# 设置用户角色,分配操作权限
rabbitmqctl set_user_tags admin administrator

这里创建用户 xuyong,密码 123456,设置 adminstator 角色,赋予所有权限

# 添加用户
rabbitmqctl add_user xuyong 123456

# 为用户添加资源权限(授予访问虚拟机根节点的所有权限)
rabbitmqctl set_permissions -p "/" xuyong ".*" ".*" ".*"

# 新增虚拟主机
rabbitmqctl add_vhost /xuyong

# 将新虚拟主机授权给新用户
# rabbitmqctl set_permissions -p vhost_name username “.*” “.*” “.*”(后面三个”*”代表用户拥有配置、写、读全部权限)
rabbitmqctl set_permissions -p "/xuyong" xuyong ".*" ".*" ".*"

#查看权限
rabbitmqctl list_permissions -p /xuyong

# 设置用户角色,分配操作权限
rabbitmqctl set_user_tags xuyong administrator

# 删除guest用户
rabbitmqctl delete_user guest

在其他节点检查,账户是否已同步

rabbitmqctl list_users
# 2.10 访问 rabbitmq

浏览器访问:http://192.168.40.101:15672/
用户名: admin
密码:123456

Snipaste_2025-05-29_20-29-59.jpg

此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝