負載均衡 lvs

2021-08-03 12:27:51 字數 4522 閱讀 6454

常用的負載均衡開源軟體有nginx、lvs、haproxy,商業的硬體負載均衡裝置f5、netscale。

負載均衡的架構和原理很簡單,就是當使用者的請求過來時,會直接分發到director server上,然後它把使用者的請求根據設定好的排程演算法,智慧型均衡地分發到後端真正伺服器上。為了避免不同機器上使用者請求得到的資料不一樣,需要用到共享儲存,這樣保證所有使用者請求的資料是一樣的。

lvs是linux virtual server的簡稱,這是開源軟體專案,現在lvs已經是linux核心標準的一部分。lvs架構從邏輯上可分為排程層、server集群層和共享儲存。

lvs由2部分程式組成,包括ipvs和ipvsadm

lvs-nat模型特性:

(1)rs應該使用私有位址,rs的閘道器必須指向dip。

(2)dip和rip必須在同乙個網段內。

(3)請求和響應報文都需要經過director server,高負載場景中,director server易成為效能瓶頸。

(4)支援埠對映。

(5)缺陷:對director server壓力會比較大,請求和響應都需經過director server。

lvs-dr模型的特性:

rs可以使用私有位址,也可以是公網位址,如果使用公網位址,此時可以通過網際網路對rip進行直接訪問。

rs跟director server必須在同乙個物理網路中。

所有的請求報文經由director server,但響應報文必須不能經過director server。

不支援位址轉換,也不支援埠對映。

rs可以是大多數常見的作業系統 。

rs的閘道器絕不允許指向dip(因為我們不允許他經過director)

rs上的lo介面配置vip的ip位址。

缺陷:rs和ds必須在同一機房中。

特點1的解決方案:

在前端路由器做靜態位址路由繫結,將對vip的位址僅路由到director server。如果使用者沒有設定 路由的許可權,可以在arp層次做,修改rs上的核心引數(arp_ignore和arp_announce),將rs上的vip配置在lo介面別名上,並限制其不能響應對vip位址解析請求。

另外還有lvs-tun模型 ,其實企業中最常用的是dr實現方式,而nat配置上比較簡單和方便。

輪詢演算法假設所有的伺服器處理能力都是一樣的,排程器會將所有的請求平均分配給每乙個真實伺服器。

可以設定權重,權重越高,那麼分發的請求數越多。

這個演算法會根據後端rs的連線資料來決定把請求分發給誰。比如rs1連線數比rs2連線數少,那麼請求就優先發給rs1.

加權最少鏈結數

該演算法先根據請求的目標ip位址尋找最近的目標ip位址所有使用的伺服器,如果這台伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器。

記錄的不是目標ip與一台伺服器之間的連線記錄,它會維護乙個目標ip到一組伺服器之間的對映關係,防止單點伺服器負載過高。

三颱伺服器,一台作為director,兩台作為real server,director有乙個外網網絡卡(172.16.254.200)和乙個內網ip(192.168.0.8),兩個real server上只有內網ip(192.168.0.18)和(192.168.0.28),並且需要把兩個real server的內網閘道器配置為director的內網ip(192.168.0.8)。

兩個 real server 上都安裝 nginx 服務

# yum install -y nginx

director 上安裝 ipvsadm

# yum install -y ipvsadm

director上編輯nat實現指令碼 

# 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

echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

# director設定 nat 防火牆

iptables -t nat -f

iptables -t nat -x

iptables -t nat -a postrouting -s 192.168.0.0/24 -j masquerade

# director設定 ipvsadm

ipvsadm='/sbin/ipvsadm'

$ipvsadm -c

$ipvsadm -a -t 172.16.254.200:80 -s wrr

$ipvsadm -a -t 172.16.254.200:80 -r 192.168.0.18:80 -m -w 1

$ipvsadm -a -t 172.16.254.200:80 -r 192.168.0.28:80 -m -w 1

儲存後,在director上直接執行這個指令碼就可以完成lvs-nat配置。

檢視ipvsadm設定的規則:

ipvsadm -ln
通過瀏覽器測試2臺機器上的web內容為了區分開,我們可以把nginx的預設而修改一下。

在 rs1 上執行

# echo "rs1rs1" >/usr/share/nginx/html/index.html

在 rs2 上執行

# echo "rs2rs2" >/usr/share/nginx/html/index.html

注意:一定要在兩台rs上設定閘道器的ip為director和內網ip。

三颱機器:

(1)director節點:  (eth0 192.168.0.8  vip eth0:0 192.168.0.38)

(2)real server1: (eth0 192.168.0.18 vip lo:0 192.168.0.38)

(3)real server2: (eth0 192.168.0.28 vip lo:0 192.168.0.38)

兩個 real server 上都安裝 nginx 服務

# yum install -y nginx

director 上安裝 ipvsadm

# yum install -y ipvsadm

# vim /usr/local/sbin/lvs_dr.sh

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/sbin/ipvsadm

vip=192.168.0.38

rs1=192.168.0.18

rs2=192.168.0.28

ifconfig eth0:0 down

ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev eth0:0

$ipv -c

$ipv -a -t $vip:80 -s wrr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 3

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

執行指令碼 。

# vim /usr/local/sbin/lvs_dr_rs.sh

#! /bin/bash

vip=192.168.0.38

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

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

執行指令碼 。

LVS負載均衡

一 lvs簡介 lvs linux virtual server 即linux虛擬伺服器,是由章文嵩博士主導的開源負載均衡專案,目前lvs已經被整合到linux核心模組中。該專案在linux核心中實現了基於ip的資料請求負載均衡排程方案,其體系結構如圖1所示,終端網際網路使用者從外部訪問公司的外部負...

LVS負載均衡

應用層7 nginx 軟體 表示層6 會話層5 傳輸層4 lvs 核心 網路層3 鏈路層2 物理層1 整個網際網路建立在下一跳的模式下 端點間tcp傳輸過程中 解析資料報需要成本 學習機制 路由器 三層,只關心ip和路由表 lvs伺服器 四層,只關心port,狀態 nginx 七層,關心socket...

負載均衡之lvs

集群 cluster 將一組計算機軟 硬體連線起來,高度緊密的協作完成計算工作,其中的單個計算機通常稱為節點。負載均衡集群 load balancing 通過負載均衡器,將負載盡可能平均分攤處理。lvs linux virtul server linux虛擬服務,分為三層結構 排程器 上面的虛擬ip...