1. 程式人生 > >負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建

負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建

分網 direct 加工 ip tunnel 不同的 穩定 ffffff star 客戶

負載均衡集群介紹

?主流開源軟件LVS、keepalived、haproxy、nginx等

?其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認為是4層,也可以當做7層使用

?keepalived的負載均衡功能其實就是lvs

?lvs這種4層的負載均衡是可以分發除80外的其他端口通信的,比如MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種

?相比較來說,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求


LVS介紹

?LVS是由國人章文嵩開發

?流行度不亞於apache的httpd,基於TCP/IP做的路由和轉發,穩定性和效率很高

?LVS最新版本基於Linux內核2.6,有好多年不更新了

?LVS有三種常見的模式:NAT、DR、IP Tunnel

?LVS架構中有一個核心角色叫做分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)

NAT模式
技術分享圖片

?這種模式借助iptables的nat表來實現

?用戶的請求到分發器後,通過預設的iptables規則,把請求的數據包轉發到後端的rs上去

?rs需要設定網關為分發器的內網ip

?用戶請求的數據包和返回給用戶的數據包全部經過分發器,所以分發器成為瓶頸

?在nat模式中,只需要分發器有公網ip即可,所以比較節省公網ip資源

IP Tunnel模式
技術分享圖片

?這種模式,需要有一個公共的IP配置在分發器和所有rs上,我們把它叫做vip

?客戶端請求的目標IP為vip,分發器接收到請求數據包後,會對數據包做一個加工,會把目標IP改為rs的IP,這樣數據包就到了rs上

?rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己

LVS DR模式

技術分享圖片

?這種模式,也需要有一個公共的IP配置在分發器和所有rs上,也就是vip

?和IP Tunnel不同的是,它會把數據包的MAC地址修改為rs的MAC地址

?rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己

LVS的調度算法
?輪詢 Round-Robin rr

?加權輪詢 Weight Round-Robin wrr

?最小連接 Least-Connection lc

?加權最小連接 Weight Least-Connection wlc

?基於局部性的最小連接 Locality-Based Least Connections lblc

?帶復制的基於局部性最小連接 Locality-Based Least Connections with Replication lblcr

?目標地址散列調度 Destination Hashing dh

?源地址散列調度 Source Hashing sh


LVS NAT模式搭建

準備3臺機器
A機器為分發器,也叫調度器(簡寫為dir)
A機器 192.168.177.7 外網地址為192.168.153.55

B機器 192.168.177.100
C機器 192.168.177.200
B機器和C機器的網關需要設置為192.168.177.7

關閉防火墻,三臺機器執行如下的命令

systemctl stop firewalld
systemc disable firewalld
systemctl start  iptables
iptables -F
service iptables save
setenforce 0

分發器上安裝ipvsdam
yum install -y ipvsdam

分發器上編輯腳本
vim /usr/local/sbin/lvs_nat.sh

添加如下的內容``
#! /bin/bash
#director 服務器上開啟路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
#關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
#註意區分網卡名字,我的兩個網卡分別為ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
#director 設置nat防火墻
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.177.0/24 -j MASQUERADE
#director設置ipvsadm
IPVSADM=‘/usr/sbin/ipvsadm‘
$IPVSADM -C
$IPVSADM -A -t 192.168.153.55:80 -s wlc -p 3
$IPVSADM -a -t 192.168.153.55:80 -r 192.168.177.100:80 -m -w 1
$IPVSADM -a -t 192.168.153.55:80 -r 192.168.177.200:80 -m -w 1

兩臺rs都需要安裝rs,並且設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結果
這是我的實驗結果,成功分發
[root@localhost yang]# curl 192.168.153.55
backup backup this is backup.
[root@localhost yang]# curl 192.168.153.55
master master this is master
[root@localhost yang]# curl 192.168.153.55
backup backup this is backup.
[root@localhost yang]# curl 192.168.153.55
master master this is master
[root@localhost yang]# curl 192.168.153.55
backup backup this is backup.

負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建