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