官網(wǎng):http://www.keepalived.org/
渠縣網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,渠縣網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為渠縣上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的渠縣做網(wǎng)站的公司定做!核心組件:core:是keepalived的核心,復(fù)雜主進程的啟動和維護,全局配置文件的加載解析等
check:負責healthchecker(健康檢查),包括了各種健康檢查方式,以及對應(yīng)的配置的解析包括LVS的配置解析
vrrp:VRRPD子進程,VRRPD子進程就是來實現(xiàn)VRRP協(xié)議的
libipfwc:iptables(ipchains)庫,配置LVS會用到
libipvs*:配置LVS會用到
注意,keepalived和LVS完全是兩碼事,只不過他們各負其責相互配合而已
keepalived啟動后會有三個進程
父進程:內(nèi)存管理,子進程管理等等
子進程:VRRP子進程
子進程:healthchecker子進程
兩個子進程都被系統(tǒng)WatchDog看管,兩個子進程各自復(fù)雜自己的事,healthchecker子進程復(fù)雜檢查各自服務(wù)器的健康程度,例如HTTP,LVS等等,如果healthchecker子進程檢查到MASTER上服務(wù)不可用了,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,并且去掉虛擬IP,轉(zhuǎn)換為BACKUP狀態(tài)
工作原理以下內(nèi)容來自網(wǎng)絡(luò)
keepalived工作在 Layer3,4,7;工作在TCP/IP協(xié)議棧的IP層,TCP層,及應(yīng)用層,原理分別如下:
Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向服務(wù)器群中的服務(wù)器發(fā)送一個ICMP的數(shù)據(jù)包(既我們平時用的Ping程序),如果發(fā)現(xiàn)某臺服務(wù)的IP地址沒有激活,Keepalived便報告這臺服務(wù)器失效,并將它從服務(wù)器群中剔除,這種情況的典型例子是某臺服務(wù)器被非法關(guān)機。Layer3的方式是以服務(wù)器的IP地址是否有效作為服務(wù)器工作正常與否的標準。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態(tài)來決定服務(wù)器工作正常與否。如web server的服務(wù)端口一般是80,如果Keepalived檢測到80端口沒有啟動,則Keepalived將把這臺服務(wù)器從服務(wù)器群中剔除。
Layer7:Layer7就是工作在具體的應(yīng)用層了,比Layer3,Layer4要復(fù)雜一點,在網(wǎng)絡(luò)上占用的帶寬也要大一些。Keepalived將根據(jù)用戶的設(shè)定檢查服務(wù)器程序的運行是否正常,如果與用戶的設(shè)定不相符,則Keepalived將把服務(wù)器從服務(wù)器群中剔除。
環(huán)境- os: centos 6.4 x86_64
- keepalived version: 1.2.7-3
centos 6.4之后官方的yum里已經(jīng)提供了keepalived的RPM包,所以直接yum安裝即可
yum install -y keepalived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
主要包括三部分:
花括號“{}”。用來分隔定義塊,因此必須成對出現(xiàn)。如果寫漏了,keepalived運行時,不會得到預(yù)期的結(jié)果。由于定義塊內(nèi)存在嵌套關(guān)系,因此很容易遺漏結(jié)尾處的花括號,這點要特別注意。
- 全局定義塊global_defs {
notification_email { #指定keepalived在發(fā)生切換時需要發(fā)送email到的對象,一行一個,建議不用,用其他監(jiān)控方案代替
liutiansi@gmail.com
}
notification_email_from Alexandre.Cassen@firewall.loc #指定發(fā)件人
smtp_server 127.0.0.1 #指定smtp服務(wù)器地址
smtp_connect_timeout 3 #指定smtp連接超時時間
router_id LVS_DEVEL #運行keepalived機器的一個標識,在一個網(wǎng)絡(luò)內(nèi),它應(yīng)該是唯一的
}
#監(jiān)控haproxy 進程
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # widely used idiom
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK weight -2 #經(jīng)測試keepalived 1.17版本加這個配置不能切換,最新版本1.21加上這個則可以
}
vrrp_sync_group VG_1{ #監(jiān)控多個網(wǎng)段的實例group,每個實例group必須包含一個vrrp實例
group {
inside_network #實例名,確定失敗切換(FailOver)包含的路由實例個數(shù)。即在有2個負載均衡器的場景,
#一旦某個負載均衡器失效,需要自動 切換到另外一個負載均衡器的實例是哪些
outside_network
}
notify_master /path/xx.sh #指定當切換到master時,執(zhí)行的腳本
netify_backup /path/xx.sh #指定當切換到backup時,執(zhí)行的腳本
notify_fault "path/xx.sh VG_1" #故障時執(zhí)行的腳本
notify /path/xx.sh
smtp_alert #使用global_defs中提供的郵件地址和smtp服務(wù)器發(fā)送郵件通知
}
#Vrrp實例vrrp_instance.實例名出自實例組group所包含的那些名字
vrrp_instance inside_network {
state BACKUP #實例狀態(tài)state.只有MASTER和BACKUP兩種狀態(tài),并且需要大寫這些單詞。其中MASTER為工作狀態(tài),BACKUP為備用狀態(tài)。
#當MASTER所在的服務(wù)器失效時,BACKUP所在的系統(tǒng)會自動把它的狀態(tài)有BACKUP變換成MASTER;
#當失效的MASTER所在的系統(tǒng)恢復(fù)時,BACKUP從MASTER恢復(fù)到BACKUP狀態(tài)。
#主備的靠priority決定
#nopreempt #設(shè)置為不搶占 注:這個配置只能設(shè)置在backup主機上,而且這個主機優(yōu)先級要比另外一臺高
interface eth0 #設(shè)置實例綁定的網(wǎng)卡,即VIP所在的網(wǎng)卡,因為在配置虛擬IP的時候必須是在已有的網(wǎng)卡上添加的
dont_track_primary #忽略vrrp的interface錯誤(默認不設(shè)置)
track_interface{ #設(shè)置額外的監(jiān)控,里面那個網(wǎng)卡出現(xiàn)問題都會切換,一般都會對內(nèi)外網(wǎng)卡同時進行監(jiān)控
eth0
eth1
}
mcast_src_ip #發(fā)送多播包的地址,如果不設(shè)置默認使用綁定網(wǎng)卡的primary ip
garp_master_delay #在切換到master狀態(tài)后,延遲進行g(shù)ratuitous ARP請求
virtual_router_id 50 #虛擬路由標識 ,可通過 #tcpdump vrrp 查看.這個標識是一個數(shù)字,并且同一個vrrp實例使用唯一的標識。
#即同一個vrrp_instance,MASTER和BACKUP的virtual_router_id是一致的,同時在整個vrrp內(nèi)是唯一的。
priority 99 #優(yōu)先級:這是一個數(shù)字,數(shù)值愈大,優(yōu)先級越高。在同一個vrrp_instance里,MASTER的優(yōu)先級高于BACKUP
advert_int 1 #同步通知間隔:MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位為秒。
preempt_delay #搶占延時,默認5分鐘,通過這種方式防止意外的切換導(dǎo)致角色的切換
debug #開啟debug,默認可以不開啟
authentication { #設(shè)置認證
auth_type PASS #類型主要有PASS、AH兩種,通常使用的類型為PASS
auth_pass 111111 #驗證密碼為明文,同一vrrp實例MASTER與BACKUP 使用相同的密碼才能正常通信。
}
virtual_ipaddress { #虛擬IP,即VIP,可以有多個地址,每個地址占一行,不需要指定子網(wǎng)掩碼
#注意:如果lvs+keepalived場景中,這個ip必須與我們在lvs客戶端設(shè)定的vip相一致
192.168.202.200
}
virtual_routes { #設(shè)置默認路由
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2 192.168.112.0/24 via 192.168.100.254
}
preempt delay #搶占延遲
}
virtual_server 192.168.202.200 23 { # 這個ip后面一個空格,然后加上端口號。定義一個vip,可以實現(xiàn)多個tcp端口的負載均衡功能
delay_loop 6 #健康檢查時間間隔,單位是秒
lb_algo rr #負載均衡調(diào)度算法(rr|wrr|lc|wlc|lblc|sh|dh),比較常見的是rr和nlc
lb_kind DR #負載均衡轉(zhuǎn)發(fā)規(guī)則(NAT|DR|TUN)
persistence_timeout 50 #會話保持時間,單位是s,此選項用來提供保持會話功能
protocol TCP #使用的協(xié)議,TCP和UDP
persistence_granularity <NETMASK> #lvs會話保持粒度
virtualhost <string> #檢查的web服務(wù)器的虛擬主機(host:頭)
sorry_server<IPADDR> <port> #備用機,所有realserver失效后啟用,利用這個sorry server提供一個優(yōu)雅的維護頁面
real_server 192.168.200.5 23 { #也即服務(wù)器池。Real_server的值包括ip地址和端口號。多個連續(xù)的真實ip
weight 1 #權(quán)重值是一個數(shù)字,數(shù)值越大,權(quán)重越高。
#使用不同的權(quán)重值的目的在于為不同性能的機器分配不同的負載,性能較好的機器,負載分擔大些;
#反之,性能差的機器,則分擔較少的負載,這樣就可以合理的利用不同性能的機器資源。
inhibit_on_failure #在服務(wù)器健康檢查失效時,將其設(shè)為0,而不是直接從ipvs中刪除
notify_up <string> | <quoted-string> #在檢測到server up后執(zhí)行腳本
notify_down <string> | <quoted-string> #在檢測到server down后執(zhí)行腳本
TCP_CHECK {
connect_timeout 3 #連接超時時間
nb_get_retry 3 #重連次數(shù)
delay_before_retry 3 #重連間隔時間
connect_port 23 #健康檢查的端口的端口
bindto <ip>
}
HTTP_GET | SSL_GET{
url{ #檢查url,可以指定多個
path /
digest <string> #檢查后的摘要信息
status_code 200 #檢查的返回狀態(tài)碼
}
connect_port <port>
bindto <IPADD>
connect_timeout 5
nb_get_retry 3
delay_before_retry 2
}
SMTP_CHECK{
host{
connect_ip <IP ADDRESS>
connect_port <port> #默認檢查25端口
bindto <IP ADDRESS>
}
connect_timeout 5
retry 3
delay_before_retry 2
helo_name <string> | <quoted-string> #smtp helo請求命令參數(shù),可選
}
MISC_CHECK{
misc_path <string> | <quoted-string> #外部腳本路徑
misc_timeout #腳本執(zhí)行超時時間
misc_dynamic #如設(shè)置該項,則退出狀態(tài)碼會用來動態(tài)調(diào)整服務(wù)器的權(quán)重
#返回0 正常,不修改;返回1,檢查失敗,權(quán)重改為0;返回2-255,正常,權(quán)重設(shè)置為:返回狀態(tài)碼-2
}
}
通過RPM安裝的直接利用腳本
/etc/init.d/keepalivedstart
keepalived啟動信息可以從日志中看到
tail-f/var/log/message
實例: 1、角色自動切換以及事件通知角色的自動切換,原理是在global選項中定義一段腳本,在vrrp_instance中進行引用,觸發(fā)了腳本,自動調(diào)整priority達到選舉變更角色的目的
#global選項中加上如下的判定條件
vrrp_script change_role {
script "[[ -e /tmp/ChangeRole ]] && exit 1 || exit 0" #這里緊緊是一條shell命令,也可以是一個腳本
interval 1
weight -5 #自動調(diào)整優(yōu)先級-5
}
#vrrp_instance實例中引用
track_script {
change_role
}
#只要當/tmp/ChangeRole出現(xiàn)的時候,優(yōu)先級自動-5,小于backup,選舉的時候就會更換角色
#要監(jiān)控某項服務(wù)例如nginx
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 1
weight -2
}
#vrrp_instance中進行引用
track_script {
chk_maintainace chk_nginx
}
角色轉(zhuǎn)換的時候進行通知,結(jié)合上面進行角色更替時候發(fā)送郵件,這里仍舊不推薦,可以使用zabbix或者是nagios進行報警
#vrrp_instance實例塊中定義
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
#發(fā)送郵件的前提是global中關(guān)于smtp的定義已經(jīng)定義好
以下為一個簡易通知腳本
#!/bin/bash
VIP=172.16.1.10
contact=\'root@localhost\'
notify() {
mailsubject="`hostname` to be $1: $VIP floating"
mailbody="`date \'+%F %H:%M:%S\'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master exit 0
;;
backup)
notify backup exit 0
;;
fault)
notify fault exit 0
;;
*)
echo \'Usage: `basename $0` {master | backup | fault}\'
exit 1
;;
esac
virtual_server 172.16.100.1 80 {
delay_loop 5
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
protocol TCP
real_server 172.16.100.10 80 {
weight 1
HTTP_GET {
url {
path /
state_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.100.20 80 {
weight 1
HTTP_GET {
url {
path /
state_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
實現(xiàn)master/master雙主,原理其實就是只要定義不同的vrrp_instance來實現(xiàn)
#部分配置文件如下
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.16.1.10/24 dev eth1
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 52
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.16.100.10/24 dev eth1
}
}
同樣在另一個keepalived節(jié)點上兩者vrrp_instance的實例角色恰好相反,這樣即可實現(xiàn)master/master模型
本文名稱:keepalived-2-配置文件詳解
轉(zhuǎn)載源于:http://www.rwnh.cn/article2/cpdgoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站收錄、網(wǎng)站導(dǎo)航、企業(yè)建站、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)