keepalive高可用
node
-------------------------------------------------------------------------------------------------------------------------------------------
linux
LB lvs/nginx(http/upstream, stream/upstream)後端
SPoF: Single Point of Failurebash
二、系統可用性的公式:A=MTBF/(MTBF+MTTR)網絡
幾個9(指標): 99%, ..., 99.999%,99.9999%;
active --> HEARTBEAT --> passive
active <--> HEARTBEAT <--> active
vip/nginx process[/shared storage]
node:STONITH = Shooting The Other Node In The Head,斷電重啓
八、Failover:故障切換,即某資源的主節點故障時,將資源轉移至其它節點的操做
Failback:故障移回,即某資源的主節點故障後從新修改上線後,將以前已轉移至其它節點的資源從新切回的過程
RHCS:Red Hat Cluster Suite紅帽集羣套件
vrrp協議:Virtual Router Redundancy Protocol,一種容錯協議
backup:備用設備,主路由器故障時,能代替主路由器工做的備用路由器
VIP:Virtual IP,虛擬路由器的IP地址,一個虛擬路由器能夠擁有一個或多個IP地址
VMAC:Virutal MAC (00-00-5e-00-01-VRID),不能用來通訊,只是一種標識而已
搶佔式:發現優先級比本身低的設備在主設備,都會發起新一輪的選舉,讓本身作主設備
(2)爲vip地址所在的節點生成ipvs規則(在配置文件中預先定義)
(4)基於腳本調用接口經過執行腳本完成腳本中定義的功能,進而影響集羣事務,以此支持做調度器的nginx、haproxy等服務
VRRP Stack:vrrp協議的實現,斷定主節點和從節點,並檢測主節點能夠和從節點發heartbeats
建議使用/etc/hosts文件實現,若是DNS出現問題會使穩定性大打折扣
(4) 各節點之間的root用戶能夠基於密鑰認證的ssh服務完成互相通訊(對KA並不是必須)
主配置文件:/etc/keepalived/keepalived.conf
Unit File:/usr/lib/systemd/system/keepalived.service
Unit File的環境配置文件:/etc/sysconfig/keepalived
VRRP synchronization group(s):vrrp同步組
Virtual server(s):ipvs集羣的vs和rs
(1)配置虛擬路由器:每個虛擬路由器對應一個vrrp_instance(vrrp實例)
state MASTER|BACKUP:當前節點在此虛擬路由器上的初始狀態;只能有一個是MASTER,餘下的都應該爲BACKUP
interface IFACE_NAME:綁定爲當前虛擬路由器使用的物理接口
virtual_router_id VRID:當前虛擬路由器唯一標識,範圍是0-255
priority 100:當前物理節點在此虛擬路由器中的優先級;範圍1-254
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.18/24 dev eth2 label eth2:1
track_interface { #配置監控網絡接口,一旦出現故障,則轉爲FAULT狀態 實現地址轉移
(4)preempt_delay 300:搶佔式模式,節點上線後觸發新選舉操做的延遲時長,默認模式
notify_master <STRING>|<QUOTED-STRING>:
notify_backup <STRING>|<QUOTED-STRING>:
notify_fault <STRING>|<QUOTED-STRING>:
notify <STRING>|<QUOTED-STRING>:
通用格式的通知觸發機制,一個腳本可完成以上三種狀態的轉換時的通知
! Configuration File for keepalived
notification_email { ----》定義目標收件人
notification_email_from keepalived@localhost ----》模擬發件人
router_id node1 #主機名,在另外一結點爲node2
vrrp_mcast_group4 224.0.100.100
----》定義組播域的組播地址,默認是224.0.0.18(224~239)
state MASTER ----》定義本身爲master,其他結點上都爲BACKUP
virtual_router_id 6 ----》多個節點必須相同,0~255之間
auth_type PASS ----》只有PASS和AH選項,簡易用PASS
auth_pass 571f97b2 ----》不管密碼多長,只支持前8個字符
virtual_ipaddress { ----》定義虛擬ip
172.18.100.66/16 dev eth0 label eth0:0
結束時候主服務器重啓keepalived服務,從服務器tcpdump -i eth0 -nn host 224.0.56.18,對廣播域抓包,有結果:
在vrrp_instance VI_1 語句塊最後面加下面行
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
contact='root@localhost' ----》表示郵件接受者
mailsubject="$(hostname) to be $1, vip floating"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
echo "Usage: $(basename $0) {master|backup|fault}"
以後vim /etc/keepalived/keepalived.conf,修改完成後重啓keepalived
在另外一節點主機vim /etc/keepalived/keepalived.conf添加一樣內容,scp腳本至此主機,完成後重啓keepalived
virtual_server IP port | virtual_server fwmark int ----》vip 端口或者防火牆標記
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定義調度方法
persistence_timeout <INT>:持久鏈接時長
sorry_server <IPADDR> <PORT>:全部RS故障時,備用服務器地址
notify_up <STRING>|<QUOTED-STRING> RS上線通知腳本
notify_down <STRING>|<QUOTED-STRING> RS下線通知腳本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定義當前主機的健康狀態檢測方法
status_code <INT>:判斷上述檢測機制爲健康狀態的響應碼
digest <STRING>:判斷爲健康狀態的響應的內容的校驗碼
connect_timeout <INTEGER>:鏈接請求的超時時長
delay_before_retry <INT>:重試以前的延遲時長
connect_ip <IP ADDRESS>:向當前RS哪一個IP地址發起健康狀態檢測請求
connect_port <PORT>:向當前RS的哪一個PORT發起健康狀態檢測請求
bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址
bind_port <PORT>:發出健康狀態檢測請求時使用的源端口
connect_ip <IP ADDRESS>:向當前RS的哪一個IP地址發起健康狀態檢測請求
connect_port <PORT>:向當前RS的哪一個PORT發起健康狀態檢測請求
bindto <IP ADDRESS>:發出健康狀態檢測請求時使用的源地址
bind_port <PORT>:發出健康狀態檢測請求時使用的源端口
connect_timeout <INTEGER>:鏈接請求的超時時長
一、keepalived調用外部的輔助腳本進行資源監控,並根據監控的結果狀態能實現優先動態調整
二、vrrp_script:自定義資源監控腳本,vrrp實例根據腳本返回值,公共定義,可被多個實例調用,定義在vrrp實例以外
三、track_script:調用vrrp_script定義的腳本去監控資源,定義在實例以內,調用事先定義的vrrp_script
10、LVS NAT模型VIP和DIP須要同步,須要同步組,通常高可用實現此模型較爲複雜,建議用nginx或haproxy實現
VI_1 # name of vrrp_instance (below)
VI_2 # One for each moveable IP.
說明vip寫到實例VI_1庫,dip寫到實例VI_2裏,兩個實例在以前被vrrp_sync_group 定義到一個同步組VG_1中,因此調度的時候這兩個地址一塊兒漂移
11、keepalived調用外部的輔助腳本進行資源監控,並根據監控的結果狀態能實現優先動態調整;
分兩步:(1) 先定義一個腳本;(2) 在vrrp實例中調用此腳本;
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0"
[[ -f /etc/keepalived/down ]]要特別地做爲bash的參數的運行!
示例:結合外部腳原本影響虛擬路由器的內部判斷結果中各節點或各實例的相關權重
vim /etc/keepalived/keepalived.conf
結果當master的LVS1服務器在/etc/keepalived/新建down文件後,LVS1將降權,ip地址漂移到LVS2上
! Configuration File for keepalived
notification_email_from keepalived@localhost
vrrp_mcast_group4 224.0.100.19
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx && exit 0 || exit 1"
}
virtual_ipaddress {
10.1.0.93/16 dev eno16777736
}
track_script {
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}