一、 什么是keepalived?
Keepalived是一個用C語言編寫的路由軟件。該項目的主要目標(biāo)是為Linux系統(tǒng)和基于Linux的基礎(chǔ)設(shè)施提供簡單而強大的負載均衡和高可用性設(shè)施。Loadbalancing框架依賴于眾所周知的廣泛使用的Linux虛擬服務(wù)器(IPVS) 內(nèi)核模塊來提供Layer4負載平衡。Keepalived實現(xiàn)了一組檢查器,根據(jù)其健康動態(tài)地自適應(yīng)維護和管理負載均衡服務(wù)器池。另一方面,VRRP實現(xiàn)高可用性 協(xié)議。VRRP是路由器故障轉(zhuǎn)移的根本障礙。另外,Keepalived在VRRP有限狀態(tài)機上實現(xiàn)了一系列鉤子,提供低級和高速的協(xié)議交互。Keepalived框架可以獨立使用,也可以一起使用,以提供彈性基礎(chǔ)設(shè)施。(來源:keepalived官網(wǎng))
二、 keepalived工作原理

- WatchDog 監(jiān)控checkers和VRRP進程的狀況;
- Checkers 負責(zé)真實服務(wù)器的健康檢查healthchecking;
- VRRP Stack負責(zé)負載均衡器之間的失敗切換;
- IPVS wrapper 用來發(fā)送設(shè)定的規(guī)則到內(nèi)核IPVS代碼;
- Netlink Reflector 用來設(shè)定 vrrp 的vip地址等。
keepalived是以VRRP協(xié)議為實現(xiàn)基礎(chǔ)的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。
虛擬路由冗余協(xié)議,可以認為是實現(xiàn)路由器高可用的協(xié)議,即將多個提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機器的默認路由為該vip),master會發(fā)組播,當(dāng)backup收不到vrrp包時就認為master宕掉了,這時就需要根據(jù)VRRP的優(yōu)先級來選舉一個backup當(dāng)master。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個模塊,core、check和vrrp。
- core模塊為keepalived的核心,負責(zé)主進程的啟動、維護以及全局配置文件的加載和解析;
- check負責(zé)健康檢查,包括常見的各種檢查方式;
- vrrp模塊是來實現(xiàn)VRRP協(xié)議的。
三、 安裝(centos為例)
keepalived源碼包下載地址:http://www.keepalived.org/download.html
由于Keepalived官方不提供任何Linux發(fā)行包,只提供源代碼和代碼庫,所以需要編譯安裝。(當(dāng)然也可以用yum、apt-get 安裝)。
1、yum install -y openssl-devel popt-devel
2、編譯
wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
tar zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/usr/local/keepalived
make && make install
注意:如果多處安裝,可以打包可執(zhí)行文件到新環(huán)境直接安裝。
cd /usr/local/ && tar zcvf keepalived-bin-1.2.13.tar.gz ./keepalived
3、安裝
#! /bin/bash
wget http://192.168.70.56/keepalived/keepalived-bin-1.2.13.tar.gz
tar zxvf keepalived-bin-1.2.13.tar.gz
cp ./keepalived/sbin/keepalived /usr/sbin/
cp ./keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp ./keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cd /etc/init.d/
chkconfig --add keepalived
chkconfig keepalived on
mkdir -p /etc/keepalived
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
4、配置
echo "
! Configuration File for keepalived
global_defs { # 全局配置
router_id app_ka_1
}
vrrp_script chk_app {
script "/etc/keepalived/checkMySQL.py -h 127.0.0.1 -P 3306"
interval 15
}
vrrp_instance VI_KA_1 {
state BACKUP # MASTER/BACKUP
nopreempt
interface eth0 #網(wǎng)卡
virtual_router_id 23 # 指定實例所屬的VRRP路由器ID
priority 100 #優(yōu)先級
advert_int 5 #以秒為單位指定廣播時間間隔
# 單播配置
unicast_src_ip 192.168.110.136 #本地IP
unicast_peer {
192.168.110.140 #遠端IP
}
authentication { #認證
auth_type PASS
auth_pass 1111
}
track_script {
chk_app
}
virtual_ipaddress { #VIP定義塊,限制為20個IP地址
192.168.110.200 #vip
}
notify_master #指定在轉(zhuǎn)換到主狀態(tài)期間執(zhí)行的shell腳本
notify_backup #指定在轉(zhuǎn)換到備份狀態(tài)期間執(zhí)行的shell腳本
}
" >/etc/keepalived/keepalived.conf
5.測試
注意:防火墻一定要開啟 vrrp協(xié)議的支持,(端口 112)
四、 keepalived命令行參數(shù):
-f,-use-file = FILE
使用指定的配置文件。默認配置文件是“/etc/keepalived/keepalived.conf”。
-P,-vrrp
只運行VRRP子系統(tǒng)。這對于不使用IPVS負載均衡器的配置很有用。
-C, –check
只運行健康檢查子系統(tǒng)。這對于使用IPVS負載平衡器和單個控制器進行故障切換的配置非常有用。
-l,-log-console
將消息記錄到本地控制臺。默認行為是將消息記錄到syslog。
-D,-log-detail
詳細的日志消息。
-S,-log-facility = [0-7]
將syslog工具設(shè)置為LOG_LOCAL [0-7]。默認的系統(tǒng)日志工具是LOG_DAEMON。
-V,-dont-release-vrrp
不要在守護進程中刪除VRRP VIP和VROUTE。默認行為是當(dāng)keepalived退出時刪除所有的VIP和VROUTE
-I,-dont-release-ipvs
守護進程停止時不要刪除IPVS拓撲。它是在keepalived退出時從IPVS虛擬服務(wù)器表中刪除所有條目的默認行為。
-R,–dont-respawn
不要重新生成子進程。默認行為是如果任一進程退出,則重新啟動VRRP和檢查器進程。
-n,-dont-fork
不要分解守護進程。這個選項會導(dǎo)致keepalived在前臺運行。
-d,-dump-conf
轉(zhuǎn)儲配置數(shù)據(jù)。
-p,-pid = FILE
為父保持進程使用指定的pidfile。keepalived的默認pid文件是“/var/run/keepalived.pid”。
-r,-vrrp_pid = FILE
為VRRP子進程使用指定的pidfile。VRRP子進程的默認pid文件是“/var/run/keepalived_vrrp.pid”。
-c,-checkers_pid = FILE
檢查器子進程使用指定的pidfile。檢查器子進程的默認pid文件是“/var/run/keepalived_checkers.pid”。
-x,-snmp
啟用S??NMP子系統(tǒng)。
-v,-version
顯示版本并退出。
-h,-help
顯示此幫助信息并退出。