LVS的兩種實現方法(heartbeat與KeepAlived)

23511971_1347596759rx4V.jpg

總拓撲圖

兩種實現方式:

實驗一、

LVS+heartbeat+ldirectord實現集羣負載:

1.在主Director Server上和備用Director Server上分別安裝heartbeatlibnethttpd

[root@LW1 ~]# yum -y install heartbeat libnet httpd heartbeat-ldirectord ipvsadm

2.獲得heartbeat的相關默認配置文件:

[root@LW1 ~]# cd /usr/share/doc/heartbeat-2.1.3/

[root@LW1 heartbeat-2.1.3]# cp ha.cf authkeys haresources /etc/ha.d/

[root@LW1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/

3.使用Ldirectord在主、備Director Server上配置LVS

[root@LW1 ~]# vi /etc/ha.d/ldirectord.cf

配置文件說明如下:

全局設置:

# Global Directives

checktimeout=10#判定Real Server出錯的時間間隔

checkinterval=5#指定Ldirectord在兩次檢查之間的間隔時間

fallback=127.0.0.1:80#當所有的Real Server節點不能工作時,Web服務重定向的地址

autoreload=yes#是否自動重載配置文件,選yes時,配置文件發生變化,自動載入配置信息

logfile="/var/log/ldirectord.log"#設定Ldirectord日誌輸出文件路徑

quiescent=yes#當選擇no時,如果一個節點在checktimeout設置的時間週期內沒有響應,ldirectord將會從LVS丟掉所有的連接跟蹤記錄和持續連接模版;如果選擇yes,當某個Real Server 失效時,Ldirectord失效節點的權值設置爲0,新的連接將不能到達,但是並不會從LVS路由表中清除此節點,同時,連接跟蹤記錄和程序連接模版仍然保留在Director上。

虛擬主機配置:

# Sample for an http virtual service

virtual=10.0.0.31:80#指定虛擬的IP地址和端口號,注意,在Virtual這行後面的行必須縮進3個空格或以一個tab字符進行標記

        real=10.0.0.29 gate#指定Real Server服務器地址和端口,同時設定LVS工作模式

        real=10.0.0.30:80 gate

        fallback=127.0.0.1:80 gate#Real Server全部失效後監聽的地址及端口

        service=http#指定服務的類型,這裏是對HTTP服務進行負載均衡

        request="test.html"#Ldirectord將根據指定的Real Server地址,結合該選項給出的請求頁面,發送訪問請求,檢查Real Server上的服務是否正常運行,必須確保這裏給出的頁面地址是可訪問的,不然Ldirectord會誤認爲此節點已經失效,發生錯誤監控現象

        receive="Test Page"#指定請求和應答字串,也就是test.html的內容

        virtualhost=www.liwei.com#虛擬服務器的名稱,可任意指定

        scheduler=rr#指定調度算法,這裏是rr(輪詢)算法

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp#指定協議的類型,LVS支持TCPUDP協議

        checktype=negotiate#指定Ldirectord的檢測類型,checktype可以是connnectexternalnegotiateoffonpingchecktimeout這幾個,默認爲negotiate通過頁面交互來判斷服務器節點是否正常

        checkport=80#指定監控的端口號

注:虛擬主機可以設置多個,比如監控Mysql3306端口,郵件SMTP25端口等等

4.配置備用Director ServerLdirectord

[root@LW2 ~]# scp [email protected]:/etc/ha.d/ldirectord.cf /etc/ha.d/

5.在主、備Director Server上配置heartbeat

(1).配置heartbeat的主配置文件(/etc/ha.d/ha.cf

[root@LW1 ~]# vi /etc/ha.d/ha.cf

配置文件如下:

#debugfile /var/log/ha-debug

logfile /var/log/ha-log#指定heartbeat的日誌存放位置

logfacility     local0

bcast   eth1#指定心跳使用以太網廣播方式,並且在eth1接口上進行廣播

keepalive 2#指定心跳間隔時間爲2秒(即2秒在eth1上發送一次廣播)

deadtime 30#如果指定的備用節點在30秒內沒有收到主節點的心跳信號,則立即接管主節點的服務資源

warntime 10#指定心跳延遲的時間爲10秒,當10秒內備用機不能收到主節點的心跳信號時,就會在日誌中寫入一個警告信息,但此時不會切換服務

initdead 120#在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於設置這種情況產生的時間間隔,取值至少爲deadtime的兩倍

udpport 694#設置廣播通信使用的端口,694爲默認使用的端口號

baud    19200#設置串行通信的比特率

#serial /dev/ttyS0#選擇串行通信設備,用於雙機使用串口線連接的情況,如果雙機通過以太網連接,則應該關閉該選項

#mcast eth1 225.0.0.1 694 1 0#採用網卡eth1UDP多播來組織心跳,一般在備用機不止一臺時使用,bcastucastmcast分別代表廣播、單播和多播,是組織心跳的3種方式,任選其一即可

ucast eth1 192.168.1.111#採用網卡eth1UDP單播來組織心跳,後面跟的IP地址應爲雙機中對方的IP地址

auto_failback on#用來定義當主節點恢復後,是否將服務自動切回。

node    LW1

node    LW2

ping 10.0.0.1#選擇ping的節點,ping節點選擇的越好,HA集羣就越強壯。可以選擇固定的路由器作爲ping節點,但是最好不要選擇集羣中的成員作爲ping節點,ping節點僅用來測試網絡連接

(2).配置heartbeat的資源文件(/etc/ha.d/haresources

Haresource文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址以及啓動的服務等集羣資源。文件每一行可以包含一個或多個資源腳本名,資源腳本名之間用空格隔開,參數之間使用兩個冒號隔開。

[root@LW1 ~]# vi /etc/ha.d/haresources

LW1 IPaddr::10.0.0.31/24/eth0:0 httpd#設置LW1爲主節點,集羣服務器的IP地址爲10.0.0.31netmask255.255.255.0,同時指定此IP使用的網絡接口爲eth0:0heartbeat託管的服務爲httpd(此文件爲系統自動檢測,自動啓動)

(3).配置heartbeart的認證文件(/etc/ha.d/authkeys

Authkeys文件用於設定heartbeat的認證方式,該文件中有3種可用的認證方式:crcsha1md5,以下使用crc認證方式,設置如下:

[root@LW1 ~]# vi /etc/ha.d/authkeys

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

注意:無論“auth”後面指定的是什麼數字,在下一行必須作爲關鍵字再次出現,最後確保這個文件的權限是600

6.配置Real Server

LVSDRTUN模式下,用戶的訪問請求到達Real Server後,是直接返回給用戶的,不再經過前端的Director Server,因此,需要在每個Real Server節點上增加虛擬的VIP地址,這樣數據才能直接返回給用戶。增加VIP地址的操作可以通過創建腳本的方式來實現,創建文件/etc/init.d/lvsrs,腳本內容如下:

[root@LW2 ~]# vi /etc/init.d/lvsrs

#!/bin/bash

#description: Start Real Server

VIP=10.0.0.31

***./etc/init.d/functions

case "$1" in

        start)

        echo " Start LVS of Real Server "

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

        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

        ;;

        stop)

        /sbin/ifconfig lo:0 down

         echo " Close LVS of Real Server "

        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 "Usage: $0 {start|stop}"

exit 1

esac

[root@LW3 ~]# chmod 755 /etc/init.d/lvsrs

[root@LW3 ~]# service lvsrs start

Real Server1上執行相同的操作,可以將此文件直接拷貝到LW4上面,給予其執行權限。

LW1LW2上執行:

[root@LW1 ~]# /etc/init.d/ldirectord start 

[root@LW1 ~]# /etc/init.d/heartbeat start

[root@LW2 ~]# /etc/init.d/ldirectord start 

[root@LW2 ~]# /etc/init.d/heartbeat start

[root@LW3 ~]# echo "Real Server 1" > /var/www/html/index.html

[root@LW4 ~]# echo "Real Server 2" > /var/www/html/index.html

[root@LW3 ~]# echo "Test Page" > /var/www/html/test.html

[root@LW4 ~]# echo "Test Page" > /var/www/html/test.html

7.測試:

在瀏覽器中輸入http://10.0.0.31訪問,正常狀態應該是Real Server 1 Real Server 2更換。在LW1上執行ifconfig命令後會看到如下選項:

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:DC:79:5D

          inet addr:10.0.0.31  Bcast:10.0.0.31  Mask:255.255.255.255

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

然後查看httpd服務是處於啓動狀態,/etc/ha.d/haresources此文件會檢查eth0:0httpd的狀態。

LW1上執行如下操作:

[root@LW1 ~]# /etc/init.d/network stop

然後在瀏覽器中訪問:http://10.0.0.31,發現過幾秒後還是可以正常訪問,說明備用Director Server LW2已經成功接替了主Direcotr 的工作,在LW2上執行如下操作:

[root@LW2 ~]# ifconfig 

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:53:F0:93

          inet addr:10.0.0.31  Bcast:10.0.0.31  Mask:255.255.255.255

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

此時,LW2上的httpd服務同樣也是開啓的。當LW1恢復正常時,LW2會把調度權交回LW1手裏,繼續監控LW1的狀態,做爲備用調度主機。

實驗二、

LVS+KeepAlived集羣負載

KeepAlived的配置非常簡單,只需要一個配置文件就可以搞定,以下爲KeepAlived的安裝及配置,需要一、在主、備Director Server安裝KeepAlived

1.下載軟件包keepalived-1.2.7.tar.gz,並安裝:

[root@LW1 ~]# tar vzxf keepalived-1.2.7.tar.gz

[root@LW1 ~]# cd keepalived-1.2.7

[root@LW1 keepalived-1.2.7]# ./configure --sysconf=/etc --with-kernel-dir /usr/src/kernels/2.6.18-274.el5-xen-x86_64

[root@LW1 keepalived-1.2.7]# make 

[root@LW1 keepalived-1.2.7]# make install

[root@LW1 keepalived-1.2.7]# ln -s /usr/local/sbin/keepalived /sbin/

2.在備Director Server LW2上執行相同的操作

二、配置KeepAlived

1.keepalived的配置文件爲/etc/keepalived/keepalived.conf,內容如下:

! Configuration File for keepalived

#全局定義部分

global_defs {

   notification_email {

    [email protected]t#設置報警郵件地址,可以設置多個,每行一個,如果要開啓郵件報警,則需要開啓本機的sendmail服務

   }

   #notification_email_from [email protected]  #設置郵件的發送地址

   #smtp_server 192.168.200.1#設置smtp server的地址

   #smtp_connect_timeout 30#設置連接smtp server的超時時間

   #router_id LVS_DEVEL#表示運行keepalived服務器的一個標識,發郵件時顯示在郵件主題中的信息

}

#Vrrp實例定義部分

vrrp_instance VI_1 {

    state MASTER#指定Keepalived的角色,MASTER表示此主機爲主服務器,BACKUP表示此主機爲備用服務器

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

    virtual_router_id 51#虛擬路由標識,MASTERBACKUP的標識必須相同

    priority 100#定義優先級,數字越大,優先級越高,在vrrp_instance下,MASTER的優先級必須要比BACKUP的優先級大

    advert_int 1#設定MASTERBACKUP負載均衡之間同步檢查的時間間隔,單位是秒

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

        auth_type PASS#設置驗證類型,主要有PASSAH兩種

        auth_pass 1111#設置驗證密碼,在一個vrrp_instance下,MASTERBACKUP必須使用相同的密碼纔可正常通信

    }

    virtual_ipaddress {#設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個

        10.0.0.31

    }

}

#虛擬服務器定義部分

virtual_server 10.0.0.31 80 {#設置虛擬服務器IP地址及其端口,兩者間用空格隔開

    delay_loop 6#設置運行情況檢查時間,單位爲秒

    lb_algo rr#設置負載調度算法,這裏設置爲rr,即輪詢算法

    lb_kind DR#設置LVS實現負載均衡機制,有NATTUNDR三種模式

    nat_mask 255.255.255.0

    persistence_timeout 50#會話保存時間,單位爲秒。

    protocol TCP#指定轉發協議類型,有TCPUDP兩種

    real_server 10.0.0.29 80 {#配置Real Server,需要指定真實IP與其端口號,兩者用空格隔開

        weight 3#配置服務節點的權值,權值大小用數字表示,數字越在,權值越高,要根據服務器的性能來進行調節,服務器性能越高,權值可以相對應調大一點,合理利用和分配系統資源。

         TCP_CHECK {#RealServer的狀態檢測設置部分,單位爲秒。

            connect_timeout 3#表示3秒無響應時超時

            nb_get_retry 3#表示重試次數

            delay_before_retry 3#表示重試間隔

        }

        }

    real_server 10.0.0.30 80 {#配置RealServer2

    weight 1

        TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

        }

    }

}

2.備用DirectorServer配置Keepalived,將上面配置好的主DirectorServerkeepalived.conf拷貝到LW2上然後修改如下字段:

(1)."state MASTER"更改爲“state BACKUP”。

(2)將“priority 100”更改爲一個較小的值,這裏更改爲“priority 80

3.Real Server的配置不變,只需要執行/etc/init.d/lvsrs start則可。

三、啓動keepalived服務

[root@LW1 ~]# /etc/init.d/keepalived start

[root@LW2 ~]# /etc/init.d/keepalived start

四、測試

將第一個實驗中的ldirectordheartbeat服務在LW1LW2上全部關閉,然後進行測試:

1.訪問http://10.0.0.31,可以顯示“Real Server1”或“Real Server2”。

2.關閉LW1 keepalived服務,再次訪問“http://10.0.0.31”,顯示“Real Server1”或“Real Server2”。

3.當關閉LW1 keepalived服務時,LW2日誌顯示如下:

Sep 14 12:16:23 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Transition to MASTER STATE

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Entering MASTER STATE

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) setting protocol VIPs.

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.0.0.31

Sep 14 12:16:24 LW2 Keepalived_healthcheckers[4917]: Netlink reflector reports IP 10.0.0.31 added

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: Netlink reflector reports IP 10.0.0.31 added

Sep 14 12:16:29 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.0.0.31

狀態顯示,LW2BACKUP狀態變爲了MASTER狀態。

當啓動LW1keepalived服務時,LW2的日誌內容如下:

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Received higher prio advert

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Entering BACKUP STATE

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) removing protocol VIPs.

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: Netlink reflector reports IP 10.0.0.31 removed

Sep 14 12:17:53 LW2 Keepalived_healthcheckers[4917]: Netlink reflector reports IP 10.0.0.31 removed

狀態顯示,當LW1keepalived服務恢復時,備用Director Server LW2的狀態由MASTER又變回了BACKUP

以上就是LVS集羣負載的兩種實現方式


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