1. 項目背景
在現代 Web 應用中,高可用性和負載均衡是至關重要的需求。本項目旨在通過 LVS(Linux Virtual Server)實現流量分發,通過 Keepalived 實現高可用性,通過 Nginx 提供后端服務。該架構能夠確保在單點故障的情況下,系統仍然能夠正常運行,并且能夠均衡地分配流量到多個后端服務器。
2. 環境準備
2.1 服務器角色及 IP 規劃
服務器角色 | 操作系統 | 內網 IP (ens160) | VIP | 安裝軟件 |
---|---|---|---|---|
LVS 主節點 | CentOS 7 | 192.168.65.131 | 192.168.65.100 (lvs-ens160) 192.168.65.101(keepalived-ens160) | ipvsadm, Keepalived |
LVS 備節點 | CentOS 7 | 192.168.65.132 | 192.168.65.100 (lvs-ens160) 192.168.65.101(keealived-ens160) | ipvsadm, Keepalived |
后端 Web 服務器 1 | CentOS 7 | 192.168.65.133 | 192.168.65.100 (lvs-lo) | Nginx |
后端 Web 服務器 2 | CentOS 7 | 192.168.65.134 | 192.168.65.100 (lvs-lo) | Nginx |
2.2 實驗前準備
-
關閉 SELinux,以避免對實驗造成干擾。
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config sudo reboot
-
開啟防火墻并放行必要的端口,確保負載均衡和高可用性功能正常工作。
3. 服務器網絡環境配置
3.1 設置靜態 IP 地址
為確保服務器在重啟后仍能保持固定的網絡配置,使用 nmcli
設置靜態 IP 地址。
LVS 主節點(192.168.65.131)
-
查看當前網絡連接名稱
nmcli con show
網絡接口名稱為
ens160
。 -
修改靜態 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.131/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加載網絡配置并重啟網絡服務
nmcli con up ens160
LVS 備節點(192.168.65.132)
-
查看當前網絡連接名稱
nmcli con show
網絡接口名稱為
ens160
。 -
修改靜態 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.132/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加載網絡配置并重啟網絡服務
nmcli con up ens160
后端 Web 服務器 1(192.168.65.133)
-
查看當前網絡連接名稱
nmcli con show
假設網絡接口名稱為
ens160
。 -
修改靜態 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.133/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加載網絡配置并重啟網絡服務
nmcli con up ens160
后端 Web 服務器 2(192.168.65.134)
-
查看當前網絡連接名稱
nmcli con show
網絡接口名稱為
ens160
。 -
修改靜態 IP 地址
nmcli con mod ens160 ipv4.addresses 192.168.65.134/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
-
重新加載網絡配置并重啟網絡服務
nmcli con up ens160
3.2 配置主機名和主機映射
為便于在集群環境中快速識別和管理各服務器,需要為每臺服務器配置主機名。
LVS 主節點(192.168.65.131)
-
設置主機名
sudo hostnamectl set-hostname lvs-master
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下內容:
127.0.0.1 lvs-master 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
LVS 備節點(192.168.65.132)
-
設置主機名
sudo hostnamectl set-hostname lvs-backup
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下內容:
127.0.0.1 lvs-backup 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
后端 Web 服務器 1(192.168.65.133)
-
設置主機名
sudo hostnamectl set-hostname webserver1
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下內容:
127.0.0.1 webserver1 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
后端 Web 服務器 2(192.168.65.134)
-
設置主機名
sudo hostnamectl set-hostname webserver2
-
更新
/etc/hosts
文件sudo vi /etc/hosts
添加以下內容:
127.0.0.1 webserver2 192.168.65.131 lvs-master 192.168.65.132 lvs-backup 192.168.65.133 webserver1 192.168.65.134 webserver2
3.3 配置防火墻規則
為保障網絡安全,需要優化防火墻規則,開啟必要的服務端口,同時關閉不必要的端口。使用 firewalld
配置防火墻:
-
開啟 HTTP(80 端口)和 VRRP(112 端口)
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=112/udp --permanent firewall-cmd --reload
-
驗證防火墻規則
firewall-cmd --list-all
確保
80/tcp
和112/udp
端口已正確放行。
3.4 實現 SSH 免密登錄
為提高運維效率并減少人為錯誤,需要實現 SSH 免密登錄。生成 SSH 密鑰對,并將公鑰復制到所有服務器:
ssh-keygen -t rsa
ssh-copy-id lvs-backup
ssh-copy-id webserver1
ssh-copy-id webserver2
4. 軟件安裝與配置
4.1 LVS 主節點和備節點配置
4.1.1 安裝 IPVS 和 Keepalived
在 LVS 主節點和備節點上安裝必要的軟件:
yum install -y ipvsadm keepalived
4.1.2 加載 IPVS 模塊
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
確保模塊加載成功:
lsmod | grep ip_vs
4.1.3 配置 IP 轉發
編輯 /etc/sysctl.conf
文件,添加或修改以下內容:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0
使配置生效:
sysctl -p
4.1.4 配置 VIP
在主節點上配置 VIP:
sudo nmcli con mod ens160 +ipv4.addresses 192.168.65.100/32
sudo nmcli con up ens160
4.1.5 配置 LVS 規則
-
清除原有 LVS 規則
ipvsadm -C
-
添加虛擬服務器
ipvsadm -A -t 192.168.65.100:80 -s rr
-
添加真實服務器
ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.133:80 -g -w 1 ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.134:80 -g -w 1
-
查看lvs規則
ipvsadm -Ln
-
保存 LVS 規則
ipvsadm -S > /etc/sysconfig/ipvsadm
4.1.6 配置 Keepalived
編輯 /etc/keepalived/keepalived.conf
文件,配置 Keepalived 以實現主備切換,確保高可用性:
主節點(192.168.65.131):
global_defs {router_id LVS_MASTER
}
vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.101}
}
備節點(192.168.65.132):
global_defs {router_id LVS_BACKUP
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.101}
}
4.1.7 啟動服務
啟動并啟用 IPVS 和 Keepalived 服務,確保配置生效:
sudo systemctl enable keepalived
sudo systemctl start keepalived
主節點獲取keepalived-vip(192.168.65.101),備用節點未爭取到
4.2 后端 Web 服務器配置
4.2.1 安裝 Nginx
在后端 Web 服務器上安裝 Nginx,為用戶提供 Web 服務:
sudo yum install -y nginx
4.2.2 啟動 Nginx 并設置開機自啟
sudo systemctl start nginx
sudo systemctl enable nginx
4.2.3 修改 Nginx 默認頁面(用于區分不同服務器)
Web 服務器 1(192.168.65.133):
echo "<h1>This is Real Server 1</h1>" > /usr/share/nginx/html/index.html
Web 服務器 2(192.168.65.134):
echo "<h1>This is Real Server 2</h1>" > /usr/share/nginx/html/index.html
4.2.4 配置 VIP
在真實服務器上配置 VIP:
sudo nmcli con add type loopback con-name lo ifname lo +ip4 192.168.65.100/32
sudo nmcli con up lo
4.2.5 調整 ARP 參數
編輯 /etc/sysctl.conf
文件,添加以下內容:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
使配置生效:
sysctl -p
5. 測試與驗證
5.1 驗證 LVS 和 Keepalived
5.1.1 正常訪問測試
驗證客戶端是否能夠通過虛擬 IP 正常訪問后端服務器:
curl 192.168.65.100
預期結果:返回 This is Real Server 1
或 This is Real Server 2
。
5.1.2 主節點故障模擬
驗證在主節點故障時,備節點是否能夠正常接管虛擬 IP:
在主節點(192.168.65.131)上停止 Keepalived 服
systemctl stop keepalived
主節點失去vip??
備用節點獲取vip
5.2 驗證 Nginx
驗證后端服務器的 Nginx 服務是否正常運行:
curl http://192.168.65.133
curl http://192.168.65.134
預期結果:分別返回 This is Real Server 1
和 This is Real Server 2
。
用客戶機和windows端測試:?
?