keepalived是一個類似于layer3, 4, 5 交換機制的軟體,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web伺服器的狀态,如果有一台web伺服器當機,或工作出現故障,Keepalived将檢測到,并将有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動将web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的隻是修複故障的web伺服器。
本文目錄:
[一]、實驗環境介紹
[二]、伺服器層的雙機熱備(比如伺服器當機、keepalived宕、網絡不通)
[三]、應用層(web)的雙機熱備(比如web應用端口不通、 nginx程序被意外kill )
1.1、軟體資訊:
S-A 192.168.8.183 centos5 keepalived nginx
S-B 192.168.8.150 centos5 keepalived nginx
VirtualIP (虛拟IP):192.168.8.191
1.2、keepalived 标準的安裝步驟:
安裝依賴
yum -y install gcc gcc+ gcc-c++
yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel
安裝核心
yum -y install kernel kernel-devel
目前kernel代碼建立連接配接 ln -s /usr/src/kerners/2.6....../ /usr/src/linux
安裝keepalived
# tar -zxvf keepalived-1.2.2.tar.gz
# cd keepalived-1.2.2
# ./configure
# make
# make install
拷貝相應的檔案
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp -r /usr/local/etc/keepalived/ /etc/
1.3、nginx的安裝和keepalived類似
修改nginx.conf 中監聽端口80->8088:
listen 8088;
server_name localhost;
修改/usr/local/nginx/html/index.html的内容:
192.168.8.183
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx! 192.168.8.183</h1></center>
</body>
</html>
192.168.8.150:
<center><h1>Welcome to nginx! 192.168.8.150</h1></center>
兩台server(S-A,S-B)都需要安裝這兩款軟體。
[二]、伺服器層的雙機熱備(比如伺服器當機、keepalived宕了)
2.1、測試要求:
主機當機、keepalived宕了、網絡不通時,備機能自動接管,不影響VIP:192.168.8.191的通路
2.2、Master(S-A 192.168.8.181)配置檔案/etc/keepalived/keepalived.conf:
! Configuration File for keepalived
global_defs {
notification_email {
}
#notification_email_from [email protected]
#smtp_server 127.0.0.1
#smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.8.191
2.3、Backup(S-B 192.168.8.150)配置資訊/etc/keepalived/keepalived.conf:
state BACKUP
priority 99
Tips:
state 參數值:主的是MASTER、備用的是BACKUP
priority 參數值: MASTER > BACKUP
virtual_router_id: 參數值要一樣
2.4、測試:
兩台測試機S-A、S-B均啟動keepalived和nginx
2.4.1、驗證nginx啟動正常:
通路 master : http://192.168.8.183:8088/
通路 backup: http://192.168.8.150:8088/
2.4.2、檢視keepalived的日志資訊:
master :192.168.8.183
backup:192.168.8.150
2.4.3、浏覽器打開虛拟ip通路:http://192.168.8.191:8088/
2.4.4、kill 192.168.8.181(master) 的keepalived程序,日志資訊如下:

backup:192.168.8.150
2.4.5、浏覽器打開虛拟ip通路:http://192.168.8.191:8088/
2.4.6、再次啟動192.168.8.181的keepalived程序,192.168.8.181會自動接管成為master,192.168.8.150自動轉為backup,從測試結果看,備機能成功接管,已經實作了熱備。
Tips: 如果我們停掉master上的nginx程序,你會發現此時應用通路就失敗了,很顯然這不是我們希望看到的結果,那如何實作web應用的熱備呢,在下一節中我們将詳細講述。
[三]、應用層(web)的雙機熱備(比如nginx程序被意外kill、web端口不通)
3.1.主要是利用keepalived的track_script檢測腳本的原理實作的。
3.2.配置檔案的修改
3.2.1、Master(S-A 192.168.8.181)配置檔案/etc/keepalived/keepalived.conf:
/etc/keepalived/keepalived.conf
vrrp_script chk_http_port {
script "</dev/tcp/127.0.0.1/8088"
interval 1
weight -2
track_script {
chk_http_port
3.2.2、Backup(S-B 192.168.8.150)配置檔案/etc/keepalived/keepalived.conf:
3.2.3、注意點(非常重要)
1)、為什麼主備的參數state都是MASTER,對的你沒有看錯确實要都設定成一樣的,不然并不能實作我們想要的VIP漂浮的效果,我測試很久才發現的.state都設定成MASTER後,會根據priority的值大小競争來決定誰是真正的MASTER,腳本檢測也是在失敗的時候會把權重減去相應的值,比如原來master(181)的priority=100,如果腳本檢測到端口8088無法連接配接,就會priority-2=98,< S-B(150)的priority(99),此時 S-B(150) 将競争成為master,這樣就實作了web應用的熱備。
2)、配置檔案格式一定要注意,比如:track_script {,在“track_script”和“{”之間一定要加空格 ,本來測試時少了個空格,一直無法運作檢測腳本,調試了很久,非常郁悶
3.3、測試過程和上面的過程基本一緻。
本文轉自 yntmdr 51CTO部落格,原文連結:http://blog.51cto.com/yntmdr/1590387,如需轉載請自行聯系原作者