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 16:08
下一篇 2016-10-26 18:31

相關推薦

  • 文本編輯器sed和vim的用法集錦

    8月8號,主要學習內容為: 一、文本處理工具sed 二、vim編輯器 一、文本處理工具sed 1)簡介    sed是一種流編輯器,它一次處理一行內容。處理時,把 當前處理的行存儲在臨時緩沖區中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區中的內容 ,處理完成后,把緩沖區的內容送往屏幕。接著處理下…

    Linux干貨 2016-08-12
  • Linux基礎知識

    命令的語法通用格式: # COMMAND OPTIONS ARGUMENTS COMMAND:  發起一命令:請求內核將某個二進制程序運行為一個進程; 程序 –> 進程 靜態 –> 動態(有生命周期) 命令本身是一個可執行的程序文件:二進制格式的文件,有可能會調用共享庫文件; 多數系統程序文件都存放在:/bin,…

    Linux干貨 2016-10-29
  • N28-第二周

    1. Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
    2. bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
    3. 請使用命令行展開功能來完成以下練習:
    (1) 創建/tmp目錄下的a_c、a_d、b_c、b_d。
    (2) 創建/tmp/mylinux目錄下的bin、boot/grub、dev、etc/rc.d/init.d、etc/sysconfig/network-scripts、lib/modules、
    lib64、proc、sbin、sys、tmp、usr/local/bin、usr/local/sbin、var/lock、var/log、var/run目錄。
    4. 如何查看文件的元數據,其信息有哪些,分別表示什麼含意?如何修改文件的時間戳信息?
    5. 如何定義一個命令的別名?如何在命令中引用另一個命令的執行結果?
    6. 顯示/var目錄下所有以L小寫開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
    7. 顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
    8. 顯示/etc目錄下,以非字母開頭,後面跟了一個字母以及其他任意長度任意字符的文件或目錄。
    9. 在/tmp目錄下創建以tfile開頭,後跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10. 複製/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
    11. 複製/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
    12. 複製/etc目錄下所有以L小寫或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

    Linux干貨 2017-12-14
  • CentOS啟動流程排錯

    grub legacy CentOS 6啟動流程: POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init …

    Linux干貨 2016-09-13
  • 設定Linux自動登陸

    設定Linux自動登陸 在實驗場景中我們可能會經常重新啟動Linux,然后反復輸入賬戶密碼登陸。為了在每次啟動后快速進入系統減少在實驗場景中不必要的工作,我們可以設定Linux在啟動后自動登陸到指定賬戶(實驗中一般為root賬戶)?;贚inux一切皆文件的思想,我們可以通過修改配置文本的方式決定是否啟用自動登錄,以及自動登錄的賬戶是普通用戶賬戶還是root…

    Linux干貨 2017-07-15
  • linux權限詳解

    寫在前面: 本博客詳解命令chmod,  chowm,  chgrp,  umask,  install,  mktemp  權限管理: 進程文件訪問權限應用模型: 進程的屬主與文件屬主是否相同,如果相同,則應用屬主權限 否則,檢查文件的屬主是否屬于文件的屬組,如果是,則應用屬主權限 否則,應用ot…

    Linux干貨 2015-12-19
欧美性久久久久