天天看點

LVS叢集詳解

一、什麼是叢集

LVS(Linux Virtual Server)Linux虛拟伺服器,将多台虛拟主機組織起來滿足同一個需求。由國人章文嵩開發,通過LVS提供的負載均衡可實作一個高性能、高可用的伺服器群集,進而以低成本實作最優的服務性能。

二、叢集類型  

    LB:Load balancing    負載均衡叢集

    HA:High Availavility    高可用叢集

    HP:High Performace     高性能叢集

三、lvs的常用叢集方式及其詳解

1、lvs是由使用者空間指令和工作在核心上的netfilter的INPUT鍊上鈎子函數所組成,可根據使用者自定義叢集實作轉發。

2、lvs術語

CIP:客服端使用的IP位址

VIP:虛拟伺服器IP位址

DIP:director用于和Real server之間進行通信的IP位址

RIP:後端real server的IP位址

RS:real server   

3、lvs類型

lvs-nat:lvs network address translation :lvs網絡位址轉換

lvs-dr:director routing 直連路由   

lvs-tun:tuneling 隧道

lvs-fullnat:功能更加強大的網絡位址轉換  

lvs-nat特性:

    多源ip的目标位址轉換,通過将請求封包中的目标位址和目标端口修改為從後端主機中挑選出的某RS的RIP和端口實作轉發。

    ①RIP和DIP需在同一個網絡中,且需使用私有位址,RS的網關需指向DIP,保證響應封包經過RS進行轉發,此模型中VS容易成為單點故障,成為系統的瓶頸。

    ②請求封包和相應封包都經由Director進行轉發

    ③支援端口映射

    ④VS需為Linux,RS可以是OS  

LVS-DR特性: 

    通過為請求封包重新封裝MAC位址進行轉發,源MAC位址是DIP所在接口的MAC位址,目标MAC位址為排程器挑選出來的後端RS的MAC位址,IP首部不會發生改變。

    ①確定前端路由器将目标IP為vip的請求封包發往director

    ②RS的RIP可以是私網位址也可以是公網位址

    ③RS和director必須在同一個網絡中

    ④請求封包必須經由排程器,但響應封包則一定不能有排程器轉發,而是直接有real server響應客服端請求

    ⑤不支援端口映射,RS可使用OS    

確定前端路由器将目标IP為vip的請求封包發往director

解決方案:

    ①在路由器上靜态綁定VIP和director的MAC位址,禁止real server響應 arp請求,禁止RS的vip通告

    ②arptables 

    ③修改RS的核心參數,并将VIP綁定lo的别名上,arp_ignore,arp_announce   

限制響應級别:arp_announce 

0:預設,把本機所有的接口資訊向每個接口通告;

1:盡量避免向非本網絡通告

2:總是避免;符合我們需要 

限制通告級别:arp_ignore

0:預設使用本地任意接口上配置的位址進行響應 

1:僅在請求的目标ip配置在本地主機的接口封包的接口上是,不給與響應

LVS-tun特性: 

    通過轉發方式,不修改請求封包的ip首部,源ip為cip,目标ip為VIP,而是在源ip基礎之上再封裝一個ip首部,源ip為DIP,目标ip為排程器挑選的RS的VIP。

    ①RIP,DIP,VIP全為公網

    ②RS的網關不能指向DIP 

    ③請求封包經由director轉發,但響應封包直接發往CIP

    ④不支援端口映射

    ⑤RS必須支援隧道功能   

LVS常用的排程算法:

靜态的排程算法: 

    RR:Round Robin  #輪詢,輪轉

    WRR:Weighted Round Robin #權重輪詢,根據後端每台real server的能承擔的負載進行配置設定不同的請求個數

    SH:Source Hashing #源位址哈希,将來自于同一台IP位址的請求發往同一台後端的real server伺服器

    DH:Destination Hashing #目标位址哈希,将發往同一個目标位址的請求始終發往前端排程器挑選出來的real server   

動态的排程算法:根據算法及其RS目前負載情況進行排程

    LC:least connections,最少連接配接 

    WLC:weight least connections,權重最少連接配接 

    SED:shortest expections delay   

    NQ:never queue  

    LBLC:基于本地的最少連接配接

    LBLCR:帶複制功能的基于本地的最少連接配接

ipvs指令: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<code>ipvsadm -A|E -t|u|f service-address [-s scheduler]</code>

<code>               </code><code>[-p [timeout]] [-M netmask] [-b sched-flags]</code>

<code>       </code><code>ipvsadm -D -t|u|f service-address</code>

<code>       </code><code>ipvsadm -C</code>

<code>       </code><code>ipvsadm -R</code>

<code>       </code><code>ipvsadm -S [-n]</code>

<code>       </code><code>ipvsadm -a|e -t|u|f service-address -r server-address</code>

<code>               </code><code>[-g|i|m] [-w weight] [-x upper] [-y lower]</code>

<code>       </code><code>ipvsadm -d -t|u|f service-address -r server-address</code>

<code>       </code><code>ipvsadm -L|l [options]</code>

<code>       </code><code>ipvsadm -Z [-t|u|f service-address]</code>

<code>       </code><code>ipvsadm --</code><code>set</code> <code>tcp tcpfin udp</code>

<code>       </code><code>ipvsadm --start-daemon state [--mcast-interface interface]</code>

<code>               </code><code>[--syncid syncid]</code>

<code>       </code><code>ipvsadm --stop-daemon state</code>

<code>       </code><code>ipvsadm -h</code>

管理叢集服務:增、删、改、查  

ipvsadm -A |E -t |u |f service-address [-s scheduler]

    -A:增加

    -E:修改

    -D:删除

    -L:檢視

    -t:tcp,protocol type

    -u:udp,protocol type 

    -f:firewall mark

server-address:

    -t,tcp,vip:port

    -u,udp,vip:port 

    -f firewall mark  

    -s:指定排程算法類型,預設為WLC 

ipvsadm -C    #清除所有ipvs 

ipvsadm -Z [-t|u|f service-address]

-Z:清空計數器  

管理叢集上的RS:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

    -a:增加

    -e:修改

    -r:real server_ip 

    -g,gateway,dr:直連路由

    -m,masquerde,nat,目标位址轉換

    -i,ipip,tun,隧道 

    -w,權重

ipvsadm檢視的其他子指令:

ipvsadm -L|l [options]

    -n:數字格式顯示

    --stats:統計資料

    --rate:速率統計

    -c,connetions:顯示連接配接數

    -exact:精确顯示 

儲存

ipvsadm -S &gt;/path/to/some_rule_file 

ipvsadm-save &gt;/path/to/soem_rule_file 

恢複:

ipvsadm -R &lt;/path/to/some_rule_file 

ipvsadm-restore &lt;/path/to/soem_rule_file 

實驗拓撲圖:

配置指令:

Real server1:

    route add default gw 192.168.184.128 

Real server2:

Virutal server:

    ipvsadm -A -t 10.1.10.3:80 -s rr 

    ipvsadm -a -t 10.1.10.3:80 -r 192.168.184.129 -m -w 1 

    ipvsadm -a -t 10.1.10.3:80 -r 192.168.184.130 -m -w 2 

    echo 1&gt;/proc/sys/net/ipv4/ip_forward #開啟ip_forward轉發功能        

測試結果實驗圖:

<a href="http://s4.51cto.com/wyfs02/M01/89/61/wKiom1gRarPgjVHFAABetmhLczI871.png" target="_blank"></a>

LVS-DR實驗拓撲圖:

<a href="http://s3.51cto.com/wyfs02/M00/89/61/wKiom1gReCaSgxBmAACrj3225v4811.png" target="_blank"></a>

配置指令:

RS1: 

<code>echo</code> <code>2 &gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>echo</code> <code>2 &gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>

<code>echo</code> <code>1 &gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>echo</code> <code>1 &gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>

<code>ifconfig</code> <code>lo:0 10.1.10.6 netmask 255.255.255.255 broadcast 10.1.10.6 </code>

<code>route add -host 10.1.10.6 dev lo:0</code>

RS2: 

Scheduler Server:

<code>ifconfig</code> <code>eno1677736:0 10.1.10.6 netmask 255.255.255.255 broadcast 10.1.10.6 </code>

<code>ipvsadm -A -t 10.1.10.6:80 -s wrr </code>

<code>ipvsadm -a -t 10.1.10.6:80 -r 10.1.10.4 -g -w 1 </code>

<code>ipvsadm -a -t 10.1.10.6:80 -r 10.1.10.5 -g -w 2</code>

實驗結果圖:

<a href="http://s2.51cto.com/wyfs02/M02/89/62/wKiom1gRgOrCg8Y7AABa9h6q10M638.png" target="_blank"></a>

如上述圖所示,lvs-dr配置成功,前端排程器根據wrr算法排程後端伺服器實作負載均衡排程,lvs配置很簡單,但原理非常重要,隻有懂了原理,才能真正的掌握好lvs.       

本文轉自chengong1013 51CTO部落格,原文連結:http://blog.51cto.com/purify/1866256,如需轉載請自行聯系原作者

繼續閱讀