負載均衡----LVS


LVS的三種工做模式
LVS-NAT:
LVS-NAT方式的思路很簡單,它利用調度服務器實施網絡層數據欺騙,它把客戶端發送到調度服務器的數據IP包的目標地址進行了替換。
LVS-DR:
這個方法的思路是實施數據鏈路層數據欺騙,修改網絡幀數據的Mac地址。
LVS-TUN:
這個方法是爲了突破LVS-DR同一網段內的限制所提出來的。它不作任何欺騙,而是光明正大的交流,在網絡層進行了二次包裝前端

 

各類模式的優缺點mysql

VS/NAT的優缺點
<1>優勢:
對後端的操做系統沒有要求;
只須要一個IP地址配置在調度器上,服務器組能夠用私有IP地址;
支持端口映射;
<2>缺點:
請求和響應都須要經過LB,伸縮能力有限(通常後面能鏈接10臺左右服務器)
須要服務器和LB在同一個局域網中;
須要將服務器的默認網關設置爲LB; linux


VS/TUN的優缺點
<1>優勢:
不須要調度應答報文,負載能力強;
服務器和調度器能夠不在同一個VLAN中;
支持廣域負載均衡;
<2>缺點:
全部的服務器必須支持「IP Tunneling」協議,需安裝內核模塊,安裝複雜;
創建IP隧道的開銷大;
服務器須要聯通外網,風險較大;
不支持端口映射; 算法


VS/DR的優缺點
<1>優勢:
與TUN相比,沒有IP隧道的開銷,性能較高;
<2>缺點:
要求LB和服務器都有一塊網卡連在同一個物理網段中;
不支持端口映射; sql


使用場景
VS/NAT:小併發的實驗性應用、mysql集羣;
VS/TUN:廣域網負載;
VS/DR:大衆方式;

vim

 

 LVS的調度算法有十種,其中靜態算法4種,動態算法6種。後端

靜態算法:不考慮後端服務器的鏈接狀況和負載狀況,只根據算法進行調度。bash

1.RR(輪叫調度  round robin)服務器

        調度器經過」輪叫」調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。網絡

 

2.WRR(加權輪叫調度 Weight RR)

        調度器經過「加權輪叫」調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

 

3.DH 目標地址散列調度(Destination  Hash)

        根據請求的目標IP地址,做爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

 

4.SH 源地址散列調度(Source Hash)

         源地址散列」調度算法根據請求的源IP地址,做爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

 

動態算法:前端的調度器會根據後端真實服務器的實際鏈接狀況來分配請求

1.LC 最少連接

        調度器經過」最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用」最小鏈接」調度算法能夠較好地均衡負載。

 

2.WLC 加權最少連接

        在集羣系統中的服務器性能差別較大的狀況下,調度器採用「加權最少連接」調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

 

3.SED 最短延遲調度(Shortest Expected Delay)

        在WLC上改進,由於非活躍連接對服務器形成的負載並不高,所以此算法再也不考慮非活動狀態,使用Overhead =(活躍連接數+1)/權重。得出數值最小的接受下一個前端發來的請求。

 

4..NQ 永不排隊/最少隊列調度(Never Queue Scheduling NQ)

        無需隊列,若是有 realserver=0的服務器,則直接把前端的請求發給他,而不通過sed算法。這樣就保證了不會有服務器是空間的。假如一臺服務器有不少非活動連接,假如這些連接是dns經過udp創建起來的,那實質上他實際上是沒什麼負載的,可是在NQ下面則是不會將請求發往該服務器,這樣有可能會形成資源的浪費。而假如這些連接是經過http創建起來的,就要考慮非活動連接對服務器帶來的壓力。

 

5.. LBLC:基於局部性的最少連接(locality-Based Least Connections)

        目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,則將請求發往該服務器,若服務器不存在或超載,則按照最少連接原則選出一臺鏈接數最少的服務器,並將請求發往給它。

 

6. LBLCR:帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication)

        目前主要用於Cache集羣系統。與LBLC不一樣的是,LBLCR是將目標地址與服務器組創建關係,根據最小連接原則選出服務器,假如沒有超載,則把請求發往給該服務器。假如超載,則再在服務器集羣中根據最小連接原則選出服務器,並將請求發往給該服務器。

 

LVS/DR模式配置方式

關閉selinux

setenforce  0

防火牆開放端口

firewall-cmd  --add-port=80/tcp  --permanent

firewall-cmd  --reload

 

配置調度服務器

加載ip_vs模塊

modprobe ip_vs    

 

查看相關信息

cat /proc/net/ip_vs

 

安裝ipvsadm

yum  -y  install  ipvsadm

 

在負載均衡服務器上轉發編輯腳本

#!/bin/bash
#
ifconfig ens33:0 172.16.1.189 broadcast 172.16.1.189 netmask 255.255.255.255 up #添加虛擬地址的接口
route add -host 172.16.1.189 dev ens33:0                                                                    #給ens33:0添加路由
ipvsadm -C                                                                                                                     #清除內核虛擬服務器表中的全部記錄
ipvsadm -A -t 172.16.1.189:80 -s wlc                                                                             #建立虛擬服務器
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.11:80 -g                                                       #添加服務器節點
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.12:80 -g                                                       #添加服務器節點
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.13:80 -g                                                       #添加服務器節點
ipvsadm -Ln                                                                                                                    #查看節點狀態,加個「-n」將以數字形式顯示地址、端口信息

 

//選項註釋:
"-A"表示添加虛擬服務器,
"-a"表示添加真實服務器
"-t"用來指定VIP地址及TCP端口
"-r"用來指定RIP地址及TCP端口
"-s"用來指定負載調度算法——rr(輪詢)、wrr(加權輪詢)、lc(最少鏈接)、wlc(加權最少鏈接)
"-m"表示使用NAT羣集模式("-g"是DR模式,"-i"是TUN模式)

 

查看網卡是否已建立虛擬接口

ifconfig

 

在節點機器上編輯轉發腳本

#!/bin/bash
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.1.189 broadcast 172.16.1.189 netmask 255.255.255.255 up          #在lo上配置虛擬接口
route add -host 172.16.1.189 dev lo:0                                                                             #配置虛擬接口的路由
sysctl -p &>/dev/null

 

查看網卡是否已經建立虛擬接口

Ifconfig

 

測試

在除了LVS集羣的機器上訪問,切記不可在LVS環境本地進行測試,會訪問不到。例如這裏的一臺調度器和三臺後端服務器都不能做爲測試環境。

for n in `seq 10000`;do curl 172.16.1.189:/test/;sleep 1;done

得出下圖證實負載已經正常運行

 

 

LVS/NAT模式配置方式

搭建環境
爲了防止selinuxiptables對實驗的影響,咱們在實驗以前先將全部selinux策略臨時調爲0,將iptables服務關閉

  • 調度器:VIP192.168.1.89/24   DIP172.16.1.89/24
  • 節點rs1:192.168.1.89/24 網關指向調度器DIP172.16.1.7/24
  • 節點rs2:192.168.1.89/24 網關指向調度器DIP172.16.1.8/24
  • 節點rs3:192.168.1.89/24 網關指向調度器DIP172.16.1.9/24


因爲調度器上須要轉發請求,因此須要在內核中開啓轉發功能:
在調度器上,執行以下步驟
vim /etc/sysctl.conf               #修改這一行,將0改成1,表示開啓轉發功能

net.ipv4.ip_forward = 1

sysctl -p                                 #讀取配置文件,顯示如下內容證實修改爲功

net.ipv4.ip_forward = 1


添加調度器
在調度器上,執行如下步驟

yum -y install ipvsadm     #安裝ipvaadm工具

 

添加節點

在調度器上,執行如下步驟

ipvsadm -A -t 192.168.1.89:80 -s rr   #設置調度器,調度算法爲rr(輪詢)

ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.7:80 -m

ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.8:80 -m

ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.9:80 -m

 

查看狀態

ipvsadm -Ln

P Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.89:80 rr

  -> 172.16.1.7:80                Masq    1      0          2         

  -> 172.16.1.8:80                Masq    1      0          2         

  -> 172.16.1.9:80                Masq    1      0          3  

 

測試

curl   192.168.1.89 

相關文章
相關標籤/搜索