LVS+Keepalived+httpd

LVS簡介

lvs有三種工作模式NAT(地址轉換),IP Tunneling(IP隧道)、Direct Routing(直接路由)。 工作效率最低的是NAT模式,但NAT模式可以用於各種系統,各種環境的負載均衡,只需要一個公網ip即可實現 IP Tunneling模式調度器將連接分發到不同的後端real server,然後由real server處理請求直接相應給用戶,大大提高了調度器的調度效率,後端real server沒有物理位置和邏輯關係的限制,後端real server可以在Lan/Wlan,但是後端real server必須支持IP隧道協議. DR(Direct Routing)是效率最高的,與IP Tunneling類似,都是處理一般連接,將請求給後端real server,然後由real server處理請求直接相應給用戶,Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但由於採用物理層,所以DR模式的調度器和後端realserver必須在一個物理網段裏,中間不能過路由器(也就是一個交換機相連).

lvs支持8種不同的調度算法輪叫(rr)、加權輪叫(wrr)、最小連接(lc)、加權最小連接(wlc)、基於局部性最小連接(lblc)、帶複製的基於局部性最少鏈接(lblcr)、目標地址散列(dh)和源地址散列(sh).

Keepalived是運行在lvs 之上,它的主要功能是實現真實機的故障隔離及負載均衡器間的失敗 切換,提高系統的可用性

系統平臺:Centos6.4

Keepalived版本:keepalived-1.2.4.

LVS版本:ipvsadm-1.2

LVS_Master:192.168.10.51

LVS_Slave:192.168.10.40

Apache1:192.168.10.41

Apache2:192.168.10.49

一、安裝apache

1.1我們採用yum安裝

#yum –y installhttpd

#/etc/init.d/httpdstart

1.2分別在兩臺web上建立測試頁

# echo  "zhangfang111111">/var/www/html/index.html

# echo  "zhangfang222222">/var/www/html/index.html

1.3 測試是否正常

Web1

wKiom1VMg5aBC4TXAAC07XmEP0M227.jpg

Web2

wKioL1VMhR3z2NqvAADHi64WIiQ288.jpg

訪問都ok

1.3執行lvs.sh腳本綁定VIP

#catlvs.sh

#!/bin/bash

#description:Config lvs.sh

VIP=192.168.10.180

 

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

 

case"$1" in

start)

       /sbin/ifconfig lo:0 $VIP netmask255.255.255.255 broadcast $VIP

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

       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

       sysctl -p >/dev/null 2>&1

       echo "RealServer Start OK"

       ;;

stop)

       /sbin/ifconfig lo:0 down

       /sbin/route del $VIP >/dev/null2>&1

       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

       echo "RealServer Stoped"

       ;;

*)

       echo "Usage: $0 {start|stop}"

       exit 1

esac

 

exit 0

#lvs.sh start



二、安裝lvs+keepalievd(兩臺調度器都安裝)

2.1安裝之前系統需要安裝popt-statickernel-devel make gcc openssl-devel lftp libnl* popt*

2.2 開啓路由轉發功能

#vim /etc/sysctl.conf

net.ipv4.ip_forward= 1

#sysctl -p

2.3.安裝ipvsadm

#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

2.4做軟連接,防止make時出錯,找不到kernel文件

#ln -s/usr/src/kernels/2.6.32-504.16.2.el6.x86_64/ /usr/src/linux/

#tar ipvsadm-1.26.tar.gz

#cd ipvsadm

#make &&make install

Ipvsadm安裝完成

2.5安裝keepalived

#wgethttp://www.keepalived.org/software/keepalived-1.2.4.tar.gz

# tar zxvfkeepalived-1.2.4.tar.gz

#cdkeepalived-1.2.4

# ./configure&& make && make install

三、keepalived做成啓動服務,方便管理

# cp/usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

# cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/

# mkdir/etc/keepalived/

cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/

# cp/usr/local/sbin/keepalived /usr/sbin/

# servicekeepalived start | stop

3.1修改keepalived配置文件如下

! ConfigurationFile for keepalived

 

global_defs {

   notification_email {

   [email protected]

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smpt_connect_timeout 30

   router_id zhangfang

}

 

vrrp_instanceVI_1 {

    state MASTER 

    interface eth0 #指定HA監測網絡的接口

    virtual_router_id 20 #虛擬路由標示,這是標示是一個數字,同一個vrrp實例使用唯一的標示,即同一vrrp_instance下,MASTER和BACKUP必須是一致的

    priority 100 #定義優先級,數字越大,優先級越高

    advert_int 1 #設置MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

    authentication { #設置驗證類型和密碼

        auth_type PASS #設置認證類型,主要有PASS和AH兩種

        auth_pass 1111 #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通行

    }

    virtual_ipaddress {

        192.168.10.180

    }

}

 

virtual_server192.168.10.180 80 {

    delay_loop 6 #設置運行狀況的檢查時間

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50 #會話保持時間

    protocol TCP #轉發協議類型

    real_server 192.168.10.41 80 {

        weight 3

    TCP_CHECK {    #realserver的狀態檢測設置部分

            connect_timeout 10 #標示10s無響應超時

            nb_get_retry 3 #重試次數

            delay_before_retry 3 #重試間隔

       connect_port 80

        }

    }

    real_server 192.168.10.49 80 {

        weight 3

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

           delay_before_retry 3

            connect_port 80

        }

}

}

3.2將配置文件同步到LVS_Slave上

#scp  /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/

修改內容如下:

state BACKUP #狀態

priority 100 #修改優先級 

3.3分別啓動兩臺lvs,我們來查看日誌

LVS_Master

wKiom1VMg9TDawQMAATTeA3I5gU694.jpg

注意,從劃紅線區域看到這臺主機綁定了VIR

通過ip  addr 查看下VIP是否綁定

wKioL1VMhaLyZav9AAFxj5-tDL0367.jpg

LVS_Slave:日誌信息

wKiom1VMhGOjWo_CAATUlI7_mXk239.jpg

3.4我們在LVS_Master上看下羣集狀態

wKiom1VMhILSkeVfAAFxj5-tDL0883.jpg

四、進行測試

在瀏覽器裏面輸入http://192.168.10.180

wKioL1VMhg-R-AwOAADLfJxqa4k414.jpg

wKioL1VMhh2jWe9WAADLwj1MdhQ598.jpg

說明按照輪詢的算法,分別轉後至節點,從而達到負載均衡的效果

五、模擬故障

5.1停掉節點1

#/etc/init.d/httpdstop

5.2查看lvs狀態

#ipvsadm -ln

IP VirtualServer version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.180:80 rr

  ->192.168.10.41:80             Route   3     0          2 

注意出現故障的那臺機器,已經被踢出了,從而實現了健康檢查

測試一下

wKiom1VMhMajio4mAADHOL-EuOc192.jpg

查看郵件

wKioL1VMhk6iUuStAACn3TyyJDg119.jpg

5.3 關掉MASTER上的keepalived

#/etc/init.d/keepalivedstop

5.4 查看SLAE的狀態

wKiom1VMhPCQQkG4AAMPowTzwbg827.jpg

已經正常接管過來,

測試一下

wKiom1VMhTexY0g3AADLwj1MdhQ385.jpg

訪問正常

注意,大家可以看到,經過上面的演示我們實現了LVS的高可用及前端負載均衡的高可用,同時實現對後端realserer監控,也實現後端resalserver宕機時會給管理員發送郵件,但是我們還有幾個問題沒有解決,問題如下

1.  所以realserver都宕機,怎麼處理,是不是用戶就沒法打開,還是提供一下爲何頁面

2.  怎麼完成爲何模式keepalived切換?

3.  如何在keepalived故障時,發送郵件給指定的管理員

六、我們在負載均衡器上提供維護頁面,這樣比較靠譜,也比較常用

6.1 分別在MASTER和SLAVE安裝httpd

#yum –y installhttpd

6.2配置維護頁面

#echo"Website is currently under maintenance, please come back later"  >/var/www/html/index.html

6.3啓動httpd

#/etc/init.d/httpdstart

6.4修改配置文件

!Configuration File for keepalived

 

global_defs{

   notification_email {

   [email protected]

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smpt_connect_timeout 30

   router_id zhangfang

}

 

vrrp_instanceVI_1 {

    state MASTER 

    interface eth0 #指定HA監測網絡的接口

    virtual_router_id 20 #虛擬路由標示,這是標示是一個數字,同一個vrrp實例使用唯一的標示,即同一vrrp_instance下,MASTER和BACKUP必須是一致的

    priority 100 #定義優先級,數字越大,優先級越高

    advert_int 1 #設置MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

    authentication { #設置驗證類型和密碼

        auth_type PASS #設置認證類型,主要有PASS和AH兩種

        auth_pass 1111 #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通行

    }

    virtual_ipaddress {

        192.168.10.180

    }

}

 

virtual_server192.168.10.180 80 {

    delay_loop 6 #設置運行狀況的檢查時間

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50 #會話保持時間

    protocol TCP #轉發協議類型

    real_server 192.168.10.41 80 {

        weight 3

TCP_CHECK {   #realserver的狀態檢測設置部分

            connect_timeout 10 #標示10s無響應超時

            nb_get_retry 3 #重試次數

            delay_before_retry 3 #重試間隔

   connect_port 80

        }

    }

real_server 192.168.10.49 80 {

        weight 3

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

   sorry_server 127.0.0.1 80

}

增加sorry_server選項

6.5關閉所有的realserver,並重啓下MASTER和SLAVE的keepalived

#/etc/init.d/httpdstop

#/etc/init.d/keepalivedrestart

6.6查看lvs

# ipvsadm-ln

IPVirtual Server version 1.2.1 (size=4096)

ProtLocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.180:80 rr

  ->127.0.0.1:80                 Local   1     0          0     

可以看到所有節點已經被踢出,只有本機提供服務

測試

wKioL1VMhtmx-_2tAADWaIjP-Zw296.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章