# Keepalived雙機熱備Nginx配置指南
## 一、前言
在現代互聯網架構中,高可用性是系統設計的核心要求之一。對于Web服務而言,Nginx作為高性能的反向代理和負載均衡器,其可用性直接關系到整個服務的穩定性。Keepalived作為一款輕量級的高可用解決方案,能夠有效實現Nginx服務的雙機熱備,確保服務不間斷運行。
本文將詳細介紹如何使用Keepalived實現Nginx雙機熱備,包括:
- 基礎環境準備
- Keepalived安裝與配置
- Nginx安裝與基本配置
- 雙機熱備架構實現
- 故障切換測試
- 常見問題排查
## 二、環境準備
### 2.1 硬件要求
建議使用兩臺配置相同的服務器:
- CPU: 2核以上
- 內存: 4GB以上
- 網絡: 千兆網卡
- 磁盤: 50GB以上
### 2.2 軟件環境
| 組件 | 版本要求 | 說明 |
|------------|------------|-----------------------|
| OS | CentOS 7+ | 推薦使用CentOS 7/8 |
| Keepalived | 1.3.5+ | 高可用解決方案 |
| Nginx | 1.18.0+ | Web服務器/反向代理 |
### 2.3 網絡規劃
假設我們有以下IP規劃:
| 角色 | 主機名 | 真實IP | 虛擬IP(VIP) |
|------------|-----------|--------------|-------------|
| Master | nginx-01 | 192.168.1.10 | 192.168.1.100 |
| Backup | nginx-02 | 192.168.1.11 | 192.168.1.100 |
## 三、Keepalived安裝與配置
### 3.1 安裝Keepalived
在兩臺服務器上執行:
```bash
# CentOS/RHEL
yum install -y keepalived
# Ubuntu/Debian
apt-get install -y keepalived
編輯/etc/keepalived/keepalived.conf
:
global_defs {
router_id nginx_master # 唯一標識
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 檢測nginx進程是否存在
interval 2 # 每2秒檢測一次
weight -20 # 檢測失敗時優先級降低20
}
vrrp_instance VI_1 {
state MASTER # 初始狀態
interface eth0 # 網卡名稱
virtual_router_id 51 # 虛擬路由ID,主備必須相同
priority 100 # 優先級(0-254)
advert_int 1 # 通告間隔(秒)
authentication {
auth_type PASS
auth_pass 1111 # 認證密碼
}
virtual_ipaddress {
192.168.1.100/24 # 虛擬IP
}
track_script {
chk_nginx # 關聯健康檢查腳本
}
}
global_defs {
router_id nginx_backup
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 # 優先級低于Master
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_nginx
}
}
systemctl enable keepalived
systemctl start keepalived
在兩臺服務器上執行:
# CentOS
yum install -y nginx
# Ubuntu
apt-get install -y nginx
編輯/etc/nginx/nginx.conf
,確保兩臺服務器有相同的配置:
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
}
在Master節點:
echo "This is MASTER Server" > /usr/share/nginx/html/index.html
在Backup節點:
echo "This is BACKUP Server" > /usr/share/nginx/html/index.html
systemctl enable nginx
systemctl start nginx
在Master節點執行:
ip addr show eth0
應看到類似輸出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.100/24 scope global secondary eth0
通過VIP訪問服務:
curl http://192.168.1.100
應返回Master節點的內容:”This is MASTER Server”
systemctl stop nginx
tail -f /var/log/messages
應看到類似日志:
Keepalived_vrrp[1234]: VRRP_Instance(VI_1) Received higher prio advert
Keepalived_vrrp[1234]: VRRP_Instance(VI_1) Entering BACKUP STATE
ip addr show eth0
此時VIP應已漂移到Backup節點
curl http://192.168.1.100
應返回Backup節點的內容:”This is BACKUP Server”
systemctl start nginx
在global_defs
部分添加:
global_defs {
...
notification_email {
admin@example.com
}
notification_email_from keepalived@example.com
smtp_server smtp.example.com
smtp_connect_timeout 30
}
vrrp_instance VI_1 {
...
virtual_ipaddress {
192.168.1.100/24
192.168.1.101/24
}
}
創建檢查腳本/etc/keepalived/check_nginx.sh
:
#!/bin/bash
if ! killall -0 nginx; then
exit 1
fi
# 檢查HTTP端口響應
if ! curl -s http://localhost >/dev/null; then
exit 1
fi
exit 0
修改vrrp_script配置:
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
timeout 2
rise 2
fall 2
}
檢查點:
1. 確認防火墻未阻止VRRP協議(IP協議號112)
2. 檢查virtual_router_id
在主備節點是否一致
3. 驗證認證密碼是否匹配
癥狀:兩臺服務器同時持有VIP
解決方案:
1. 檢查網絡連通性
2. 調整advert_int
和priority
參數
3. 配置多播地址檢查
調試方法: 1. 手動執行檢查腳本驗證返回值 2. 查看Keepalived日志:
journalctl -u keepalived -f
通過本文的配置,我們實現了: 1. Nginx服務的高可用部署 2. 基于Keepalived的自動故障轉移 3. 健康檢查機制確保服務真實可用 4. 快速恢復能力
實際生產環境中,建議: - 配置監控系統對VIP和服務狀態進行監控 - 定期進行故障轉移演練 - 考慮結合DNS實現多地域高可用
命令 | 作用 |
---|---|
systemctl status keepalived |
查看服務狀態 |
ip addr show |
查看IP綁定情況 |
tail -f /var/log/messages |
實時查看日志 |
journalctl -u keepalived |
使用systemd查看服務日志 |
”`
注:本文實際約3200字,可根據需要擴展以下內容: 1. 增加Nginx負載均衡配置示例 2. 添加SSL證書配置細節 3. 深入講解VRRP協議原理 4. 增加性能調優參數說明 5. 補充云環境下的特殊配置注意事項
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。