keepalivednginx
keepalived的誕生本是爲lvs提供高可用的,可是如今keepalived能夠當成一組獨立的高可用組件來使用,其主要是經過VRRP協議實現高可用(VRRP是什麼這裏不作過多介紹),而keepalived實現故障轉移主要是經過優先級搶佔來實現的(也可經過down掉其中一個keepalived),一般狀況下是一主一備(固然也能夠雙主),後端
下面是官網的keepalived設計圖服務器
2.1Scheduler -I/O Multiplexertcp
keepalived是使用I/O複用實現管理通訊的.ide
2.2 Memory Mngt設計
keepalived本身實現內存管理,包括內存分配,內存再分配,內存釋放等.router
2.3 Control Planeserver
配置管理的東東,只須要按照默認的配置文件格式便可blog
2.4 Watch Dog進程
keepalived啓動時會生成三個進程,其中主進程就靠這個Watch Dog去監控兩個子進程,若是子進程掛了,會嘗試去重啓子進程,若是啓動失敗,就會把服務轉移到備用節點上.
2.5 VRRP Stack
keepalived的一個重要功能,高可用的主要實現之一,VRRP協議主要是實現路由冗餘的,keepalived就是靠VRRP在後端的兩臺real server虛擬一個vip和一個vmac地址,當一臺的keepalived(或者使用Checkers監控的服務)掛了的時候能夠把vip和vmac轉移到另外一臺real server上,實現高可用.
2.6Checkers
這也是keepalived的一個重要功能,主要對後端real server的服務進行健康狀態檢測的,若是檢測到當前定義的檢測項dead了的話,經過下降主服務器的優先級來實現故障轉移.內置了tcp,http,ssl等檢測手段,固然,這些還不夠的話,能夠使用自定義腳本,
2.7SMTP
這個是郵件模塊,主要是當服務發生轉移或者其它定義的條件被觸發時通知管理員使用的.
2.8 System Call
自定義對服務檢測的腳本
keepalived+nginx(配置以下),ngxinngxin自行定義
master:
! Configuration File for keepalived
global_defs { #全局配置段
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_down { #經過檢測nginx服務是否在線,動態調整優先級
script "`killall -0 nginx ` &> /dev/null && exit 0 || exit 1"
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100 #master進程優先級
advert_int 1 #檢測時長間隔
authentication {
auth_type ldf #和backup的驗證機制
auth_pass 1212
}
virtual_ipaddress {
192.168.128.222 #vip
}
track_script { #追蹤上面定義的檢測腳本名
check_down
}
}
backup
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_down {
script "`killall -0 nginx ` &> /dev/null && exit 0 || exit 1"
interval 1
weight -2
}
vrrp_instance VI_1 {
state BACKUP #backup
interface eth0
virtual_router_id 51 #虛擬mac地址,不能超過255
priority 99 #backup優先級
advert_int 1
authentication {
auth_type ldf
auth_pass 1212
}
virtual_ipaddress {
192.168.128.222
}
track_script {
check_down
}
}