一.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 二進制安裝及集群搭建。