最後更新於2013-11-19 17:03:40
說明:
一、目 的:本文實現的Linux集羣是基於Keepalived-1.2.9軟件實現,二、難 點:實現虛擬IP(VIP)自動切換的同時,還要同時實現虛擬MAC地址(VMAC)的切換,即無論集羣中的Host如何切換,對外訪問的IP和MAC始終不變
三、適用環境:當對外路由或交換機綁定主機MAC時適用
四、整合資源: nginx-1.2.9
五、說 明:若無須對外綁定MAC地址,則大可簡化如下配置1. 環境及軟件:
1) 系統:Debian6 amd64
2) 內核:linux 3.2.0-0.bpo.4-amd64
3) 軟件:keepalived-1.2.9 nginx-1.2.9
2. 網卡配置說明:
MASTER設備IP: eth0: 10.10.1.2/24
BACKUP設備IP: eth0: 10.10.1.3/24
VIP: 192.168.1.10/24
3. nginx安裝步驟:
參見我的另一篇文件《Nginx的安裝與配置》
4. keepalived安裝步驟:
1)升級當前Debian系統內核linux 2.6.32(升級內核的原因是因爲我測試時總是出問題,keepalived官方文檔要求有內核的patch,不過沒看懂,索性升級爲最新版本)a) 修改Debian源文件/etc/apt/sources.list,添加一個向後兼容的源(源地址如下)
deb http://ftp.cn.debian.org/debian-backports squeeze-backports main contrib non-free
b) 更新Debian源文件關聯並升級系統內核至3.2.0(如下標記的linux內核包版本隨着時間的推移可能會有所變化,可通過如下命令進行查詢:aptitude search linux-*)
# aptitude update
# aptitude -t squeeze-backports install linux-image-3.2.0-0.bpo.4-amd64
如果編譯NVDIA的官方驅動的話,還要裝:
# aptitude -t squeeze-backports install linux-headers-3.2.0.bpo.4-amd64
a) 首先要安裝keepalived所依賴的組件
# aptitude install make gcc libpopt-dev libnl-dev libcurl4-openssl-dev
b) 將keepalived-1.2.9.tar.gz文件拷貝到/usr/local/soft下,解壓,編譯並安裝到/usr/local/keepalived
# mkdir /usr/local/soft通過ftp將文件拷貝至/usr/local/soft
# cd /usr/local/soft
# tar zxvf keepalived-1.2.9.tar.gz
# cd keepalived-1.2.9
# ./configure --prefix=/usr/local/keepalived
# make && make install
c) 重置keepalived相關文件,以便開機自動啓動
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin# mkdir /etc/sysconfig
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
d) 修改keepalived啓動腳本
# nano /etc/init.d/keepalived
修改/etc/init.d/keepalived文件,部分片段如下(藍色標記爲註釋內容,紅色標記爲修改內容):
……
#. /etc/rc.d/init.d/functions
. /lib/lsb/init-functions
# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived
RETVAL=0
prog="keepalived"
start() {
echo -n $"Starting $prog: "
# keepalived ${KEEPALIVED_OPTIONS}
keepalived -D
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/$prog
}
stop() {
echo -n $"Stopping $prog: "
killproc keepalived
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/$prog
}
……
condrestart)
if [ -f /var/lock/$prog ]; then
stop
start
fi
;;
……
e) 在/etc/keepalived下創建keepalived配置文件keepalived.conf
# mkdir /etc/keepalived
# nano /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.1.5
smtp_connect_timeout 30
router_id LVS_DEVEL_11 #與backup配置不相同的任意合法字符串
}
vrrp_script chk_http_port {
script "/data/checkNginx.sh" #監控腳本
interval 2 #監控腳本檢測週期
weight 2 #目前搞不清楚
}
vrrp_instance VI_1 {
state MASTER #backup機器配置爲BACKUP
interface eth0 #綁定的網卡名稱
virtual_router_id 250 #必須與backup機器配置相同
use_vmac #名字可爲任意合法字符串(默認字符串 vrrp.${virtual_router_id} 此處默認使用vrrp.250)
priority 200 #優先級,要比backup機器高至少50
advert_int 1
authentication {
auth_type PASS #授權類型,必須與backup相同
auth_pass 1111 #授權密碼,必須與backup相同
}
track_script {
chk_http_port #執行監控的服務名稱
}
192.168.1.10/24 #虛擬ip地址,必須與backup相同
}
nopreempt #不搶佔IP,即當keepalived發生切換後,如果master服務器恢復正常後,backup不會自動重新切換回master,
#這樣避免來回切換帶來的系統開銷,同時也避免了IP切換帶來的系統不穩定性
}
3) 監控腳本/data/checkNginx.sh內容
#!/bin/bash
# 監控腳本功能概述:首先檢查進程中的nginx進程數目,如果不存在(即爲0),則表示nginx未開啓,然後開啓nginx,3秒後重新檢查nginx進程數,若仍爲0,
# 則表示nginx無法正常啓動,此時強制停止keepalived進程,讓虛擬ip切換到backup服務器上
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx進程 把值賦給變量A(注意:這裏不是單引號,而是主鍵盤數字1左邊的鍵"點")
if [ $A -eq 0 ];then ## 如果沒有nginx進程,即值爲零
/usr/local/nginx/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
pkill keepalived ## 則結束 keepalived 進程,使得服務器切換到BACKUP服務器上
fi
fi
4) 啓動keepalived
# invoke-rc.d keepalived start
5) 測試keepalived
a) MASTER啓動時,查看日誌/var/log/messages,顯示keepalived進入MASTER狀態同理,BACKUP機器將進入BACKUP狀態
b) 當MASTER機器down掉時,查看BACKUP機器日誌,顯示keepalived進入MASTER,當MASTER重新啓動時,MASTER機器進入MASTER狀態而BACKUP機器keepalived重新進入BACKUP狀態,此時表示keepalived安裝測試已成功!