# 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.101 | 192.168.40.102 | 192.168.40.103 |
---|---|---|
master | slave1 | slave2 |
# 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
# 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