天天看點

LB叢集之LVS的三種模式

                                      Cluster原理

叢集的總類:

1.負載均衡叢集(LB:Load Banlancing):實作将一個通路量或者任務量特别大的應用,給他

平均配置設定到不同的伺服器上面,以提供高容量、大并發。

2.高可用叢集(HA:High Avalibility):将多台計算機組合起來,避免一個服務因某台機器

出現故障,而導緻服務中斷的,在于保障服務的可持續性。

3.高性能叢集(HP:High Performance)又叫科學運算叢集:解決複雜的計算,組合起來的叢集,一般要很大量

的計算機組成。suse用的比較多

叢集分别代表的軟體

LB:負載均衡叢集(LB:Load Banlancing)

lvs(Linux Virtual Serverlinux虛拟伺服器):提供更高的吞吐率、提供備援、更靈活的實用性

   lvs:ipvsadm(工作在使用者空間)/(ipvs工作在核心空間)和iptables/netfilter類似

   lvs的四個ip位址

    1)Virtual IP address(VIP):面向使用者提供服務的位址

    2)Real IP address(RIP):real server的ip位址

    3)Director's IP address(DIP):director與real server連接配接的ip位址,DIP是配置在director上面

    4)Client computer's IP address(CIP): 用戶端位址

 拓撲圖:                            (ip4)web server1

                        [LVS]       /

    user(ip1)----(ip2)director(ip3)

                                    \

                                     (ip5)web server2

     ip1表示CIP,ip2表示VIP,ip3表示DIP,ip4和ip5表示RIP

   lvs的三個種類(或者三個模型)

     1)NAT:Network address translation網絡位址轉換(LVS-NAT)--->目标位址轉換

        如何實作:

                CIP-->VIP             DIP-->RIP

        Client------------->Director------------->Cluster node(server)

             <-------------        <-------------

                CIP<--VIP             DIP<--VIP

       NAT模型一般承受5-6台server node

        拓撲圖:

                                     (ip4)web server1

     user(ip1)----(ip2)director(ip3)

     請求的過程:user[S(CIP)D(VIP)]------>director[S(CIP)D(RIP)]----->web 

         涉及到目标位址轉換(DNAT)

      回複的過程:web----->director[S(RIP)D(CIP)]----->user[S(VIP)D(CIP)]

         涉及到源位址轉換(SNAT)  

      web server 的網關是指向director的DIP。 

        NAT模型的要求:叢集節點必須在同一個網段當中,即DIP與RIP在同一個網段;RIP通常使用私有IP

           位址,僅用于和DIP位址進行通信;director将處理在用戶端與server之間的所有通信;server

           必須把DIP設定為預設的網關;director可以實作端口映射,即VIP的端口和RIP的端口可以不一

           樣;server可以使用任意的作業系統;director所能支援的server的數量不多;

     2)Direct routing:直接路由(LVS-DR)使用最多的模型,用于生産環境中

        DR模式可以承受上百台server

     拓撲圖:

                                   web server1

                                 (RIP)-----> 虛拟一個VIP

                                 /

 user(CIP)------router--------switch----(VIP/DIP)director

                                 \

                                 (RIP)----> 虛拟一個VIP

                                web server2

       請求的過程:user[S(CIP)D(VIP)]------>director[S(CIP)D(VIP)]----->web 

       回複的過程web------->user[S(VIP)D(CIP)]

     DR模型中web server和director都有兩個IP,server是RIP和VIP,每個server的VIP都一樣,但是RIP

      不一樣。

     DR模型的要求:server必須和director在同一個實體網絡上;RIP可以使用公網位址,使用公網位址的好處

     如果director出現故障,可以用dns的A記錄來指向server的RIP;director僅處理發來的請求,響應的請求

     将不在通過director;通常server的網關一定不能指向director;director不能做端口映射,server可以

     使用任意的作業系統;director能支援大量的server;

     3)IP tunneling:IP隧道(LVS-TUN)

   拓撲圖:

                                     (RIP)web server1

                                    /

 user(CIP)------router--------network cloud----(VIP/DIP)director

                                     (RIP)web server2

       請求的過程:user[S(CIP)D(VIP)]------>director[S(DIP)D(RIP)]----->web

                                             把源[S(CIP)D(VIP)]進行了封裝成DIP

       回複的過程:web[S(VIP)D(CIP)]----->user

                     把從director接受到的包解分裝,發現源是director的VIP,目的是

                     user的CIP

      TUN模型的要求:server和director在不同的網絡上;RIP必須是公網IP位址;director隻

      需要處理傳來的請求,同時響應的資料包一定不能經過director;director不能做端口映射;

      隻有支援IP隧道的作業系統才能是server

director的排程server的方法:

1)靜态排程方法:fixed Scheduling Methods指director在選舉server的時候不會考慮這個server目前

   的連接配接的活動狀态。

代表算法

   RR(Round-robin)輪叫算法

   WRR(Weighted round-robin)權重輪叫算法--->适合server的硬體不同和性能不同

   DH(Destination hashing)目标位址雜湊演算法---->将同一個ip位址的請求發給同一個server,應                           用的server為sqiud server 緩存伺服器

   SH(Source hashing)源位址雜湊演算法---->适合公司很多員工,然後自己上網的外接口有兩個

2)動态排程方法:dynamic scheduling methods指director每選舉server的時候會判斷這個server目前連接配接

   狀态是不是很多,如果很多則排除在外,然後選擇那些連接配接狀态比較少的,如果連接配接狀态都一樣多,那就選擇排在最上面的。

  TCP連接配接  活動狀态的辨別是established并且有資料傳輸,非活動狀态的辨別是非established狀态的連接配接,連接配接還沒有斷開,但是已經不在傳輸資料了。還有一種就是根本沒有連接配接

   LC(Least-connection)最少連接配接數---->每當一個新的請求連接配接進來,director會檢視每個                            server上目前處于活動狀态的個數和處于非活動狀态的個數,計算方法                          overhaed(目前的負載個數)=10(處于活動狀态的個數)*256+10000(非活                          動狀态),首先那個server的overhead個數少就選那個server,如果                        server的overhead相同,那就選擇排列在server清單的最上方的一個server。

  WLC(Weight Least-connection)是最優算法,也是預設的算法,計算方法overhead/weight(權重)

  SED(Shortst Expected Delay)最少期望延遲---->是WLC的改進算法,在算overhaed值的時候不考                              慮非活動狀态的值,計算方法overhaed=(n+1)*256/weight,n表示                              活動的個數,weight表示權重。

  NQ(Never Queue)從不排隊---->對SED的算法的改進,先不管overhaed是多少,隻要有server的連                   接狀态為0,則會給你一個連接配接個數。

  LBLC(Locality-Based Least-Connection)基于本地的最少連接配接,是DH算法的動态排程。

  LBLCR(Locality-Based Least-Connection with Replication Scheduing)帶複制的基于本地的最                        少連接配接,時候director後面接cache伺服器的,在接後面的server

LVS的實驗:NAT模式

拓撲圖:

                        [LVS]       /                 \

     user(ip1)----(ip2)director(ip3)                  ====nfs(來共享檔案)  

                                    \                 /

ip位址規劃

保證web server的資料一緻---->1.rsync實作檔案級别的同步,效率不高

                             2.drbd基于主機的磁盤鏡像,高可用叢集中用到  

                             3.share storage共享存儲 a.DAS直接附加存儲  b.NAS(nfs、                                    samba)檔案服務  c.SAN存儲區域網絡,本身具有備援

1.看核心是否支援ipvs

grep -i 'ip_vs' /boot/config-2.6.32-71.el6.i686 

CONFIG_IP_VS=m

CONFIG_IP_VS_IPV6=y

# CONFIG_IP_VS_DEBUG is not set

CONFIG_IP_VS_TAB_BITS=12

CONFIG_IP_VS_PROTO_TCP=y

CONFIG_IP_VS_PROTO_UDP=y

CONFIG_IP_VS_PROTO_AH_ESP=y

CONFIG_IP_VS_PROTO_ESP=y

CONFIG_IP_VS_PROTO_AH=y

CONFIG_IP_VS_RR=m

CONFIG_IP_VS_WRR=m

CONFIG_IP_VS_LC=m

CONFIG_IP_VS_WLC=m

CONFIG_IP_VS_LBLC=m

CONFIG_IP_VS_LBLCR=m

CONFIG_IP_VS_DH=m

CONFIG_IP_VS_SH=m

CONFIG_IP_VS_SED=m

CONFIG_IP_VS_NQ=m

CONFIG_IP_VS_FTP=m

2.拓撲規劃ip

Client:

ip1(CIP)=192.168.1.1

Director:

ip2(VIP)=192.168.1.10 gw=192.168.1.1

ip3(DIP)=192.168.14.50

Web server1:

ip4(RIP)=192.168.14.51 gw=192.168.14.50

Web Server2:

ip5(RIP)=192.168.14.52 gw=192.168.14.50

3.Diretor的配置:

ifconfig eth0 192.168.1.10/24

ifconfig eth1 192.168.14.50

route add default gw 192.168.1.1

iptables -F

a)yum -y install ipvsadm

b)man ipvsadm

ipvsadm -D -t|u|f service-address  删除叢集服務

ipvsadm -C    清空叢集服務的

ipvsadm -R 

ipvsadm -S [-n]  顯示統計資料的

ipvsadm -d -t|u|f service-address -r server-address  從叢集服務裡面删除real server的

ipvsadm -L|l [options]  顯示狀态表或者檢視

ipvsadm -Z [-t|u|f service-address]  清空計數器的

ipvsadm --set tcp tcpfin udp  設定逾時時間

ipvsadm --start-daemon state [--mcast-interface interface]

        [--syncid syncid]

ipvsadm --stop-daemon state

ipvsadm -h  幫助

  1.定義一個叢集服務:

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

               [-p [timeout]] [-O] [-M netmask]   定義叢集服務

  解釋:-A|E -A表示add,E表示修改  

-t|u|f t(後面可接端口号)表示tcp協定,u(後面可接端口号)表示udp協定,f表示firewall-mark   

service-address服務位址即director (VIP)

-s指明排程方法(預設是WLC)

    eg:ipvsadm -A -t  192.168.1.112:80 -s rr

  2.向此叢集伺服器添加RealServer  

       ipvsadm -a|e -t|u|f service-address -r server-address

               [-g|i|m] [-w weight] [-x upper] [-y lower]   向叢集服務添加real server的

    解釋:-a|e -A表示add,E表示修改  

service-address服務位址 director

        -r 指明real server的位址  server-address

      [-g|i|m] g表示直接路由模型 i隧道模型  m表示nat模型   預設是-g DR模型

        -w 表示權重 可以省略,省略表示1,選擇這個之前你的算法可以支援權重

-x 連接配接的個數的上限

-y  連接配接的個數的下限

eg:ipvsadm -a -t 192.168.1.112:80 -r 192.168.14.51 -m -w 1

    ipvsadm -a -t 192.168.1.112:80 -r 192.168.14.52 -m -w 2 

c)設定轉發

sysctl -w net.ipv4.ip_forward=1

or

sed -i '/net.ipv4.ip_forward/s/0/1/'  /etc/sysctl.conf 

sysctl -p

4.Web Server1的配置:

ifconfig eth0 192.168.14.51/24

route add default gw 192.168.14.50

a)yum -y install httpd

b)sed -i '$a ServerName 192.168.14.51:80' /etc/httpd/conf/httpd.conf

c)echo "this is web1 server" >> /var/www/html/index.html

d)service httpd restart

5.Web Server 的配置

ifconfig eth0 192.168.14.52/24

b)sed -i '$a ServerName 192.168.14.52:80' /etc/httpd/conf/httpd.conf

c)echo "this is web2 server" >> /var/www/html/index.html

LVS:DR模型

1.規劃ip

CIP=172.16.1.1

director:

VIP=172.16.1.100---->eth0:1(虛拟的ip)

DIP=172.16.1.200--->eth0

web server1:

VIP=172.16.1.100(指向director的VIP) ---> lo:1 (虛拟的ip)  gw可以不配置 配置一定不能指向director的DIP上面

RIP=172.16.1.10---->eth0

web server2:

VIP=172.16.1.100---> lo:1 (虛拟的ip)   gw可以不配置 配置一定不能指向director的DIP上面

RIP=172.16.1.20---->eth0

director的配置:

ifconfig eth0 172.16.1.200/24

ifconfig eth0:1 172.16.1.100 broadcast 172.16.1.100 netmask 255.255.255.255 up

route add -host 172.16.1.100 dev eth0:1

yum -y install ipvsadm

ipvsadm -A -t 172.16.1.100:80 -s wlc

ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.10 -w 2 -g

ipvsadm -a -t 172.16.1.100:80 -r 172.16.1.20 -w 2 -g

web server1的配置:

ifconfig eth0 172.16.1.10/24

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

ifconfig lo:1 172.16.1.100 broadcast 172.16.1.100 netmask 255.255.255.255 up

route add -host 172.16.1.100 dev lo:1

yum -y install httpd

sed -i '$a ServerName 172.16.1.10:80' /etc/httpd/conf/httpd.conf

echo "this is web1 server" >> /var/www/html/index.html

service httpd restart

web server2的配置:

ifconfig eth0 172.16.1.20/24

sed -i '$a ServerName 172.16.1.20:80' /etc/httpd/conf/httpd.conf

echo "this is web2 server" >> /var/www/html/index.html

DR模型的腳本

        Real(web) server script

vim /etc/init.d/real

##################

#!/bin/bash

#script to start lvs-dr web server

. /etc/rc.d/init.d/functions

read -p "please input a ip for set up real server VIP:" VIP

case "$1" in

start)

/sbin/ifconfig lo down

/sbin/ifconfig lo up

/sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev lo:1

;;

stop)

/sbin/ifconfig lo:1 down

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

status)

islothere=`/sbin/ifconfig lo:1 | grep $VIP`

isrothere=`netstat -rn | grep "lo:1" | grep $VIP`

if [ ! "islothere" -o ! "isrothere" ];then

   echo "LVS-DR real server Stopped."

else

   echo "LVS-DR real server Running."

fi

*)

echo " Usage: $0 (start|status|stop)"

exit 1

esac

###########儲存退出 +x

service real start|stop|status

    director script

vim /etc/init.d/ipvs

######

#script to start lvs-dr director server

VIP=

RIP1=

RIP2=

PORT=80

/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev eth0:1

echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -F

/sbin/ipvsadm -C

ipvsadm -A -t $VIP:$PORT -s wlc

ipvsadm -a -t $VIP:$PORT -r $RIP1 -w 2 -g

ipvsadm -a -t $VIP:$PORT -r $RIP2 -w 2 -g

/bin/touch /var/lock/subsys/ipvsadm &> /dev/null

echo 0 > /proc/sys/net/ipv4/ip_forward

/sbin/ifconfig eth0:1 down

/sbin/route del $VIP

/bin/rm -f  /var/lock/subsys/ipvsadm

echo "ipvs is stopped...."

if [ ! -e /var/lock/subsys/ipvsadm ];then

   echo "ipvsadm is stopped..."

   echo "ipvsadm is running..."

   ipvsadm -L -n

echo "$0: Usage: $0 (start|status|stop)"

######儲存退出 +x

service ipvs start|stop|status

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

繼續閱讀