LVS+Keepalived:實現(xiàn)高效軟負載均衡的利器
一、概念
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務(wù)器,是一個虛擬的服務(wù)器集群系統(tǒng),它可以通過不同的調(diào)度算法和工作模式,將客戶端的請求轉(zhuǎn)發(fā)給后端的真實服務(wù)器。
Keepalived是一個基于VRRP協(xié)議來實現(xiàn)的服務(wù)高可用方案,可以利用其來避免IP單點故障,一般與其他負載均衡技術(shù)(如LVS、HAProxy、Nginx)一起工作來達到集群的高可用。
二、環(huán)境準備
兩臺 CentOS 7 機器,IP 地址分別為 10.9.2.121和 10.9.2.122。
vip | 10.9.2.120 | 虛擬出來的IP |
master | 10.9.2.121 | master主機IP |
backup | 10.9.2.122 | backup主機IP |
三、安裝
1、安裝 ipvsadm keepalived
在兩臺機器上,執(zhí)行以下命令,安裝 ipvsadm keepalived 軟件包:
yum install -y ipvsadm keepalived
2、配置keepalived
在master機器上,執(zhí)行以下命令,配置 Keepalived:
vim /etc/keepalived/keepalived.conf
添加以下內(nèi)容:
global_defs {
router_id 1
}
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 1
mcast_src_ip 10.9.2.121
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.9.2.120
}
}
在 backup機器上,執(zhí)行以下命令,配置 Keepalived:
vim /etc/keepalived/keepalived.conf
添加以下內(nèi)容:
global_defs {
router_id 2
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 1
mcast_src_ip 10.9.2.122
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.9.2.120
}
}
保存并退出。
參數(shù)說明:
global_defs {
router_id 1 # 定義 VRRP 組的 ID,主備服務(wù)器必須相同
}
authentication { # 定義 VRRP 認證類型和密碼,主備服務(wù)器必須相同
auth_type PASS
auth_pass 123456
}
vrrp_instance VI_1 {
state MASTER # 指定該節(jié)點的狀態(tài),主節(jié)點為 MASTER,備節(jié)點為 BACKUP
interface eth0 # 指定VRRP使用的網(wǎng)卡,換成master機器的網(wǎng)卡名稱
virtual_router_id 1
mcast_src_ip 10.9.2.121 # 指定 VRRP 使用的組播源 IP 地址
priority 100 # 指定 VRRP 優(yōu)先級,優(yōu)先級越高,該節(jié)點成為主節(jié)點的概率越大
advert_int 1 # 指定 VRRP 通告間隔,單位為秒
virtual_ipaddress { # 指定 VRRP 虛擬 IP 地址
10.9.2.120
}
}
3、啟動
在兩臺機器上,執(zhí)行以下命令,啟動 LVS 和 Keepalived:
systemctl start keepalived
systemctl start ipvsadm
如果systemctl start ipvsadm異常Active: failed (Result: exit-code) since Fri 2023-09-01 14:31:28 CST; 5min agoProcess: 3618 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)。
systemctl status ipvsadm.service
journalctl -xe
可以看到/bin/bash: /etc/sysconfig/ipvsadm: No such file or directory。
ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl status ipvsadm.service
4、測試
看看是否能ping通。
ping 10.9.2.120
再在master和backup機器上都安裝一個nginx或apache httpd。
#master
yum install -y httpd
echo "Master" > /var/www/html/index.html
systemctl start httpd
#backup
yum install -y httpd
echo "Backup" > /var/www/html/index.html
systemctl start httpd
在瀏覽器訪問:http://10.9.2.120。
master優(yōu)先級高,10.9.2.120顯示的是master。
再來模擬一下故障轉(zhuǎn)移測試。
在 10.9.2.121 機器上,執(zhí)行以下命令,停掉 LVS:
systemctl stop keepalived
如果 LVS 配置正確,Keepalived 會自動將 VIP 切換到 10.9.2.122。
再在瀏覽器訪問:http://10.9.2.120。
注意事項
- LVS 和 Keepalived 的配置文件中,virtual_ipaddress 配置的 IP 地址必須是同一網(wǎng)段的。
- LVS 和 Keepalived 的配置文件中,priority 配置的值越高,該節(jié)點的優(yōu)先級越高。
- Keepalived 的配置文件中,advert_int 配置的值越小,該節(jié)點發(fā)送 VRRP 報文的頻率越高
四、相關(guān)知識點
1、集群負載均衡網(wǎng)絡(luò)方案
實現(xiàn)集群負載均衡網(wǎng)絡(luò)的方案可以分為軟件、硬件、云等方面:
軟件負載均衡
軟件負載均衡是指在現(xiàn)有服務(wù)器上安裝負載均衡軟件來實現(xiàn)負載均衡,其優(yōu)點是成本低廉、配置簡單、靈活性強,適用于中小型集群。常見的軟件負載均衡方案包括:
- DNS輪詢:將所有后端服務(wù)器的IP地址添加到DNS服務(wù)器,并按照輪詢的方式返回給客戶端,客戶端根據(jù)返回的IP地址進行訪問。
- Keepalive+LVS:在Linux操作系統(tǒng)上使用Keepalive機制和LVS功能來實現(xiàn)負載均衡。Keepalive機制用于檢測后端服務(wù)器的狀態(tài),ipvs功能用于將客戶端請求轉(zhuǎn)發(fā)到后端服務(wù)器。
- Keepalive+Nginx+Lua:Nginx是一個高性能的Web服務(wù)器,Lua是一個腳本語言。Nginx+Lua負載均衡方案是將Nginx作為負載均衡器,使用Lua腳本來實現(xiàn)負載均衡策略。
硬件負載均衡
硬件負載均衡是指使用專門的負載均衡設(shè)備來實現(xiàn)負載均衡,其優(yōu)點是性能高、功能豐富、可靠性強,適用于大型集群。常見的硬件負載均衡方案包括:
- F5 Big-IP:F5 Big-IP是F5 Networks公司推出的一款高性能負載均衡設(shè)備。
- A10 Thunder:A10 Thunder是A10 Networks公司推出的一款高性能負載均衡設(shè)備。
- Juniper SRX:Juniper SRX是Juniper Networks公司推出的一款高性能路由器,具有負載均衡功能。
云負載均衡
云負載均衡是指在云平臺上使用負載均衡服務(wù)來實現(xiàn)負載均衡,其優(yōu)點是部署簡單、彈性伸縮、按需付費,適用于各種規(guī)模的集群。常見的云負載均衡方案包括:
- 阿里云負載均衡:阿里云負載均衡提供多種類型的負載均衡服務(wù),包括傳統(tǒng)的四層負載均衡和七層負載均衡。
- 騰訊云負載均衡:騰訊云負載均衡提供多種類型的負載均衡服務(wù),包括傳統(tǒng)的四層負載均衡和七層負載均衡。
- AWS負載均衡:AWS負載均衡提供多種類型的負載均衡服務(wù),包括傳統(tǒng)的四層負載均衡和七層負載均衡。
2、LVS+Keepalived
LVS
LVS(Linux Virtual Server)是 Linux 內(nèi)核中的軟件負載均衡器,可以將流量分發(fā)到多個服務(wù)器。LVS 可以分為兩種模式:
- NAT 模式:LVS 將客戶端的請求轉(zhuǎn)換為新的 IP 地址和端口,然后將請求轉(zhuǎn)發(fā)到后端服務(wù)器。
- DR 模式:LVS 將客戶端的請求直接轉(zhuǎn)發(fā)到后端服務(wù)器。
LVS 是基于四層的負載均衡器,可以將流量分發(fā)到多個服務(wù)器。LVS 的核心是 LVS 轉(zhuǎn)發(fā)器,LVS 轉(zhuǎn)發(fā)器負責(zé)將客戶端的請求轉(zhuǎn)發(fā)到后端服務(wù)器。LVS 轉(zhuǎn)發(fā)器可以運行在 Linux 內(nèi)核中,也可以運行在用戶空間。
LVS 的優(yōu)點
- 高可用性:LVS 可以實現(xiàn)主備切換,確保服務(wù)的持續(xù)可用性。
- 靈活性:LVS 支持多種負載均衡算法,可以滿足不同場景的需求。
- 性能:LVS 基于 Linux 內(nèi)核,具有良好的性能。
Keepalived
Keepalived 是一個基于 VRRP 協(xié)議的軟件,用于監(jiān)控 LVS 的健康狀況。VRRP 協(xié)議是一種虛擬路由冗余協(xié)議,用于在多個路由器之間實現(xiàn)主備切換。
Keepalived 的主要功能是監(jiān)控 LVS 主節(jié)點的狀態(tài),如果主節(jié)點出現(xiàn)故障,Keepalived 會自動將 LVS 的 VIP 切換到備節(jié)點。
Keepalived 的優(yōu)點
- 高可用性:Keepalived 可以實現(xiàn) LVS 的主備切換,確保服務(wù)的持續(xù)可用性。
- 靈活性:Keepalived 支持多種 VRRP 配置,可以滿足不同場景的需求。
- 性能:Keepalived 基于 Linux 內(nèi)核,具有良好的性能。