lvs

1、什么是LVS

LVS是Linux Virtual Server的簡寫,以為Linux虛擬服務器,是一個虛擬服務器集群,其具有很好的可伸縮性、可靠性、可管理性。LVS集群采用IP負載均衡技術和基于內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。下圖是一個簡單的LVS拓撲

lvs

2、LVS集群的術語

VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP:Virtual Server IP
RIP:Real Server IP
DIP:Director IP

3、LVS集群的類型

lvs-nat:修改請求報文的目標IP

通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給后端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

也就是多目標ip的DNAT機制,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發;lvs-nat有以下特性:
(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP;
(2)請求報文和響應報文都必須應有Director轉發;Director易于成為系統瓶頸;
(3)支持端口映射,可修改請求報文的目標PORT;
(4)VS必須是Linux系統,RS可以是任意系統;

lvs-dr:操作封裝新的mac地址(直接路由)

VS/DR通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地 提高集群系統的伸縮性。這種方法沒有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連 在同一物理網段上。

Director和各RS都得配置使用VIP;
(1)確保前段路由器將目標IP為VIP 的請求報文發往Director;
    (a)在前段網關做靜態綁定;
    (b)在RS上使用arptables;
    (c)在RS上修改內核參數以限制ARP通告及應答級別;
        arp_announce
        arp_ignore
(2)RS的DIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一個IP網絡,RIP的網關不能指向DIP,以確保響應報文不會經由Director
(3)RS跟Director要在同一個物理網絡
(4)請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client
(5)不支持端口映射

lvs-tun:在原請求ip報文之外新加一個ip首部(IP隧道)

采用NAT技術時,由于請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為了解決這個問題,調度器把請求報 文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由于一般網絡服務應答比請求報文大許多,采用 VS/TUN技術后,集群系統的最大吞吐量可以提高10倍。

(1)DIP , VIP , RIP都應該是公網ip
(2)RS的網關不能,也不可能指向DIP;
(3)請求報文要經由Director,但響應不能經由Director;
(4)不支持端口映射;
(5)RS的OS得支持隧道功能;

lvs-fullnat:修改請求報文的源IP和目標IP

通過同時修改請求報文的源ip地址和目標IP地址進行轉發;

(1)VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不指向DIP;
(2)RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往client;
(3)請求和響應報文都經由Director;
(4)支持端口映射;

4、ipvs調度方法

針對不同的網絡服務需求和服務器配置,調度器可以分為靜態調度和動態調度

(1)靜態調度:根據調度算法本身進行調度
    RR:roundrobin,輪詢:調度器通過"輪詢"調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載。

    WRR:weighted RR,加權輪詢:調度器通過"加權輪詢"調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。

    SH:source hashing,源地址哈希:將來自與同一個ip地址的請求始終發往第一次挑中的RS,從實現會話綁定;保持會話

    DH:destination hashing,目標地址哈希:將發往同一個目標地址 的請求始始終轉發至第一次挑中的RS;

(2)動態調度:根據每臺RS當前的負載狀態及調度算法進行調度
    LC : least connections 最小連接:調度器通過"最少連接"調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用"最小連接"調度算法可以較好地均衡負載。

    WLC : weighted LC 加權最小連接 (默認的,值越大權重越大):在集群系統中的服務器性能差異較大的情況下,調度器采用"加權最少鏈接"調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。   
    SED:shortest expection delay 最短期望延遲
    NQ : Never Queue
    LBLC : Locality-Based LC,動態的DH算法:"基于局部性的最少鏈接" 調度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用"最少鏈接"的原則選出一個可用的服務 器,將請求發送到該服務器。

    LBLCR:LBLC with  Replication,帶復制功能的LBLC:"帶復制的基于局部性最少鏈接"調度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統。它與LBLC算法的不同之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小連接"原則從這個集群中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的 程度。

5、ipvsadm命令使用

ipvsadm是Linux虛擬服務器的管理工具,系統默認沒有安裝,需要執行yum install ipvsadm命令進行安裝

(1)管理集群服務

增加:ipvsadm -A -t|u|f service-address [-s scheduler] -p [timeout]
    [root@localhost ~]# ipvsadm -A -t 10.1.0.5 -s rr
修改:ipvsadm -E -t|u|f service-address [-s scheduler] -p [timeout]
刪除: ipvsadm -d -t|u|f service-address 
    -t:tcp協議端口,表示VIP是tcp端口
    -u:udp協議端口,表示VIP是udp端口
    -f:firewall mark,是一個數字

(2)管理集群上的RS

增加:ipvsadm -a -t|u|f service-address -r server-address  [-g|i|m] [-w weight]
修改:ipvsadm e -t|u|f service-address -r server-address  [-g|i|m] [-w weight]
刪除:ipvsadm -d -t|u|f service-address -r server-address
    -g:gateway,lvs-dr類型
    -i:ipip,lvs-tun類型
    -m:masquerade,lvs-nat類型

(3)清空定義的所有內容

ipvsadm -C

(4)查看定義的集群

ipvsadm -L | l [options]
    --numeric  -n  numeric output of addresses and ports
    --exact  expand numbers (display exact values)
    --connection   -c  output of current IPVS connections
    --stats  output of statistics information 統計數據
    --rate  output of rate information 速率

lvs

(5)保存和重載定義的集群

ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore

6、lvs-nat的拓撲及實現配置

lvs

(1)客戶端的配置

1)配置網卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984

BOOTPROTO=none
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
IPADDR=10.1.249.114
NETMASK=255.255.0.0

2)測試

lvs

(2)director的配置(注意防火墻和selinux的影響)

1)配置網卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

BOOTPROTO=none
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
IPADDR=10.1.252.55
NETMASK=255.255.0.0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 

DEVICE=eno33554984
HWADDR=00:0c:29:0e:27:d7
IPADDR=192.168.116.254
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes

2)ipvs的配置

[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -A -t 10.1.252.55:80 -s rr
[root@localhost ~]# ipvsadm -a -t 10.1.252.55:80 -r 192.168.116.6 -m 
[root@localhost ~]# ipvsadm -a -t 10.1.252.55:80 -r 192.168.116.7 -m 
[root@localhost ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.252.55:http rr
  -> 192.168.116.6:http           Masq    1      0          0         
  -> 192.168.116.7:http           Masq    1      0          0

3)開啟轉發功能

[root@localhost ~]# echo  1 > /proc/sys/net/ipv4/ip_forward

(3)web server1的配置(centos 6)

[root@localhost ~]# date  兩臺服務器的時間需要同步
Sat Oct 29 10:08:36 CST 2016

1)配置網卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 
網卡名和MAC地址每臺虛擬機都不同的,可使用 ip a 命令查看再設置
DEVICE=eth1
HWADDR=00:0c:29:9f:12:63 
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.116.6
NETMASK=255.255.255.0
GATEWAY=192.168.116.254

2)安裝httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c6</h1> 真實生產中通過同步機制使得兩臺服務器的內容一樣,此實驗故意以不同頁面區分
[root@localhost ~]# service httpd start
[root@localhost ~]# curl 192.168.116.6
    <h1>real server c6</h1>

(4)web server2的配置 (centos 7)

[root@localhost ~]# date
Sat Oct 29 10:08:36 CST 2016

1)配置網卡

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 

DEVICE=eno33554984
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.116.7
NETMASK=255.255.255.0
GATEWAY=192.168.116.254
HWADDR=00:0c:29:e8:7c:c6

2)安裝httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c7</h1>
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# curl 192.168.116.7
    <h1>real server c7</h1>

7、lvs-dr的拓撲及實現配置

dr拓撲.png

(1)客戶端配置

1)網卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984

BOOTPROTO=none
NAME=eno33554984
DEVICE=eno33554984
ONBOOT=yes
IPADDR=192.168.116.114
NETMASK=255.255.255.0

2)測試

dr.jpg

(2)director 的配置

1)網卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 
DEVICE=eno16777736
HWADDR= 00:0c:29:0e:27:cd
IPADDR=192.168.116.1
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes

先重啟網絡服務再配置下面lo0網絡
[root@localhost ~]# ifconfig eno16777736:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up

2)ipvs的配置

[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -A -t 192.168.116.254:80 -s wrr
[root@localhost ~]# ipvsadm -a -t 192.168.116.254:80 -r 192.168.116.6 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.116.254:80 -r 192.168.116.7 -g -w 2

(3)web server1的配置

1)修改內核參數來限制arp響應和通告

先限制通告再設置ip
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

2)網卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 
網卡名和MAC地址每臺虛擬機都不同的,可使用 ip a 命令查看再設置
DEVICE=eth1
HWADDR=00:0c:29:9f:12:63 
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.116.6
NETMASK=255.255.255.0

先重啟網絡服務再配置下面lo0網絡
[root@localhost ~]# ifconfig lo:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up
[root@localhost ~]# route add -host 192.168.116.254 dev lo:0

3)安裝httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c6</h1> 真實生產中通過同步機制使得兩臺服務器的內容一樣,此實驗故意以不同頁面區分
[root@localhost ~]# service httpd start
[root@localhost ~]# curl 192.168.116.6
    <h1>real server c6</h1>

(4)web server2的配置

1)修改內核參數來限制arp響應和通告

先限制通告再設置ip
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

2)網卡配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554984 

DEVICE=eno33554984
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.116.7
NETMASK=255.255.255.0
HWADDR=00:0c:29:e8:7c:c6

先重啟網絡服務再配置下面lo0網絡
[root@localhost ~]# ifconfig lo:0 192.168.116.254 netmask 255.255.255.255 broadcast 192.168.116.254 up  (臨時設置網卡,重啟網絡服務時效)
[root@localhost ~]# route add -host 192.168.116.254 dev lo:0

3)安裝httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
    <h1>real server c7</h1>
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# curl 192.168.116.7
    <h1>real server c7</h1>

原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/55493

(0)
paopao
上一篇 2016-10-29 15:46
下一篇 2016-10-29 15:50

相關推薦

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-10-30 20:45

    總結的很完整,圖文并茂,繼續加油

欧美性久久久久