歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> LVS的兩種實現方法heartbeat和KeepAlived

LVS的兩種實現方法heartbeat和KeepAlived

日期:2017/2/27 16:04:50   编辑:Linux教程
總拓撲圖兩種實現方式:

一. LVS+heartbeat+ldirectord實現集群負載:

1.在主Director Server上和備用Director Server上分別安裝heartbeat、libnet與httpd:
[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支持TCP和UDP協議
checktype=negotiate #指定Ldirectord的檢測類型,checktype可以是connnect、external、 negotiate、off、on、ping和checktimeout這幾個,默認為negotiate, 通過頁面交互來判斷服務器節點是否正常
checkport=80 #指定監控的端口號
注:虛擬主機可以設置多個,比如監控Mysql3306端口,郵件SMTP25端口等等
4.配置備用Director Server的Ldirectord:
[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 #采用網卡eth1的UDP多播來組織心跳,一般在備用機不止一台 時使用,bcast、ucast和mcast分別代表廣播、單播和多播,是組 織心跳的3種方式,任選其一即可
ucast eth1 192.168.1.111 #采用網卡eth1的UDP單播來組織心跳,後面跟的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.31,netmask 為255.255.255.0,同時指定此IP使用的網絡接口為eth0:0,heartbeat 托管的服務為httpd(此文件為系統自動檢測,自動啟動)
(3).配置heartbeart的認證文件(/etc/ha.d/authkeys)
Authkeys文件用於設定heartbeat的認證方式,該文件中有3種可用的認證方式:crc、sha1和md5,以下使用crc認證方式,設置如下:
[root@LW1 ~]# vi /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
注意:無論“auth”後面指定的是什麼數字,在下一行必須作為關鍵字再次出現,最後確保這個文件的權限是600
6.配置Real Server:
在LVS的DR和TUN模式下,用戶的訪問請求到達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
VPn./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上面,給予其執行權限。
在LW1與LW2上執行:
[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:0與httpd的狀態。
在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] #設置報警郵件地址,可以設置多個,每行一個,如果要開啟郵件 報警,則需要開啟本機的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 #虛擬路由標識,MASTER與BACKUP的標識必須相同
priority 100 #定義優先級,數字越大,優先級越高,在vrrp_instance下,MASTER 的優先級必須要比BACKUP的優先級大
advert_int 1 #設定MASTER與BACKUP負載均衡之間同步檢查的時間間隔, 單位是秒
authentication { #設定驗證類型和密碼
auth_type PASS #設置驗證類型,主要有PASS和AH兩種
auth_pass 1111 #設置驗證密碼,在一個vrrp_instance下,MASTER與BACKUP 必須使用相同的密碼才可正常通信
}
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實現負載均衡機制,有NAT、TUN和DR三種模式
nat_mask 255.255.255.0
persistence_timeout 50 #會話保存時間,單位為秒。
protocol TCP #指定轉發協議類型,有TCP和UDP兩種

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,將上面配置好的主DirectorServer的keepalived.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
四、測試
將第一個實驗中的ldirectord與heartbeat服務在LW1與LW2上全部關閉,然後進行測試:
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
狀態顯示,LW2由BACKUP狀態變為了MASTER狀態。
當啟動LW1的keepalived服務時,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
狀態顯示,當LW1的keepalived服務恢復時,備用Director Server LW2的狀態由MASTER又變回了BACKUP。

以上是LVS集群負載的兩種實現方式。
Copyright © Linux教程網 All Rights Reserved