lvs 兩種方式

 

 

兩種實現方式:

實驗一、

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可以是connnectexternal、 negotiate、offonpingchecktimeout這幾個,默認爲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集羣負載的兩種實現方式

 

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