企業級負載均衡集羣--LVS

LVS定義

Linux Virtual Server

即Linux虛擬服務器,是由章文嵩博士主導的開源負載均衡項目,目前LVS已經被集成到Linux內核模塊中

該項目在Linux內核中實現了基於IP的數據請求負載均衡調度方案

終端互聯網用戶從外部訪問公司的外部負載均衡服務器,把終端用戶的Web請求會發送給LVS調度器

調度器根據自己預設的算法決定將該請求發送給後端的某臺Web服務器

比如,輪詢算法可以將外部的請求平均分發給後端的所有服務器,終端用戶訪問LVS調度器雖然會被轉發到後端真實的服務器

但如果真實服務器連接的是相同的存儲,提供的服務也是相同的服務,最終用戶不管是訪問哪臺真實服務器

得到的服務內容都是一樣的,整個集羣對用戶而言都是透明的

最後根據LVS工作模式的不同,真實服務器會選擇不同的方式將用戶需要的數據發送到終端用戶

LVS工作模式

1、NAT模式

轉換一個ip地址,效率低

2、TUN模式

ip隧道

3、DR模式

調度器跟真正的服務器在同一網段,強行修改mac地址,並不改變ip地址

4、FullNAT模式

訪問來源ip跟訪問目的ip,效率低,麻煩,需要編輯內核

LVS的優點

1、高併發連接

LVS基於內核網絡層面工作,有超強的承載能力和併發處理能力,單臺LVS負載均衡器,可支持上萬併發連接

2、穩定性強

是工作在網絡4層之上僅作分發之用,這個特點也決定了它在負載均衡軟件裏的性能最強,穩定性最好,對內存和cpu資源消耗極低

3、成本低廉

硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺服務器和就能免費部署使用,性價比極高

4、配置簡單

LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理

5、支持多種算法

支持多種論調算法,可根據業務場景靈活調配進行使用

6、支持多種工作模型

可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題

7、應用範圍廣

LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括HTTP、數據庫、DNS、FTP服務等

lvs的缺點

工作在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用

LVS常見的四種算法

rr

輪詢算法,它將請求依次分配給不同的節點,各個節點均攤分配

這種算法簡單,但只適合各個節點處理性能差不多的情況

wrr

加權輪訓調度,它將依據不同節點的權值分配任務

權值較高的節點將優先獲得任務,並且分配到的連接數將比權值低的節點更多

相同權值的節點得到相同數目的連接數

lc

最小連接數調度,IPVS表存儲了所有活動的連接

LVS服務器會比較將連接請求發送到當前連接最少的節點

wlc

加權最小連接數調度,在節點性能差異較大的時候,可以爲節點自動調整權重

權重較高的節點承擔更大比例的連接

NAT模式

因爲請求與應答都要經過LVS服務器,所以訪問量過大LVS會形成瓶頸,一般要求10-20臺節點

注:(節點指後面的真實web服務器)

每臺節點服務器的網關地址必須是LVS服務器的內網地址

NAT模式支持對IP地址和端口進行轉換

即用戶請求的端口和真實服務器的端口可以不一致

NAT的特性

1、節點應該使用私有地址
2、節點的網關的必須指向LVS
3、節點IP和lvs服務器IP必須在同一網段內
4、請求和響應的報文都得經過LVS服務器;在高負載場景中,LVS服務器很可能成爲系統性能瓶頸

搭建環境

lVS(server1): 192.168.1.1/24 192.168.1.100/24
修改server1的ip地址,並且添加虛擬ip地址
server2: 192.168.1.2/24
gateway: 192.168.1.1/24
修改server2的ip地址,並且網關設定爲server1的ip地址
server3: 192.168.1.3/24
gateway: 192.168.1.1/24
修改server3的ip地址,並且網關設定爲server1的ip地址
systemctl stop firewalld
關閉 firewall
setenforce 0
關閉 SELinux

server1

modprobe ip_vs

加載 ip_vs 模塊

yum install -y ipvsadm

安裝 ipvsadm
vim /etc/sysconfig/ipvsadm-config
修改LVS服務的配置文件:no->yes
重啓服務的時候保存策略
systemctl start ipvsadm
首次開啓會報錯,無法開啓服務
cat /var/log/messages
在日誌裏面查看服務啓動錯誤的原因
touch /etc/sysconfig/ipvsadm
建立編寫策略的文件
systemctl start ipvsadm
再次開啓服務,正常
systemctl enable ipvsadm
開啓自啓

設置NAT模式的訪問策略

ipvsadm -A -t 192.168.1.100:80 -s rr

添加vip

-A:添加虛擬服務器

-t :指定vip及tcp端口

-s:指定算法

rr:輪詢

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.2:80 -m -w 1

ipvsadm -a -t 1192.168.1.100:80 -r 192.168.1.3:80 -m -w 1

-a :添加節點

-t :指定vip和端口

-r :指定節點ip及端口

-m:表示使用NAT模式

-w:設置權重

ipvsadm -ln

查看當前節點信息

systemctl restart ipvsadm

重啓服務

server2

yum install -y http
安裝 http
systemctl start httpd
開啓
systemctl enable httpd
開機自啓
vim /var/www/html/index.html
建立測試頁面
server2.example.com
測試頁面內容

server3

yum install -y http
安裝 http
systemctl start httpd
開啓
systemctl enable httpd
開機自啓
vim /var/www/html/index.html
建立測試頁面
server3.example.com
測試頁面內容

測試

curl 192.168.1.100
訪問192.168.1.100可以看到 server2 與 server3 輪流響應請求 

TUN模式

TUN模式簡稱隧道模式,隧道模式就是修改請求報文的首部IP,再加一層IP報頭

優點:DS和RS不需要在同一網段,可以實現不同網絡之間的訪問

數據包從客戶端發往DS服務器,DS服務器會根據調度策略確定要把請求給哪臺RS,會在數據包外面再加一層IP報頭

此時源ip從CIP變爲了vip

目的ip從VIP變爲了rip,數據包的請求來源就是ds調度器

請求的目的地是rs,rs在接收到數據包之後,請求包的來源本來是cip

但是加了一層數據包之後變爲了vip,而rs服務器上也有ip

所以rs會把ip包的報頭拆開,拆開發現請求的數據包訪問的還是自己的ip

這時rs就會回覆客戶端的請求(跟DR模式類似,只不過多加了一層ip報頭,封裝ip守護)

搭建環境

lVS(server1): 192.168.1.1/24
修改server1的ip地址
server2: 192.168.1.2/24
修改server2的ip地址
server3: 192.168.1.3/24
修改server3的ip地址
systemctl stop firewalld
關閉 firewall
setenforce 0
關閉 SELinux

server1

lsmod

查看模塊(虛擬機上沒有虛擬模塊),準備加入隧道模塊

lsmod | grep kvm

在虛擬機上查看沒有虛擬模塊,在真機上查看有虛擬機模塊

modprobe ipip
加入隧道模塊

ip a

多了一塊網卡 tunl0

ip addr add 192.168.1.100/24 dev tunl0

放到隧道網卡上面

ip a

查看網卡的狀態是down

ip link set up tunl0

激活網卡

設置TUN模式的訪問策略

ipvsadm -A -t 192.168.1.100:80 -s rr

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.2:80 -i -w 1

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.3:80 -i -w 1

systemctl restart ipvsadm

重啓服務使設置生效

cat /etc/sysonfig/ipvsadm

查看策略文件

server2

modprobe ipip

添加隧道模塊

ip addr add 192.168.1.100/24 dev tunl0

添加入口ip

ip link set up tunl0

激活網卡

修改反向過濾規則,防止丟包

sysctl -a | grep rp_filter

查看過濾表將所有的過濾規則都關閉

sysctl -w (規則)=0

sysctl -p

使設置生效

sysctl -a | grep rp_filter

再次查看

server3

modprobe ipip

添加隧道模塊

ip addr add 192.168.1.100/24 dev tunl0

添加入口ip

ip link set up tunl0

激活網卡

修改反向過濾規則,防止丟包

sysctl -a | grep rp_filter

查看過濾表將所有的過濾規則都關閉

sysctl -w (規則)=0

sysctl -p

使設置生效

sysctl -a | grep rp_filter

再次查看

測試

 curl 192.168.1.100
 訪問192.168.1.100可以看到 server2 與 server3 輪流響應請求 

DR模式

客戶端向目標vip發出請求 -> LVS接收 -> LVS根據負載均衡算法選擇一臺活躍的的節點,將此節點的ip所在網卡的mac地址作爲目標mac地址,發送到局域網 -> 節點在局域網中收到這個幀,拆開後發現目標ip(VIP)與本地匹配,於是處理這個報文 -> 隨後重新封裝報文,發送到局域網 -> 此時ip包的目標ip是客戶端,源ip是自己的vip地址

工作原理

1、通過在調度器LB上修改數據包的目的MAC地址實現轉發

注意源地址仍然是CIP,目的地址仍然是VIP地址

2、請求的報文經過調度器,而RS響應處理後的報文無需經過調度器LB,因此併發訪問量大時使用效率很高(和NAT模式比)

3、因爲DR模式是通過MAC地址改寫機制實現轉發,因此所有RS節點和調度器LB只能在一個局域網裏面

4、RS主機需要綁定VIP地址在LO接口上,並且需要配置ARP抑制

5、RS節點的默認網關不需要配置成LB,而是直接配置爲上級路由的網關,能讓RS直接出網就可以

6、由於DR模式的調度器僅做MAC地址的改寫,所以調度器LB就不能改寫目標端口,那麼RS服務器就得使用和VIP相同的端口提供服務

搭建環境

lVS(server1): 192.168.1.1/24 192.168.1.100/24
修改server1的ip地址,並且添加虛擬ip地址
server2: 192.168.1.2/24 192.168.1.100/32
修改server2的ip地址,並且添加虛擬ip地址
server3: 192.168.1.3/24 192.168.1.100/32
修改server3的ip地址,並且添加虛擬ip地址
systemctl stop firewalld
關閉 firewall
setenforce 0
關閉 SELinux

server1

yum install -y ipvsadm

安裝 ipvsadm
vim /etc/sysconfig/ipvsadm-config
修改LVS服務的配置文件:no->yes
重啓服務的時候保存策略
systemctl start ipvsadm
首次開啓會報錯,無法開啓服務
cat /var/log/messages
在日誌裏面查看服務啓動錯誤的原因
touch /etc/sysconfig/ipvsadm
建立編寫策略的文件
systemctl start ipvsadm
再次開啓服務,正常
systemctl enable ipvsadm
開啓自啓

設置DR模式的訪問策略

ipvsadm -A -t 192.168.1.100:80 -s rr

添加vip

-A:添加虛擬服務器

-t :指定vip及tcp端口

-s:指定算法

rr:輪詢

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.2:80 -g -w 1

ipvsadm -a -t 1192.168.1.100:80 -r 192.168.1.3:80 -g -w 1

-a :添加節點

-t :指定vip和端口

-r :指定節點ip及端口

-m:表示使用NAT模式

-w:設置權重

ipvsadm -ln

查看當前節點信息

systemctl restart ipvsadm

重啓服務

server2

yum install -y http
安裝 http
systemctl start httpd
開啓
systemctl enable httpd
開機自啓
vim /var/www/html/index.html
建立測試頁面
server2.example.com
測試頁面內容
yum install -y arptables
安裝 arptables
arptables -nL
查看策略

設置arptables的訪問策略

arptables -A INPUT -d 192.168.1.100 -j DROP
192.168.1.100來源輸入全部丟棄
arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.2
192.168.1.100輸出轉化爲192.168.1.2
cat /etc/sysconfig/arptables
查看規則
arptables-save > /etc/sysconfig/arptables
保存策略
cat /etc/sysconfig/arptables
再次查看,策略已保存
systemctl restart arptables
重啓服務

server3

yum install -y http
安裝 http
systemctl start httpd
開啓
systemctl enable httpd
開機自啓
vim /var/www/html/index.html
建立測試頁面
server3.example.com
測試頁面內容

yum install -y arptables
安裝 arptables
arptables -nL
查看策略

設置arptables的訪問策略

arptables -A INPUT -d 192.168.1.100 -j DROP
192.168.1.100來源輸入全部丟棄
arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.3
192.168.1.100輸出轉化爲192.168.1.3
cat /etc/sysconfig/arptables
查看規則
arptables-save > /etc/sysconfig/arptables
保存策略
cat /etc/sysconfig/arptables
再次查看,策略已保存
systemctl restart arptables
重啓服務

測試

 curl 192.168.1.100
 訪問192.168.1.100可以看到 server2 與 server3 輪流響應請求 
 如果輪詢未能正常響應,使用命令 arp -d 192.168.1.100 清除緩存
 arp -an | grep ip
 查看緩存是否存在
 再次curl 192.168.1.100即可正常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章