keepalived是什麼:
node
簡單來講 Keepalived 的功能
功能1.使用VRRP協議 來控制一組高可用(HA) 主備系統,一臺master工做,一臺slave熱備;master失效後slave當即接替工做
功能2.監控 工做集羣中的主機 ,若是有一臺服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除
當服務器工做正常後Keepalived自動將web服務器加入到服務器羣中
mysql
keepalived是集羣管理中保證集羣高可用的一個服務軟件,其功能相似於heartbeat,用來防止單點故障。
可是它通常不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一塊兒工做來達到集羣的高可用。nginx
1. Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。Keepalived是VRRP的完美實現.web
(功能1)keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。sql
虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup。master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級來選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。
MASTER實現針對虛擬路由器IP的各類網絡功能,如ARP請求,ICMP,以及數據的轉發等;其餘設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。當主機失效時,BACKUP將接管原先MASTER的網絡功能
配置VRRP協議時須要配置每一個路由器的虛擬路由器ID(VRID)和優先權值,使用VRID將路由器進行分組,
具備相同VRID值的路由器爲同一個組,VRID是一個0~255的正整數;
同一組中的路由器經過使用優先權值來選舉MASTER,優先權大者爲MASTER,優先權也是一個0~255的正整數(255最大)。緩存
MASTER選舉:
若是對外的虛擬路由器IP就是路由器自己配置的IP地址的話,該路由器始終都是MASTER;
不然若是不具有虛擬IP的話,將進行MASTER選舉,各路由器都宣告本身是MASTER,發送VRRP通告信息;
若是收到其餘機器的發來的通告信息的優先級比本身高,將轉回BACKUP狀態;
若是優先級相等的話,將比較路由器的實際IP,IP值較大的優先權高;
不過若是對外的虛擬路由器IP就是路由器自己的IP的話,該路由器始終將是MASTER,這時的優先級值爲255。服務器
keepalived主要有三個模塊,分別是core、check和vrrp。
core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。
check負責健康檢查,包括常見的各類檢查方式。
vrrp模塊是來實現VRRP協議的。網絡
keepalived只有一個配置文件keepalived.conf,裏面主要包括如下幾個配置區域,分別是
global_defs、 故障時默認郵件發送 參數
static_ipaddress、 設置本節點的IP 若是你的機器上已經配置了IP和路由,那麼這兩個區域能夠不用配置
static_routes、 設置本節點路由信息 若是你的機器上已經配置了IP和路由,那麼這兩個區域能夠不用配置
vrrp_script、 用來作健康檢查,檢查失敗時會將vrrp_instance的priority減小相應的值。負載均衡
vrrp_instance 用來定義對外提供服務的VIP區域及其相關屬性
virtual_server 通常在超大型的LVS中用到,通常LVS用不到,略過網站
全局配置又包括兩個子配置
全局定義(global definition)
靜態路由配置(static ipaddress/routes)
實戰階段:
1.全局定義(global definition)
global_defs {
notification_email 發生諸如切換操做時發送email通知郵件地址 能夠多個每行一個
{
admin@example.com
}
notification_email_from admin@example.com 發送通知郵件時郵件源地址是誰
smtp_server 127.0.0.1 發送email時使用的smtp服務器地址
stmp_connect_timeout 30 鏈接smtp鏈接超時時間
router_id node1 機器標識 節點名標識,主要用於通知中
}
2.靜態地址和路由配置
static_ipaddress {
10.210.214.163/24 brd 10.210.214.255 dev eth0 靜態ip配置 這裏實際上和系統裏面命令配置IP地址和路由同樣
...}
static_routes {
10.0.0.0/8 via 10.210.214.1 dev eth0 靜態路由配置
...}
以上分別表示啓動/關閉keepalived時在本機執行的以下命令:
# /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0
# /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0
# /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0
注意: 請忽略這兩個區域,通常這個區域不須要配置,由於我堅信你的機器確定已經配置了IP和路由。
2、VRRPD配置
VRRPD配置包括三個類
VRRP實例(VRRP Instance)
VRRP同步組(synchroization group)
VRRP腳本
1.VRRP實例(instance)
vrrp_instance http {
state MASTER 實例初始狀態(還要根據priority值肯定)能夠是MASTER 或 BACKUP
若是設置了nopreempt 則這個值不起做用,主從根據priority肯定
interface eth0 實例節點固有IP(非VIP)的網卡,用來發VRRP包
dont_track_primary 忽略VRRP網卡錯誤。(默認未設置)
track_interface { 監控如下網卡,若是任何一個不通就會切換到故障FALT狀態。(可選項)
eth0 eth1
}
mcast_src_ip <IPADDR> vrrp組播包的源地址,默認源地址爲master的IP 這裏至關於heartbeat的心跳端口
若是沒有設置那麼就用默認的綁定的網卡的IP,也就是interface指定的IP地址
garp_master_delay 10 當切換爲Master狀態後多久更新ARP緩存
virtual_router_id 51 虛擬路由標識即VRID 相同的VRID爲一個組 他將決定多播的MAC地址
priority 100 定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER 的優先級必須大於BACKUP。
這個選項的值最好高於其餘機器50個點,該項範圍是1-255
advert_int 1 檢查間隔默認爲1秒
authentication { 設置認證
auth_type PASS 認證方式能夠是PASS或AH兩種認證方式
autp_pass 1234 認證密碼
}
設置虛擬IP 能夠設置多個
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
設置虛擬路由的地方
virtual_routes {
# 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
}
nopreempt 設置不搶佔,這裏只能設置在state爲backup的節點上
並且這個節點的優先級必須別另外的高。當主MASTER恢復後不搶佔資源
preemtp_delay 300 搶佔延遲 master啓動多久以後進行接管資源(VIP/Route信息等)
debug debug級別
}
state | nopreempt | priority | |
主機 | backup | 設置 | 100 |
從機 | backup | 不設置 | 50 |
2.VRRP同步組(synchroization group)配置
定義vrrp_intance組,使得這個組內成員動做一致。
例如兩個vrrp_instance同屬於一個vrrp_rsync_group,
那麼其中一個vrrp_instance發生故障切換時,另外一個vrrp_instance也會跟着切換(即便這個instance沒有發生故障)。
vrrp_sync_group VG_1 {
group {
http
mysql
}
notify_master /path/to/to_master.sh 表示當切換到master狀態時要執行的腳本
notify_backup /path_to/to_backup.sh 表示當切換到backup狀態時要執行的腳本
notify_fault "/path/fault.sh VG_1" 表示出錯狀態時要執行的腳本
notify /path/to/notify.sh 表示任何狀態切換時都調用該腳本,該腳本在以上三個腳本執行完成以後進行調用
smtp_alert 表示切換時給global defs中定義的郵件地址發送郵件通知
}
3.VRRP腳本
告訴 keepalived 在什麼狀況下切換,因此尤其重要。能夠有多個 vrrp_script
vrrp_script check_running {
定義腳本名字
interval 10
腳本執行的間隔
weight -10
腳本執行的優先級
}
若是script中的指令執行失敗,那麼相應的的優先級會減小10個點vrrp_instance