lvs——高可用集群

技術簡介:

LVS集群采用IP負載均衡技術和基于內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。為此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性

集群采用三層結構:

一般來說,LVS集群采用三層結構,其主要組成部分為:

A、負載調度器(load balancer),它是整個集群對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的

B、服務器池(server pool),是一組真正執行客戶請求的服務器,執行的服務有WEB、MAIL、FTP和DNS等

C、共享存儲(shared storage),它為服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務

lvs集群類型中的術語:

vs:Virtual Server, Director, Dispatcher, Balancer

rs:Real Server, upstream server, backend server

CIP:Client IP

VIP: Virtual serve IP

DIP: Director IP

RIP: Real server IP

    

請求過程:CIP <–> VIP <==> DIP <–> RIP

lvs集群的類型:

lvs-nat:修改請求報文的目標IP,然后轉發給被選中的RS

lvs-dr:在請求報文的首部重新封裝新的MAC地址,然后轉發給被選中的RS

lvs-tun:在原請求IP報文之外新加一個IP首部<源地址為CIP,目標地址為RIP>,然后轉發給RS

lvs-fullnat:修改請求報文的源和目標IP<源地址修改為DIP,目標地址修改為RIP>,然后轉發給RS

lvs-nat:

類似多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發

    

(1) RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP

(2) 請求報文和響應報文都必須經由Director轉發;Director易于成為系統瓶頸

(3) 支持端口映射,可修改請求報文的目標PORT

(4) vs必須是Linux系統,rs可以是任意系統

lvs-dr:

Direct Routing,直接路由

    

通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址

源IP/PORT,以及目標IP/PORT均保持不變;

    

Director和各RS都得配置使用VIP;

    

(1) VIP地址要配置在VS主機和所有的RS主機上

(2) 確保前端路由器將目標IP為VIP的請求報文發往Director,限制RS主機上關于VIP的廣播和應答:

         (a) 在前端網關做靜態綁定;

         (b) 在RS上使用arptables;

         (c) 在RS上修改內核參數以限制arp通告及應答級別;

                 arp_announce

                 arp_ignore

(3) RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director

(4) RS跟Director要在同一個物理網絡,VS和所有RS主機之間不能跨路由器

(5) 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client

(6) 不支持端口映射

lvs-tun:

轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS

    

(1) DIP, VIP, RIP都應該是公網地址

(2) RS的網關不能,也不可能指向DIP

(3) RS的主機上也要配置VIP地址

(3) 請求報文要經由Director,但響應不能經由Director

(4) 不支持端口映射

(5) RS的OS得支持隧道功能

lvs-fullnat:

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

CIP –> DIP

VIP –> RIP

    

(1) VIP是公網地址,RIP和DIP是私網地址,可以跨路由器,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP;

(2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client;

(3) 請求和響應報文都經由Director;

(4) 支持端口映射;

    

注意:此類型默認不支持

ipvs scheduler:<ipvs的調度方法>

根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種:

靜態方法:僅根據算法本身進行調度

        RR:roundrobin,輪詢;把所有的RS主機統計起來,每次有新請求來,以輪詢的方式一個個的調度用戶請求到RS主機上去

    

        WRR:Weighted RR,加權輪詢;把所有的RS主機統計起來,并記錄每個RS主機的權值<在這里表示自身的某個服務的處理能力,能力越強,權值越高>,每次有新請求來,以權值的大小進行輪詢,調度用戶請求到RS主機上去,權值高的主機,會接收到更多的用戶請求

    

        SH:Source Hashing,實現session sticy,源IP地址hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定

    

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

                DH:提高VS后緩存服務器中緩存的命中率

                DH:多數情況用于緩存服務器

動態方法:主要根據每RS當前的負載狀態及調度算法進行調度;

        Overhead:VS進行調度的比較器,優先調度給Overhead值小的服務器

     

        LC:least connections  最少連接

                Overhead=activeconns*256+inactiveconns

                基于上面的Overhead算法,計算所有RS主機的Overhead值,把新請求調度到Overhead值小的服務器

    

        WLC:Weighted LC   加權的最少連接

                Overhead=(activeconns*256+inactiveconns)/weight

                基于上面的Overhead算法,計算所有RS主機的Overhead值,把新請求調度到Overhead值小的服務器

    

        SED:Shortest Expection Delay

                Overhead=(activeconns+1)*256/weight

                基于上面的Overhead算法,計算所有RS主機的Overhead值,把新請求調度到Overhead值小的服務器

    

        NQ:Never Queue

                永不排隊,每個后端服務器,至少先分一個,然后在使用SED調度算法對新請求進行調度

    

        LBLC:Locality-Based LC,動態的DH算法

                簡單的理解就是:類似靜態方法的DH算法,但它是動態的

        LBLCR:LBLC with Replication,帶復制功能的LBLC

                在LBLC上,后端服務器,基于session replication機制,復制一臺RS主機的緩存到其他RS主機上,則當老用戶進行請求的時候,不僅可以轉發給老用戶第一次訪問的主機,也可以轉發給RS其他主機,因為此時其他RS主機也有此老用戶訪問的緩存

lvs-nat配置:

拓撲結構:

1.png

設計要點:

        (1) RIP與DIP在同一IP網絡, RIP的網關要指向DIP;

        VIP=10.1.43.101

        DIP=172.16.0.1

        RIP-1=172.16.0.2

        RIP-2=172.16.0.3

RS1:
yum -y install httpd mysql-server
    
vim /var/www/html/index.html
<h1>RS1</h1>
    
ifconfig eth0 172.16.0.2/24 up
route add default gw 172.16.0.1
service httpd start

RS2:
yum -y install httpd mysql-server

vim /var/www/html/index.html
<h1>RS2</h1>
    
ifconfig eth0 172.16.0.3/24 up
route add default gw 172.16.0.1
service httpd start

VS:
ifconfig eno33554984 172.16.0.1/24 up
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 10.1.43.101:80 -s rr
ipvsadm -a -t 10.1.43.101:80 -r 172.16.0.2 -m -w 1
ipvsadm -a -t 10.1.43.101:80 -r 172.16.0.3 -m -w 1

lvs-dr配置:

拓撲結構:

4.png

設計要點:

        VS上的VIP地址可以直接配置在DIP地址所在的網卡上,Linux主機上,一塊網卡可以配置多個地址

        RS上的VIP地址必須配置在lo接口上,并且還要關閉arp的響應和通告功能

        外網接口:10.1.43.101

        內網接口:172.16.0.1

        VIP:172.16.0.10

        DIP:172.16.0.9

        RIP-1:172.16.0.2

        RIP-2:172.16.0.3

dr模型中,各主機上均需要配置VIP,解決地址沖突的方式有三種:

         (1) 在前端網關做靜態綁定

         (2) 在各RS使用arptables

         (3) 在各RS修改內核參數,來限制arp響應和通告的級別

                 限制響應級別:arp_ignore

                         0:默認值,表示可使用本地任意接口上配置的任意地址進行響應

                         1: 僅在請求的目標IP配置在本地主機的接收到請求報文接口上時,才給予響應

                 限制通告級別:arp_announce

                         0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告

                         1:盡量避免向非直接連接網絡進行通告

                         2:必須避免向非本網絡通告

RS的預配置腳本:<在RS主機上運行此腳本即可>

#!/bin/bash
#
vip=172.16.0.10
mask='255.255.255.255'
    
case $1 in
start)
  echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    
  ifconfig lo:0 $vip netmask $mask broadcast $vip up
  route add -host $vip dev lo:0
  route add default gw 172.16.0.1
    ;;
        
stop)
    ifconfig lo:0 down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ;;
        
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

VS的配置腳本:<在VS主機上運行此腳本即可>

#!/bin/bash
#
vip='172.16.0.10'
iface='eno16777736:0'
mask='255.255.255.255'
port='80'
rs1='172.16.0.2'
rs2='172.16.0.3'
scheduler='wrr'
type='-g'
    
case $1 in
start)
    ifconfig $iface $vip netmask $mask broadcast $vip up
    iptables -F
    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
    ;;
        
stop)
    ipvsadm -C
    ifconfig $iface down
    ;;
        
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

路由器上配置:

ifconfig eno16777736 10.1.43.101/16 up
ifconfig eno33554984 10.1.43.101/16 up
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 10.1.43.101 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.10:80

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

(0)
megedugaomegedugao
上一篇 2016-10-26
下一篇 2016-10-26

相關推薦

  • day5作業

    軟硬鏈接區別: 1 硬鏈接會增加連接數,而軟鏈接不會。 2 硬鏈接始終表示的只是一個文件,只是名字不同而已,而軟鏈接本身就是一個獨立的文件,文件內容為指向的文件的路徑。 3 命令格式不同。 硬鏈接: ln filename linkname 軟鏈接: ln -s filename&nbsp…

    系統運維 2016-08-08
  • grep與基本正則表達式基本用法

    正則表達式:Regual Expression  REGEXP      由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字母意義,而是用于表示控制或通配的功能;       分兩類:             &nbsp…

    Linux干貨 2016-11-03
  • Mysql 啟動時 報ERROR 2002,分析解決、

    1、故障現象 [root@localhost scripts]# mysql -u root ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysqld.sock’ (2) 2、故障分析 查看mysql實例的狀態 [root@localhost scr…

    Linux干貨 2017-08-29
  • Linux常見文件管理命令

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。2、bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。3、請使用命令行展開功能來完成以下練習:(1)、創建/tmp目錄下的:a_c, a_d, b_c, b_d(2)、創建/tmp/mylinux目錄下的:mylinux/├── bin├── boot│??…

    2018-02-26
  • linux命令格式,獲取幫助及其目錄結構簡要理解

    我們都知道,一臺計算機要是沒通電,和一堆廢鐵沒什么區別。那么,通電開機進入系統后,會進入交互界面,等待用戶操作,人與計算機交互界面有兩種: GUI:圖形用戶接口。如我們平時使用的Windows ?,linux的X window,有KDE和GOME.   CLI:命令行接口,使用的SHELL類型有bash ,csh,tcshell,zshell等。 …

    2017-09-14
  • 網絡管理之配置文件及一些命令的應用

    IP配置、信息、相關命令    IP地址     它們可唯一標識 IP 網絡中的每臺設備     每臺主機(計算機、網絡設備、外圍設備)必須具有唯一的地址     IP 地址由兩部分組成:   &nb…

    Linux干貨 2016-09-22
欧美性久久久久