這裏咱們僅僅只利用Keepalive作雙機熱備,也就是保證服務器的高可用性,其餘的不用管。可能您會說這樣在實際應用中不多會這樣用,這您可就錯了,Keepalived僅僅作雙機熱備的狀況仍是有的,我就碰到過幾回這樣的案例,下面就我碰到的幾個案例作個小結
一,Keepalived雙機熱備的應用場景
1,網站流量不高,壓力不大,可是對服務器的可靠性要求極其高,例如實時在線OA系統,政府部門網站系統,醫院實時報醫系統,公安局在線報案系統,股市後臺網站系統等等,他們的壓力不是很大,可是對可靠性要求是很是高的
2,有錢沒地方花的,典型的政府企業,公辦學校等等
二,Keepalived雙機熱備的特性以及優缺點
特性:
1,至少須要兩臺服務器,其中一臺爲master始終提供服務,另一臺做爲backup始終處於空閒狀態,只有在主服務器掛掉的時候他就來幫忙了,這是典型的雙擊熱備
2,能根據需求判斷服務是否可用,在不可用的時候要即便切換
優缺點:
優勢:數據同步很是簡單,不像負載均衡對數據一致性要求很是高,實現起來相對複雜維護也頗爲不便,雙機熱備用rsync就能夠實現了操做和維護很是簡單
缺點:服務器有點浪費,始終有一臺處於空閒狀態
三,Keepalived雙機熱備的配置
首先畫個雙機熱備拓撲圖吧:
php
這裏我只寫最終實現的配置,至於Keepalived的理論知識請參考《Keepalived原理與實戰精講》
1,本例經過Keepalived來實現兩臺LNMP(也就是linux+nginx+mysql+php)架構服務器的雙機熱備
LNMP的配置請參考:《Lnmp配置精講初版》
2,Keepalived配置雙機安裝配置
1》Keepalived安裝
keepalived官方地址:http://www.keepalived.org/download.html,你們能夠到這裏下載最新版本的keepalived
操做系統:centos 5.5 32bit
系統安裝:最小化安裝,也就是去掉全部組件
環境配置:安裝make 和 gcc openssl openssl-devel等等html
yum -y install gcc make openssl openssl-devel wget kernel-devel
node
mkdir -p /usr/local/src/hasoft
mysql
cd /usr/local/src/hasoft
linux
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
nginx
tar -zxvf keepalived-1.2.2.tar.gz
sql
cd keepalived-1.2.2
shell
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/centos
複製代碼bash
預編譯後出現:
Keepalived configuration
------------------------
Keepalived version : 1.2.2
Compiler : gcc
Compiler flags : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use Debug flags : No
複製代碼
make && make install
複製代碼
這裏注意哦,我上面是指通用的安裝方法,若是你沒有用到LVS能夠把lvs去掉即
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/ --disable-lvs-syncd --disable-lvs
但這個沒有影響,就按照個人來配置吧,不過若是你要是集成了LVS,那麼就不可加這兩個參數了哦
整理管理文件:
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
創建配置文件目錄(注意:keepalived的配置文件默認在/etc/keepalived/目錄)
mkdir -p /etc/etc/keepalived/
兩臺服務器(兩個節點)都這樣安裝便可
2》配置
節點A配置以下:
vi /etc/keepalived/keepalived.conf
global_defs
{
notification_email
{
admin@example.com
admin@ywlm.net
}
notification_email_from admin@example.com
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id lnmp_node1
}
vrrp_instance lnmp {
state MASTER
interface eth0
virtual_router_id 100
priority 200
advert_int 5
track_interface {
eth0
eth1
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.17.200
}
}
複製代碼
節點B配置以下:
vi /etc/keepalived/keepalived.conf
global_defs
{
notification_email
{
admin@example.com
admin@ywlm.net
}
notification_email_from admin@example.com
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id lnmp_node1
}
vrrp_instance lnmp {
state MASTER
interface eth0
virtual_router_id 100
priority 150
advert_int 5
track_interface {
eth0
eth1
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.17.200
}
}
複製代碼
四,啓動調試
在節點A上啓動
/usr/local/keepalived/sbin/keepalived
啓動日誌:
Sep 8 18:26:02 centosa Keepalived_vrrp: Registering Kernel netlink reflector
Sep 8 18:26:02 centosa Keepalived_vrrp: Registering Kernel netlink command channel
Sep 8 18:26:02 centosa Keepalived_vrrp: Registering gratutious ARP shared channel
Sep 8 18:26:02 centosa Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
Sep 8 18:26:02 centosa Keepalived_vrrp: Configuration is using : 36076 Bytes
Sep 8 18:26:02 centosa Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
Sep 8 18:26:02 centosa Keepalived: Starting VRRP child process, pid=5606
Sep 8 18:26:07 centosa Keepalived_vrrp: VRRP_Instance(lnmp) Transition to MASTER STATE
Sep 8 18:26:12 centosa Keepalived_vrrp: VRRP_Instance(lnmp) Entering MASTER STATE
Sep 8 18:26:12 centosa avahi-daemon[2528]: Registering new address record for 192.168.17.200 on eth0.
在節點B上啓動
/usr/local/keepalived/sbin/keepalived
開機自動啓動
echo /usr/local/keepalived/sbin/keepalived >> /etc/rc.local
啓動日誌:
Sep 8 18:30:02 centosb Keepalived: Starting Keepalived v1.2.2 (09/08,2011)
Sep 8 18:30:02 centosb Keepalived: Starting Healthcheck child process, pid=5837
Sep 8 18:30:02 centosb Keepalived_vrrp: Registering Kernel netlink reflector
Sep 8 18:30:02 centosb Keepalived_vrrp: Registering Kernel netlink command channel
Sep 8 18:30:02 centosb Keepalived_vrrp: Registering gratutious ARP shared channel
Sep 8 18:30:02 centosb Keepalived: Starting VRRP child process, pid=5839
Sep 8 18:30:02 centosb kernel: IPVS: Registered protocols (TCP, UDP, AH, ESP)
Sep 8 18:30:02 centosb kernel: IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
Sep 8 18:30:02 centosb kernel: IPVS: ipvs loaded.
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Registering Kernel netlink reflector
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Registering Kernel netlink command channel
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
Sep 8 18:30:02 centosb Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
Sep 8 18:30:02 centosb Keepalived_vrrp: Configuration is using : 36252 Bytes
Sep 8 18:30:02 centosb Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Configuration is using : 6271 Bytes
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...
Sep 8 18:30:02 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Entering BACKUP STATE
從日誌能夠看出,啓動都沒有問題,而且安裝我給的優先級完成了競選,各自成就了各自的狀態
關閉節點A的網卡測試切換是否正常
ifdown eth0
觀察節點B的日誌:
Sep 8 18:32:55 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Transition to MASTER STATE
Sep 8 18:33:00 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Entering MASTER STATE
Sep 8 18:33:00 centosb avahi-daemon[2531]: Registering new address record for 192.168.17.200 on eth0.
啓動節點A的網卡測試切換是否正常
ifup eth0
觀察節點B的日誌:
Sep 8 18:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Received higher prio advert
Sep 8 18:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Entering BACKUP STATE
Sep 8 18:33:31 centosb avahi-daemon[2531]: Withdrawing address record for 192.168.17.200 on eth0.
Received higher prio advert:表示接收到更高優先級的公告(advert公告的意思)
Withdrawing:撤回的意思,能夠看出切換過程一目瞭然
OK,到這裏咱們的安裝部分完成,下面咱們來看看如何監控服務吧,咱們這裏僅僅是監控了網絡故障和keepalived自己進程,在網絡或者 keepalived進程出現問題的時候會切換,可是個人節點A裏面還有不少服務呢,例如nginx,PHP,mysql進程出問題或高負載的時候相應過 慢怎麼辦,怎麼切換的呢,這時就要用到腳本了,下面咱們來看看keepalived是如何控制腳原本實現對服務器的監控和切換的
寫個腳原本實時監控三個服務,如有一個出現問題遍切換mkdir /root/shell/
cd /root/shell
vi keepcheck.sh
#!/bin/bash
while :
do
mysqlcheck=`/usr/local/lnmp/mysql/bin/mysqladmin -uroot ping 2>&1`
mysqlcode=`echo $?`
phpcheck=`ps -C php-fpm --no-header | wc -l`
nginxcheck=`ps -C nginx --no-header | wc -l`
keepalivedcheck=`ps -C keepalived --no-header | wc -l`
if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ]||[ $mysqlcode -ne 0 ];then
if [ $keepalivedcheck -ne 0 ];then
killall -TERM keepalived
else
echo "keepalived is stoped"
fi
else
if [ $keepalivedcheck -eq 0 ];then
/etc/init.d/keepalived start
else
echo "keepalived is running"
fi
fi
sleep 5
done
複製代碼
注意,用/etc/init.d/keepalived start若是起不來,能夠用/usr/local/keepalived/sbin/keepalived二進制文件直接執行啓動便可
啓動腳本:
chmod +x /root/shell/keepcheck.sh
nohup sh /root/shell/keepcheck.sh &
複製代碼
節點B也用這個腳本
寫入/etc/rc.local開機自動啓動
echo "nohup sh /root/shell/keepcheck.sh &" >> /etc/rc.loal
複製代碼
能夠測試了本文就寫完了,這個能夠用於生產環境,本人環境就這樣配置的,但不一樣業務有不一樣環境,必定要按需調整,不要盲目盲從!