1. 程式人生 > >高負載叢集實戰之lvs負載均衡-技術流ken

高負載叢集實戰之lvs負載均衡-技術流ken

LVS的英文全稱是Linux Virtual Server,即Linux虛擬伺服器。

特點

跨平臺:window,linux

作用

實現負載均衡

核心元件

ip_vslinux的核心功能模組,工作在核心,依賴該核心模組實現負載均衡功能

ipvsadm:應用層程式,該程式可以和核心中的ip_vs模組通訊,實現對負載均衡的管理和控制

優點

LVS主要用於多伺服器的負載均衡。它工作在網路層,可以實現高效能,高可用的伺服器叢集技術。它廉價,可把許多低效能的伺服器組合在一起形成一個超級伺服器。它易用,配置非常簡單,且有多種負載均衡的方法。它穩定可靠,即使在叢集的伺服器中某臺伺服器無法正常工作,也不影響整體效果。另外可擴充套件性也非常好。

補充

keepalived也可以對ip_vs進行管理

2.相關術語

1. DS:Director Server。指的是前端負載均衡器節點。2. RS:Real Server。後端真實的工作伺服器。3. VIP:向外部直接面向用戶請求,作為使用者請求的目標的IP地址。4. DIP:Director Server IP,主要用於和內部主機通訊的IP地址。5. RIP:Real Server IP,後端伺服器的IP地址。6. CIP:Client IP,訪問客戶端的IP地址。

3.LVS的工作模式

DR

NAT

TUN

FULLNAT

4.LVS的排程演算法

【所謂的演算法:DR按照什麼規則來從多個

RS中篩選出來一個給使用者提供服務】

動態演算法:DR會實時的檢測後端的RS的負載情況,將新使用者的請求排程到一個負載較少的RS之上

靜態演算法:無論後端的RS當前的伺服器負載情況怎麼樣,都安裝固定的方式來給RS分配使用者請求

靜態演算法

rrRound Bobin,輪詢,將客戶端的請求交替分配給RS

wrrWeighted Round Bobin,加權輪詢,根據RS的效能不同,讓他們來承擔不同比例的使用者請求

dhDestination Hashing,目標地址雜湊排程,基於使用者所請求的地址做雜湊表

作用:實現將對於相同的地址(rs)的請求排程到同一個RS之上

使用場景:適應於前端是一個

DR,後端是多個cache的時候

shSource Hashing,源地址的雜湊排程,基於使用者的ip地址做雜湊表

作用:實現將同一個客戶端排程到相同的RS之上

動態演算法

lcLeast Connection,最小連線數排程,本質是排程到當前負載最低的主機上

overhead=active*256+inactive

wlcWeighted Least Connection,加權最小連線數排程,本質是排程到當前負載最低的主機上

overhead=(active*256+inactive)/weight

SED:是wlc補充,為了降低overhead出現重複的情況

overhead=((active+1)*256+inactive))/weight

NQNever queue,演算法基本和sed相同,為了避免效能差的RS長時間處於空閒狀態

lblc:基於目標地址的最小連線數排程,這種演算法那是lcdh的組合,適應於cache場景

lblcr:帶有複製功能的lblc

5.ipvsadm的使用格式

ipvsadm的使用格式
ipvsadm -A|E -t|u|f service-address:port [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]    <<新增一個lvs伺服器  
ipvsadm -D -t|u|f service-address                  <<刪除一個lvs伺服器
ipvsadm -C <<清空規則表
ipvsadm -R <<從標準輸入恢復規則表
ipvsadm -S [-n]                          <<使用service ipvsadm save即可
ipvsadm -a|e -t|u|f service-address -r server-address [options] <<新增一個後端web服務
ipvsadm -d -t|u|f service-address -r server-address          <<刪除一個後端web服務
ipvsadm -L|l [options]                              << 顯示lvs中的規則表
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h

6.ipvsad的選項引數

-A:新增一個虛擬服務(新增vip)[相當於負載均衡哪個伺服器]
-E:編輯修改一個虛擬服務
-D:刪除虛擬服務
-C:清空規則表
-R:從標準輸入恢復規則表
--save|-S:將當前記憶體中的規則儲存到標準輸出
-a:指定在虛擬服務中新增RS節點 [新增後端的web伺服器]
-e:指定在虛擬服務中編輯修改RS節點
-d:指定在虛擬服務中刪除RS節點
-L|-l:顯示lvs中的規則表 << ipvsadm -L -n --stats
-Z:將計數器清零
-t service-address[:port]:該規則是對tcp協議的請求做排程
-u service-address[:port]:該規則是對udp協議的請求做排程
-f:表示這個請求是經過iptables所標記過的服務型別
-r: 指定真實伺服器的地址(remote)
-s scheduler:指定該規則要用的排程演算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-p [time]:指定在多次時間以內,將相同的客戶端排程到相同的後端節點之上,預設時間300s
-w:設定RS節點的權重
-g:指定用DR模式(預設)
-i:指定用tunnel模式
-m:指定用nat模式

7.ipvsadm主要配置檔案

說明:lvs主要檔案說明

/etc/rc.d/init.d/ipvsadmsysV風格服務管理指令碼

/etc/sysconfig/ipvsadm-config:配置檔案

/sbin/ipvsadm:用於配置lvs規則的工具

/sbin/ipvsadm-restore:恢復或者讀取規則到記憶體的工具

/sbin/ipvsadm-save:儲存記憶體中的規則的工具

【預設情況下,所配置的規則都是儲存在記憶體中的】

8.LVS的DR模式實戰

1.準備環境

centos7.5

DR1  172.20.10.2/28

WEB1 172.20.10.8/28

WEB2 172.20.10.8/28

VIP  172.20.10.11/28

 2.配置伺服器端

安裝依賴包

[[email protected] ~]# yum install libnl* popt* kernel-devel -y

給安裝的核心開發庫做連線

[[email protected] ~]# ln -s /usr/src/kernels/3.10.0-862.el7.x86_64/ /usr/src/linux/

安裝lvs

[[email protected] ~]# yum install ipvsadm -y

新增一個vip

[[email protected] ~]# ip a a 172.20.10.11/28 dev eth0

新增一個虛擬伺服器

[[email protected] ~]# ipvsadm -A -t 172.20.10.11:80 -s rr

在虛擬伺服器中國新增後端伺服器

[[email protected] ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.9:80 -w 1 -g
[[email protected] ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.8:80 -w 1 -g

檢視規則

[[email protected] ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.20.10.11:80                     0        0        0        0        0
  -> 172.20.10.8:80                      0        0        0        0        0
  -> 172.20.10.9:80                      0        0        0        0        0

3.配置客戶端

兩臺客戶端配置保持完全相同,除了測試檔案之外。

安裝配置web伺服器

[[email protected] ~]# yum install httpd -y
[[email protected] ~]# echo "this is 172.20.10.9 for test" >/var/www/html/index.html
[[email protected] ~]# systemctl restart http

給RS繫結虛擬IP

[[email protected] ~]# ip a a 172.20.10.11/32 dev lo:0

在RS做ARP抑制

[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
[[email protected] ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

9.瀏覽器測試

輸入VIP地址

進行重新整理測試

測試完成!

10.補充

關於arp抑制

作用:設定不對某些arp請求做應答

實現原理:修改核心引數 /proc/sys/net/ipv4/conf/

控制方式1arp_ignore

0:預設,表示的當該主機收到arp請求,只有該主機有所請求的哪個IP地址,就會給對方做成應答

1:只對哪些請求的目標IP是當前主機的網絡卡介面(這個介面就是插著網線的介面)上的地址的時候,才會做出應答

控制方式2arp_announced

作用:限制當前主機做arp應該的條件(也就是限制當用戶所請的ip是哪個IP的時候,才做arp應答)

0:預設值,表示在任意網路介面上的IP都可以做arp應答

1:優先使用本地的介面做arp應答

2:優先使用子介面做arp應答