LVS的常用模式配置方法以及 ldirectord和keepalived調度器管理

一、LVS的簡單介紹

1.後面會經常提到的一些名詞解釋:

vs:virtual server
rs:real server,後面真實的服務器
director:調度器
balancer:負載均衡器

客戶端向調度器發送請求時:
客戶端的ip=cip(client ip)
接收客戶端請求的ip=vip(virtual server ip)
真實服務器的ip=rip(real server ip)

2.四種模式的簡介

(1)DR模式(直接路由)
DR模式性能最佳,但必須要求在一個vlan中。
數據包流向:client–>vs–>rs–> client
DR模式下收到客戶端請求,lvs會將vs的mac地址修改爲某一臺rs的mac地址(注:ip地址是邏輯地址,mac地址纔是真正的通信地址,所以我們纔可以通過修改mac地址發送到指定的rs),然後這個數據包會被轉發到相應的rs處理(此時源ip和目標ip未變)。如數據幀流向所示,客戶端請求由lvs接收,但返回的時候不經過lvs,而是直接向源ip返回,由真實服務器直接返回給用戶。

優點:效率最高,負載均衡器只用分發請求,應答包通過單獨的路由返回給客戶端,提高了服務器併發能力。
缺點:負載均衡器的網卡必須和物理網卡在同一網段上
(2)NAT模式(多目標DNAT)
NAT模式下收到客戶端請求,lvs會做目的地址轉換(DNAT),將目標ip改爲rs的ip。rs接收到該數據包直接進行處理,返回響應時,目標ip即爲cip,源ip即爲rs的ip。然後,rs的數據包通過lvs中轉,lvs進行源地址轉換(SNAT),將數據包的源地址(rip)改爲vip發送至客戶端(rip不會直接響應cip),整個過程對於客戶端來說是不可見的。

缺點:擴展性有限。高負載模式下,director可能成爲瓶頸
優點:支持任意操作系統,節點服務器使用私有IP地址,與負載調度器位於同一個物理網絡,安全性比DR模式和TUN模式要高。
(3)TUNNEL(隧道)模式
隧道模式下,vs 收到客戶端請求,封裝數據包,使源 ip 成爲 vip,目標 ip 成爲
rip,當 rs 收到數據包時,進行解封裝,還原數據包,處理後,利用 vip 發出響應
從 rip 所在的接口發出,直接達到客戶端。

優點:實現了異地容災,避免了一個機房故障導致網站無法訪問。
缺點:RS配置複雜

(4)FULLNAT模式
FULLNAT模式可以解決lvs和rs跨vlan的問題,從此lvs和rs不再存在vlan上的從屬關係,可以作到多個lvs對應多個rs,解決水平擴容的問題。
FULLNAT在NAT模式上做了如下改進:
在DNAT時,源地址從客戶端的ip被替換成了lvs內網ip。而內網ip之間,可以通過多個交換機跨vlan通信。當rs返回經過處理的數據包時,會將這個數據包返回到lvs的內網ip上,此時lvs進行源地址轉換(SNAT),把數據包的目的地址從lvs內網ip替換爲客戶端ip。

3.簡單介紹10種調度算法

rr:Round Bobin,輪詢,將客戶端的請求交替分配給RS
wrr:Weighted Round Bobin,加權輪詢,根據RS的性能不同,讓他們來承擔不同比例的用戶請求
dh:Destination Hashing,目標地址哈希調度,基於用戶所請求的地址做哈希表
作用:實現將對於相同的地址的請求調度到同一個RS之上
sh:Source Hashing,源地址的哈希調度,基於用戶的ip地址做哈希表
作用:實現將同一個客戶端調度到相同的RS之上
lc:Least Connection,最小連接數調度,本質是調度到當前負載最低的主機上
wlc:Weighted Least Connection,加權最小連接數調度,本質是調度到當前負載最低的主機上
SED:是wlc補充
NQ:Never queue,算法基本和sed相同,爲了避免性能差的RS長時間處於空閒狀態
lblc:基於目標地址的最小連接數調度,這種算法那是lc和dh的組合,適應於cache場景
lblcr:帶有複製功能的lblc

二、DR模式的配置

1.環境準備

lvs調度器server1,ip:172.25.21.1
真實web服務器server2,ip:172.25.21.2
第二個真實web服務器server3,ip:172.25.21.3

2.配置DR

安裝lvs的管理工具:ipvsadm
yum install ipvsadm -y			##企業7版本之後的ipvsadm安裝包直接在內核中就可以找到,
							##但是之前的版本需要手動導入把模塊導入,即在yum源裏添加這些軟件包
						##在第四部分使用ldirectord程序監視集羣節點裏會寫有例子
ip addr add 172.25.21.121/24 dev eth0		##給調度器一個vip
vim /etc/sysconfig/ipvsadm-config			##修改配置文件,讓服務重啓時寫入策略文件

在這裏插入圖片描述

##添加ipvsadm策略
ipvsadm -A -t 172.25.21.121:80 -s rr					##rr是輪詢算法
ipvsadm -a -t 172.25.21.121:80 -r 172.25.21.2:80 -g		##-g是DR模式
ipvsadm -a -t 172.25.21.121:80 -r 172.25.21.3:80 -g
systemctl start ipvsadm.service							##第一次啓動服務失敗,查看日誌發現啓動時缺少了一個文件/etc/sysconfig/ipvsadm
mkdir /etc/sysconfig/ipvsadm							##把這個文件建立之後再次啓動即可成功
systemctl restart ipvsadm
ipvsadm -ln												##查看策略,加上n不解析,命令響應時間變快

在這裏插入圖片描述

需要給兩個真實的web服務器加上vip,因爲數據時從真實服務器直接返還給客戶端的。

[root@server2 ~]# ip addr add 172.25.21.121/24 dev eth0
[root@server3 ~]# ip addr add 172.25.21.121/24 dev eth0

此時在一臺與lvs同一網絡下的主機測試,可能會出現無法輪詢的問題,因爲次是兩臺真實主機與lvs調度器都有vip,客戶端並沒有確定到底會訪問哪臺主機,所以這樣可能會出現直接訪問到主機的問題,因爲本地緩存到real主機的mac地址後會跳過lvs調度器直接對真實主機進行訪問,如果遭到DDOS惡意攻擊,主機就很可能會無法正常使用。
解決方法是在real主機上安裝基於mac地址的arptables來拒絕所有對172.25.21.121的訪問

配置方法:
yum install arptables.x86_64 -y
arptables -A INPUT -d 172.25.21.121 -j DROP			##將所有對121的訪問都丟棄掉
arptables -A OUTPUT -s 172.25.21.121 -j mangle --mangle-ip-s 172.25.21.2		##以121的ip輸出的數據的源ip是2
arptables-save > /etc/sysconfig/arptables			##手動導入策略到文件,不然就是臨時生效
systemctl start arptables.service

在這裏插入圖片描述

在一臺與lvs同一網段下的主機進行測試:
curl 172.25.21.121					##查看默認發佈文件,應該以輪詢的方式出現

在這裏插入圖片描述

三、隧道模式的配置

1.環境準備與DR模式的環境配置相同

2.隧道配置

(1)
lvs調度器的配置:(需要手動安裝隧道模塊)
ipvsadm -C							##在開始另一個模式的配置前,把原來的策略清除掉
lsmod								##查看本機安裝的模塊
modprobe ipip						##安裝隧道模塊
ip a								##查看是否多了一個隧道接口,此時處與關閉狀態
ip addr del 172.25.21.121/24 dev eth0		##把vip從eth0網卡上刪掉,並把vip添加到隧道接口上
ip addr add 172.25.21.121/24 dev tunl0
ip link set up tunl0				##啓用隧道接口,可以看到它的狀態不再是關閉並且有vip

在這裏插入圖片描述

##添加調度策略:
ipvsadm -A -t 172.25.21.121:80 -s rr					##選擇輪詢算法
ipvsadm -a -t 172.25.21.121:80 -r 172.25.21.2:80 -i		##-i表示隧道模式
ipvsadm -a -t 172.25.21.121:80 -r 172.25.21.3:80 -i
systemctl restart ipvsadm.service						##使策略生效
ipvsadm -ln

在這裏插入圖片描述

(2)
real服務器的設定(沒有特殊說明則兩臺服務器的設定都是相同的):
modprobe ipip							##同樣也要安裝隧道模塊
ip addr del 172.25.21.121/24 dev eth0	##將vip從eth0上刪除並添加到隧道上
ip addr add 172.25.21.121/24 dev tunl0
ip link set up tunl0					##啓用隧道接口
ip a									##查看隧道是否啓用

sysctl -a | grep rp_filter				##查看隧道反向過濾的策略,應該把這些策略全部關閉,否則在數據傳輸時可能會出現問題
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -a | grep rp_filter				##確認策略全部關閉

在這裏插入圖片描述

(3)
在一臺與lvs調度器同一網絡下的主機上進行測試:			##注意:這裏與DR模式同一網段的限制不同
curl 172.25.21.121								##查看默認發佈文件,應該以輪詢的方式出現

在這裏插入圖片描述

四、通過ldirectord程序從集羣中自動移除節點

1.作用:當一臺real服務器出現問題不能訪問時,將它從集羣中自動去除,使客戶端的訪問不受影響

2.環境準備(ip配置與DR模式相同):

在紅帽的企業7版本中沒有這個軟件,但是企業6中的軟件在這裏也可以用,但是需要配置高可用的依賴環境
首先進入7.5的鏡像目錄,找到高可用的具體位置,在7.5中把高可用和負載均衡放在同一個目錄下,並且沒有了企業6中的其他資源

在這裏插入圖片描述

配置yum源,在原來的yum源文件中配置即可
vim /etc/yum.repos.d/rhel.repo			##配置yum源
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.21.250/rhel7.5/addons/HighAvailability/
gpgcheck=0
yum repolist							##查看是否成功

在這裏插入圖片描述

3.ldirectord的管理使用:

(1)
首先安裝ldirectord,本機使用的軟件包爲ldirectord-3.9.5-3.1.x86_64.rpm,可以在企業6的鏡像中獲取這個軟件包
在yum源搭建好以後,注意在ldirectord軟件包的所在的目錄下纔可以直接通過yum安裝
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y			##安裝軟件
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm				##查看軟件安裝後產生的目錄與文件

在這裏插入圖片描述

(2)
開啓服務,因爲這是企業6上的軟件包,所以要用腳本的方式來啓動服務
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/			##把模板複製到配置文件目錄下
vim /etc/ha.d/ldirectord.cf											##修改配置文件

在這裏插入圖片描述

yum install httpd -y	##在調度器上安裝apache,當真實主機web1和web2都出問題時,讓客戶端訪問調度器並給客戶端一個提示信息
vim /var/www/html/index.html	
systemctl start httpd	##開啓服務

ip addr del dev tunl0					##清除掉上一個隧道模式實驗的ip並把隧道模塊卸載掉
ip addr del 172.25.21.121/24 dev tunl0
ip addr add 172.25.21.121/24 dev eth0
modprobe -r ipip
ipvsadm -C								##清空策略並重新寫入
ipvsadm -A -t 172.25.21.121:80 -s rr
ipvsadm -a -t 172.25.21.121:80 -r 172.25.21.2:80 -g
ipvsadm -a -t 172.25.21.121:80 -r 172.25.21.3:80 -g
cat /etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service

/etc/init.d/ldirectord start		##在啓動服務之前記得關掉上一個實驗的隧道接口並刪掉它的ip,不然可能會發生衝突
chkconfig --list					##查看所有以腳本方式運行的服務,一般不全爲off就是開機自啓動的

在這裏插入圖片描述

(3)測試:
效果應該爲:關閉一臺服務器,會自動訪問另一臺,如果兩臺都出問題,可以讓它訪問調度器,並給他一個訪問不到內容了的提示
curl 172.25.21.121

當調度器的內容無法訪問時,很有可能是因爲在之前的實驗中把apache的端口設爲了8080,改回80重啓服務即可

在這裏插入圖片描述

五、通過keepalived管理調度器和節點

1.作用:當調度器出問題時,使用keepalived服務管理,實現兩臺或者多臺調度器的主備,當主調度器(MASTER)出問題時,可以將訪問和服務都轉到備用調度器(BACKUP)上,並且還可以設置郵件提醒在出現問題時進行提示,並且MASTER在運行過程中會一直給BACKUP發送心電信號,來告知BACKUP自己的運行狀態良好。

2.環境準備

首先再開啓一臺虛擬機server4,因爲模擬調度器的主備就需要兩臺調度器,兩臺真實主機,把server4的ip設定爲172.25.21.4
##注意:此時,server1和server4是調度器,server2和server3是真實主機,沒有特殊說明ip都沒有變化
然後需要下載安裝包,這個安裝包可以直接在官網www.keepalived.org上下載
本機下載的是最新版keepalived-2.0.17.tar.gz
yum install gcc openssl-devel -y			##因爲需要編譯源碼,所以安裝編譯軟件
tar zxf keepalived-2.0.17.tar.gz			##解壓安裝包
./configure --prefix=/usr/local/keepalived --with-init=systemd			##進行編譯
make && make install		
ln -s /usr/local/keepalived/etc/keepalived/ /etc/						##創建一個軟鏈接

/etc/init.d/ldirectord stop					##關閉ldirectord服務並關閉開機自啓動,否則可能會發生衝突
chkconfig ldirectord off

3.服務配置

vim /etc/keepalived/keepalived.conf				##修改配置文件,兩個調度器的設置有所不同
server1的修改:
systemctl start keepalived						##開啓服務

在這裏插入圖片描述
在這裏插入圖片描述

server4文件的修改:

在這裏插入圖片描述
在這裏插入圖片描述

4.測試:

(1)將server1調度器關閉,可以看到vip和服務都被server4繼承,客戶端訪問不受影響
curl 172.25.21.121
server1上:systemctl stop keepalived			##關閉一個調度器,查看server4的日誌可以看到繼承vip等信息

在這裏插入圖片描述

(2)
再次將server1啓用,因爲我們設定它的優先級較高,所以服務會自動切換到server1上,我們可以查看server4的日誌

在這裏插入圖片描述

發佈了74 篇原創文章 · 獲贊 6 · 訪問量 5625
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章