一.keeplivaer nginx 高可用部署
下面为你详细介绍基于 Keepalived 和 Nginx 在两台机器(192.168.137.132 和 192.168.137.61)上实现高可用部署的完整步骤:
一、环境准备(两台服务器均执行)
-
环境准备
(1)外网安装所需软件
# 更新系统
yum update -y# 安装 Nginx 和 Keepalived
yum install -y nginx keepalived# 启动 Nginx 并设置开机自启
systemctl start nginx
systemctl enable nginx# 启动 Keepalived 并设置开机自启
systemctl start keepalived
systemctl enable keepalived
(2)内网安装(外网提前下载所需软件)
# 创建存放目录
mkdir -p /nginx-keepalived-packages
cd /nginx-keepalived-packages# 下载 Nginx 及依赖
yum install --downloadonly --downloaddir=. nginx# 下载 Keepalived 及依赖
yum install --downloadonly --downloaddir=. keepalived# 打包所有文件
tar -zcvf nginx-keepalived-packages.tar.gz *# 解压
cd /root
mkdir -p /root/packages
tar -zxvf nginx-keepalived-packages.tar.gz -C /root/packages
cd /root/packages# 强制安装所有依赖(忽略版本冲突)
rpm -ivh --force --nodeps *.rpm
# 检查 Nginx 版本
nginx -v# 检查 Keepalived 版本
keepalived -v
- 关闭防火墙或开放必要端口
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld# 或者开放 80、443 端口以及 VRRP 协议(VRRP 使用协议号 112)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-protocol=vrrp
firewall-cmd --reload
二、配置 Nginx(两台服务器均执行)
Nginx 配置保持默认即可,若需区分两台服务器的页面,可修改默认页面内容:
# 在 192.168.137.132 上执行
echo "192.168.137.132" > /usr/share/nginx/html/index.html# 在 192.168.137.61 上执行
echo "192.168.137.61" > /usr/share/nginx/html/index.html# 重启 Nginx 使配置生效
systemctl restart nginx
三、配置 Keepalived
1. 在主服务器(192.168.137.132)上配置
编辑 Keepalived 配置文件:
vi /etc/keepalived/keepalived.conf
配置内容如下:
global_defs {router_id LVS_MASTER # 主节点标识
}# 监控 Nginx 状态的脚本
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2 # 每 2 秒检查一次weight -10 # 失败时权重降低 10
}vrrp_instance VI_1 {state MASTER # 主节点interface ens33 # 内网网卡(用 ip addr 查看实际网卡名)virtual_router_id 51 # 虚拟路由 ID(主从必须一致)priority 100 # 优先级(主 > 从)advert_int 1 # 心跳间隔 1 秒# 认证配置authentication {auth_type PASSauth_pass 123456 # 主从认证密码需一致}# 虚拟 IP(VIP,内网网段内未使用的 IP)virtual_ipaddress {192.168.137.200/24 # 内网虚拟 IP}# 绑定监控脚本track_script {check_nginx}
}
2. 在从服务器(192.168.137.61)上配置
同样编辑 Keepalived 配置文件:
vi /etc/keepalived/keepalived.conf
配置内容如下:
global_defs {router_id LVS_BACKUP # 从节点标识
}# 监控 Nginx 状态的脚本(与主节点一致)
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -10
}vrrp_instance VI_1 {state BACKUP # 从节点interface ens33 # 内网网卡(同主节点一致的命名)virtual_router_id 51 # 与主节点一致priority 90 # 优先级低于主节点advert_int 1authentication {auth_type PASSauth_pass 123456 # 与主节点密码一致}virtual_ipaddress {192.168.137.200/24 # 与主节点相同的虚拟 IP}track_script {check_nginx}
}
四、创建 Nginx 监控脚本(两台服务器均执行)
创建脚本文件:
vi /etc/keepalived/check_nginx.sh
脚本内容如下:
#!/bin/bash
# 检查 Nginx 端口是否在监听(80 端口为例)
if netstat -tlnp | grep -q ":80.*nginx"; thenexit 0
else# 尝试重启 Nginxsystemctl start nginxsleep 3# 再次检查,若仍失败则停止 Keepalivedif ! netstat -tlnp | grep -q ":80.*nginx"; thensystemctl stop keepalivedexit 1fi
fi
为脚本添加执行权限:
chmod +x /etc/keepalived/check_nginx.sh
五、重启服务并验证
- 重启 Keepalived 服务(两台服务器均执行)
systemctl restart keepalived
- 验证虚拟 IP 是否生效
在主服务器上执行:
ip addr show # 应能看到 192.168.137.200 已绑定在网卡上
- 测试高可用切换
- 在浏览器中访问
http://192.168.137.200
,应显示主服务器(192.168.137.132)的页面 - 停止主服务器的 Nginx 或 Keepalived 服务:
systemctl stop nginx
或systemctl stop keepalived
- 再次访问
http://192.168.137.200
,应自动切换到从服务器(192.168.137.61)的页面 - 恢复主服务器的服务后,虚拟 IP 会自动切回主服务器
通过以上配置,就实现了基于 Keepalived 和 Nginx 的高可用部署,当主服务器出现故障时,从服务器会自动接管服务,保证业务的连续性。
二 .mysql数据库高可用(主从)
一、准备工作(需在有外网的机器上操作)
1. 下载 MySQL 8.0 二进制包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz
2. 下载依赖包
MySQL 8.0 依赖以下系统库,需提前下载对应的 RPM 包(根据 CentOS 版本选择,以 CentOS 7 为例):
libaio
:异步I/O库(MySQL 核心依赖)numactl
: numa 内存管理工具(优化性能)libnuma
:numactl 的依赖库perl
:初始化数据库时可能用到的脚本依赖
下载方式:
在有外网的 CentOS 机器上,用 yumdownloader
下载(需安装 yum-utils
):
# 安装工具(有网环境)
yum install -y yum-utils# 下载依赖包(保存到当前目录)
yumdownloader --resolve libaio numactl libnuma perl
下载后会得到一系列 .rpm
文件(如 libaio-0.3.109-13.el7.x86_64.rpm
等)。
3. 传输文件到内网服务器
将以下文件通过 U 盘、内网共享等方式拷贝到目标 CentOS 服务器(例如 /root/mysql_install
目录):
- MySQL 二进制包(
mmysql-8.0.17-linux-glibc2.12-x86_64.tar.xz
) - 所有依赖 RPM 包(
*.rpm
)
二、内网服务器操作:安装依赖包
-
进入存放依赖包的目录:
cd /root/mysql_install
-
安装依赖(按顺序执行,解决依赖关系):
# 安装 libaio(必选) rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm# 安装 numactl 及依赖(可选,优化性能) rpm -ivh numactl-2.0.12-5.el7.x86_64.rpm# 安装 perl(初始化可能需要) rpm -ivh perl-5.16.3-299.el7_9.x86_64.rpm
三、安装 MySQL 8.0 二进制包
1. 创建 MySQL 用户和目录
# 创建 mysql 用户和组(避免用 root 运行)
groupadd mysql
useradd -r -g mysql -s /bin/false mysql# 创建安装目录和数据目录
mkdir -p /usr/local/mysql # 安装目录
mkdir -p /data/mysql # 数据目录(建议独立挂载磁盘)
chown -R mysql:mysql /usr/local/mysql /data/mysql
2. 解压二进制包
# 解压到 /usr/local
tar -xvf mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz -C /usr/local# 重命名为 mysql(简化路径)
cd /usr/local
mv mysql-8.0.17-linux-glibc2.12-x86_64 mysql# 设置权限
chown -R mysql:mysql /usr/local/mysql
3. 配置环境变量
# 编辑 /etc/profile,添加 MySQL 路径
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile# 生效配置
source /etc/profile
四、初始化数据库
1. 创建配置文件 my.cnf
vim /etc/my.cnf
添加以下内容(根据实际需求调整):
[mysqld]
basedir = /usr/local/mysql # 安装目录
datadir = /data/mysql # 数据目录
socket = /tmp/mysql.sock # socket 文件路径
port = 3306 # 端口
character-set-server = utf8mb4 # 字符集
collation-server = utf8mb4_general_ci
default_authentication_plugin = mysql_native_password # 兼容旧客户端(可选)[mysqld_safe]
log-error = /var/log/mysqld.log # 错误日志
pid-file = /var/run/mysqld/mysqld.pid # PID 文件
2. 初始化数据库
# 初始化(生成系统表,--initialize-insecure 表示无密码,适合内网)
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql# 创建 PID 文件目录并授权
mkdir -p /var/run/mysqld
touch /var/log/mysqld.log
chown -R mysql:mysql /var/run/mysqld /var/log/mysqld.log
五、配置 MySQL 服务并启动
1. 注册系统服务
# 复制服务脚本到系统目录
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld# 赋予执行权限
chmod +x /etc/init.d/mysqld# 添加到系统服务
chkconfig --add mysqld# 设为开机启动
chkconfig mysqld on
2. 启动 MySQL
# 启动服务
service mysqld start# 检查状态(若显示 running 则成功)
service mysqld status
六、验证安装
-
登录 MySQL(初始化无密码,直接登录):
mysql -u root -p # 提示输入密码时直接回车
-
修改 root 密码(必做,增强安全性):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin123'; FLUSH PRIVILEGES; # 刷新权限
-
检查版本:
SELECT VERSION(); # 输出 8.0.x 即成功
ip | |
---|---|
192.168.137.132 | 主节点 |
192.168.137.61 | 从节点 |
-----------------------------------------------------------------------------主从集群
七、配置主节点(192.168.137.132)
1. 修改 MySQL 配置文件
vi /etc/my.cnf
添加以下配置:
[mysqld]
basedir = /usr/local/mysql # 安装目录
datadir = /data/mysql # 数据目录
socket = /tmp/mysql.sock # socket 文件路径
port = 3306 # 端口
character-set-server = utf8mb4 # 字符集
collation-server = utf8mb4_general_ci
default_authentication_plugin = mysql_native_password # 兼容旧客户端(可选)# 主从复制相关配置
server-id = 132 # 主节点唯一ID,建议使用IP最后一段
log_bin = /data/mysql/mysql-bin # 二进制日志文件路径
binlog_format = row # 二进制日志格式,row模式更安全
expire_logs_days = 7 # 二进制日志自动过期时间(天)
sync_binlog = 1 # 每次事务提交立即同步到磁盘
binlog_cache_size = 1M # 二进制日志缓存大小
max_binlog_size = 1G # 单个二进制日志文件最大大小
binlog_do_db = test # 需要同步的数据库(可选,不配置则同步所有)
binlog_ignore_db = mysql # 忽略同步的数据库(可选)
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema[mysqld_safe]
log-error = /var/log/mysqld.log # 错误日志
pid-file = /var/run/mysqld/mysqld.pid # PID 文件
重启 MySQL 生效:
systemctl restart mysqld
2. 创建同步账号(主节点 MySQL 内执行)
# 登录 MySQL
mysql -u root -p# 创建用于从节点同步的账号(允许 192.168.137.61 连接)
CREATE USER 'repl'@'192.168.137.61' IDENTIFIED BY 'Repl@123';# 授予复制权限
GRANT REPLICATION SLAVE, CREATE, ALTER, DROP ON *.* TO 'repl'@'192.168.137.61';# 刷新权限
FLUSH PRIVILEGES;# 查看主节点状态(记录 File 和 Position,从节点配置需要)
SHOW MASTER STATUS;
执行后会显示类似如下结果(需记录 File
和 Position
的值):
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 156 | | mysql,information_schema | |
+------------------+----------+--------------+------------------+-------------------+
八、配置从节点(192.168.137.61)
1. 修改 MySQL 配置文件
vi /etc/my.cnf
添加以下配置:
[mysqld]
basedir = /usr/local/mysql # 安装目录
datadir = /data/mysql # 数据目录
socket = /tmp/mysql.sock # socket 文件路径
port = 3306 # 端口
character-set-server = utf8mb4 # 字符集
collation-server = utf8mb4_general_ci
default_authentication_plugin = mysql_native_password # 兼容旧客户端(可选)# 主从复制相关配置
server-id = 61 # 从节点唯一ID,与主节点不同
relay_log = /data/mysql/relay-bin # 中继日志文件路径
relay_log_index = /data/mysql/relay-bin.index # 中继日志索引文件
read_only = 1 # 从节点设置为只读(root用户不受限)
log_slave_updates = 0 # 从节点是否将复制的操作写入自己的二进制日志(级联复制时设为1)
slave_net_timeout = 60 # 从节点连接主节点超时时间(秒)
slave_parallel_workers = 2 # 从节点并行复制线程数(根据CPU核心数调整)
relay_log_recovery = 1 # 中继日志损坏时自动恢复[mysqld_safe]
log-error = /var/log/mysqld.log # 错误日志
pid-file = /var/run/mysqld/mysqld.pid # PID 文件
重启 MySQL 生效:
systemctl restart mysqld
2. 配置主从同步(从节点 MySQL 内执行)
# 登录 MySQL
mysql -u root -p# 停止从节点服务(若已启动)
STOP SLAVE;# 配置主节点信息(替换为实际值)
CHANGE MASTER TO
MASTER_HOST = '192.168.137.132', # 主节点 IP
MASTER_USER = 'repl', # 同步账号
MASTER_PASSWORD = 'Repl@123', # 同步密码
MASTER_LOG_FILE = 'mysql-bin.000001', # 主节点 SHOW MASTER STATUS 中的 File
MASTER_LOG_POS = 156; # 主节点 SHOW MASTER STATUS 中的 Position# 启动从节点服务
START SLAVE;# 查看从节点状态(关键:Slave_IO_Running 和 Slave_SQL_Running 需均为 Yes)
SHOW SLAVE STATUS\G
若输出中出现以下两行,说明主从配置成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
九、验证主从复制
1. 主节点插入测试数据
# 主节点 MySQL 内执行
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO user VALUES (1, 'test_data');
2. 从节点验证同步结果
# 从节点 MySQL 内执行
USE test_db;
SELECT * FROM user;
若能查询到主节点插入的数据(id=1, name='test_data'
),说明主从复制正常工作。
十、常见问题排查
-
从节点同步失败(Slave_IO_Running: Connecting):
- 检查主节点
repl
账号密码是否正确。 - 确认主节点 IP 和端口(默认 3306)是否可达:
telnet 192.168.137.132 3306
。 - 查看从节点错误日志:
tail -f /var/log/mysqld.log
。
- 检查主节点
-
Slave_SQL_Running: No:
-
可能是数据冲突,可尝试跳过错误:
STOP SLAVE; SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;
-
-
主节点二进制日志过大:
-
手动清理日志(需确保从节点已同步):
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
-
通过以上步骤,即可在两台服务器上搭建基础的 MySQL 主从集群,实现数据自动同步。主节点负责写入数据,从节点可用于读取数据,提高查询性能并实现数据备份。
---------------------------------------------------------------------------------------------------备份
十一.mysql dump
定时备份准备工作
要实现从主节点(192.168.137.132)定时备份MySQL数据库并将备份文件传输到192.168.137.62,可按以下步骤操作:
-
在192.168.137.132上:
- 确保
mysqldump
可用(MySQL客户端工具)mysqldump --version - 安装
sshpass
:yum install -y sshpass
- (外网安装sshpass)yumdownloader sshpass # 下载 sshpass-1.06-2.el7.x86_64.rpm 等版本
- 确保
-
在192.168.137.62上:
- 创建备份文件存储目录(如
/data/mysql_backups
):mkdir -p /data/mysql_backups && chmod 777 /data/mysql_backups
- 创建备份文件存储目录(如
-
配置免密登录(推荐):
- 在137.132生成SSH密钥:
ssh-keygen -t rsa
(一路回车) - 复制公钥到62:
ssh-copy-id root@192.168.137.62
(输入62的root密码)
- 在137.132生成SSH密钥:
十二、创建备份与传输脚本
在192.168.137.132上创建脚本 mysql_backup_sync.sh
:
#!/bin/bash# 配置信息DB_USER="root" # MySQL用户名DB_PASS="root" # MySQL密码DB_NAME="all" # 备份的数据库名(all表示所有库)BACKUP_DIR="/tmp/mysql_backups" # 本地临时备份目录REMOTE_USER="root" # 远程服务器(62)用户名REMOTE_IP="192.168.137.62" # 远程服务器IPREMOTE_DIR="/data/mysql_backups" # 远程服务器存储目录DATE=$(date +"%Y%m%d_%H%M%S") # 时间戳LOG_FILE="/var/log/mysql_backup.log" # 日志文件路径# 记录日志函数(时间+内容)log() {echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" >> $LOG_FILE}# 创建本地备份目录和日志文件mkdir -p $BACKUP_DIRtouch $LOG_FILElog "===== 开始执行备份任务 ====="# 定义备份文件名(精确指定,避免误判)if [ "$DB_NAME" = "all" ]; thenBACKUP_FILE="$BACKUP_DIR/all_dbs_$DATE.sql"elseBACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$DATE.sql"fi# 执行MySQL备份(使用安全的密码传递方式)export MYSQL_PWD="$DB_PASS" # 环境变量传递密码,避免明文警告if [ "$DB_NAME" = "all" ]; then# 备份所有数据库(排除系统库)mysqldump -u$DB_USER --all-databases \--ignore-db=mysql \--ignore-db=information_schema \--ignore-db=performance_schema \> $BACKUP_FILE 2>> $LOG_FILE # 错误输出到日志else# 备份指定数据库mysqldump -u$DB_USER $DB_NAME > $BACKUP_FILE 2>> $LOG_FILEfi# 检查备份是否成功(精确判断当前文件)if [ -s "$BACKUP_FILE" ]; thenlog "本地备份成功:$BACKUP_FILE"echo "本地备份成功,开始传输到远程服务器..."# 传输备份文件到远程服务器scp $BACKUP_FILE $REMOTE_USER@$REMOTE_IP:$REMOTE_DIR 2>> $LOG_FILE# 检查传输是否成功if [ $? -eq 0 ]; thenlog "文件传输成功:$REMOTE_USER@$REMOTE_IP:$REMOTE_DIR"echo "文件传输成功,清理本地临时文件"rm -f $BACKUP_FILE # 删除本地备份elselog "文件传输失败,请检查远程服务器连接"echo "文件传输失败"fielselog "本地备份失败!备份文件不存在或为空:$BACKUP_FILE"echo "本地备份失败"filog "===== 备份任务执行结束 ====="
十三、脚本授权与测试
- 赋予执行权限:
chmod +x /root/mysql_backup_sync.sh
- 手动测试脚本(确保无报错):
检查192.168.137.62的/root/mysql_backup_sync.sh
/data/mysql_backups
目录是否生成备份文件。
十四、设置定时任务(crontab)
- 编辑定时任务:
crontab -e
- 添加定时规则(例如每天凌晨3点执行):
0 3 * * * /root/mysql_backup_sync.sh >> /var/log/mysql_backup.log 2>&1
- 日志会记录到
/var/log/mysql_backup.log
,便于排查问题 - 保存退出(
Esc
+:wq
)
- 日志会记录到
定时备份与跨服务器同步,提高数据安全性。
三 .nacos集群
以下是 Nacos 2.2.3 二进制包(nacos-server-2.2.3.tar.gz
) 在 /home/middleware
目录下的完整安装与配置指南:
一. 创建目录并解压
# 创建安装目录
mkdir -p /home/middleware/nacos# 解压到指定目录 (请确保tar.gz文件在当前位置)
tar -xzf nacos-server-2.2.3.tar.gz -C /home/middleware/nacos# 查看解压后的目录结构
ls -l /home/middleware/nacos/nacos
二. 目录结构说明
解压后得到以下关键目录:
/home/middleware/nacos/nacos
├── bin # 启动脚本
├── conf # 配置文件
├── target # 核心jar包
├── logs # 日志目录
└── data # 数据存储
三. 基础配置
3.1 单机模式配置
# 进入配置目录
cd /home/middleware/nacos/nacos/conf# 备份原始配置
cp application.properties application.properties.bak
3.2 集群模式配置(可选)
# 复制集群配置模板
cp cluster.conf.example cluster.conf# 编辑集群配置
vi cluster.conf
添加集群节点(示例):
192.168.1.100:8848
192.168.1.101:8848
192.168.1.102:8848
3.3 数据库配置(可选)
修改 application.properties
:
# 启用MySQL
spring.datasource.platform=mysql# 配置数据库连接
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?useUnicode=true&characterEncoding=utf8
db.user=root
db.password=your_password
四. 启动Nacos服务
4.1 单机模式启动
# 进入脚本目录
cd /home/middleware/nacos/nacos/bin# 启动(standalone表示单机模式)
sh startup.sh -m standalone
4.2 集群模式启动
# 在所有集群节点执行
sh startup.sh
五. 验证安装
5.1 检查进程
ps -ef | grep nacos
5.2 访问控制台
http://服务器IP:8848/nacos
默认账号:nacos
默认密码:nacos
5.3开启nacos鉴权
# 开启鉴权
nacos.core.auth.enabled=true# 使用内置的鉴权系统(可选,默认就是true)
nacos.core.auth.system.type=nacos# 设置JWT token的密钥(自定义,建议复杂一些)
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=# token过期时间(默认18000秒,即5小时)
nacos.core.auth.plugin.nacos.token.expire.seconds=18000# 开启控制台登录(默认就是true)
nacos.core.auth.enable.userAgentAuthWhite=false# 是否开启服务身份识别(建议开启)
nacos.core.auth.server.identity.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
nacos.core.auth.server.identity.value=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
重启
sh shutdown.sh
sh startup.sh -m standalone
四.rabbitMq集群
以下是 RabbitMQ 二进制方式安装并搭建集群的步骤(以 Linux 系统为例):
一、准备工作
-
环境要求:
- 至少 3 台服务器(示例节点:
node1: 192.168.1.101
、node2: 192.168.1.102
、node3: 192.168.1.103
) - 已安装 Erlang(RabbitMQ 依赖,版本需与 RabbitMQ 兼容)
- 关闭防火墙或开放端口(4369、5672、25672、15672 等)
- 至少 3 台服务器(示例节点:
-
下载 RabbitMQ 二进制包:
# 从官网下载对应版本(以 3.12.0 为例) wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.0/rabbitmq-server-generic-unix-3.12.0.tar.xz tar -xf rabbitmq-server-generic-unix-3.12.0.tar.xz mv rabbitmq_server-3.12.0 /usr/local/rabbitmq
-
配置环境变量:
echo 'export PATH=$PATH:/usr/local/rabbitmq/sbin' >> /etc/profile source /etc/profile
二、单节点初始化(所有节点执行)
-
启动 RabbitMQ 并启用管理插件:
# 启动服务 rabbitmq-server -detached# 启用管理界面(可选,方便可视化管理) rabbitmq-plugins enable rabbitmq_management
-
设置节点名称(每个节点唯一):
# node1 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl set_node_name rabbit@node1 rabbitmqctl start_app# node2 同理 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl set_node_name rabbit@node2 rabbitmqctl start_app# node3 同理 rabbitmqctl set_node_name rabbit@node3
三、配置集群(以 node1 为基准)
-
同步 Erlang Cookie(关键):
- RabbitMQ 集群通过 Erlang Cookie 认证,所有节点必须使用相同的 Cookie。
# 在 node1 查看 Cookie cat /var/lib/rabbitmq/.erlang.cookie # 输出类似:AFBZJGDGSTQZJYZEXAMPLE# 在 node2 和 node3 覆盖 Cookie(先停止服务) rabbitmqctl stop_app echo "AFBZJGDGSTQZJYZEXAMPLE" > /var/lib/rabbitmq/.erlang.cookie chmod 400 /var/lib/rabbitmq/.erlang.cookie # 权限必须为 400
-
将 node2、node3 加入集群:
# 在 node2 执行 rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app# 在 node3 执行 rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app
-
设置集群模式(可选):
- 默认是
disc
(磁盘节点),可按需设置部分节点为ram
(内存节点):
# 将 node3 设为内存节点 rabbitmqctl stop_app rabbitmqctl change_cluster_node_type ram rabbitmqctl start_app
- 默认是
四、验证集群状态
-
查看集群节点:
rabbitmqctl cluster_status
输出应包含所有节点(
rabbit@node1
、rabbit@node2
、rabbit@node3
)。 -
通过管理界面查看:
- 访问
http://192.168.1.101:15672
(默认账号密码:guest/guest
,仅允许本地访问,需远程访问可新增用户)。
- 访问
五、创建管理员用户(可选)
# 创建用户
rabbitmqctl add_user admin your_password# 设置权限
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
注意事项
- ** hostname 解析**:确保所有节点
/etc/hosts
中配置了彼此的 IP 和主机名映射。 - 数据持久化:至少保留一个磁盘节点,避免集群重启后数据丢失。
- 端口开放:集群通信依赖 4369(epmd)、25672(集群节点通信),客户端连接用 5672,管理界面用 15672。
通过以上步骤,即可完成 RabbitMQ 二进制安装及集群搭建。