keepalivedmysql
Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個mysql或lvs或nginx服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。linux
vrrp協議完成地址流動;nginx
爲vip地址所在的節點生成ipvs規則(在配置文件中預先定義);算法
爲ipvs集羣的各RS作健康狀態檢測;sql
基於腳本調用接口經過執行腳本完成腳本中定義的功能,進而影響集羣事務; bash
HA Cluster配置前提: 服務器
(1) 各節點時間必須同步;負載均衡
ntp, chronyssh
(2) 確保iptables及selinux不會成爲阻礙;tcp
(3) 各節點之間可經過主機名互相通訊(對KA並不是必須);
建議使用/etc/hosts文件實現;
(4) 各節點之間的root用戶能夠基於密鑰認證的ssh服務完成互相通訊;(並不是必須)
安裝keepalived
CentOS 6.4之後再base倉庫中就已經提供了keepalived軟件包,所以可直接使用yum -y install keepalived安裝便可
程序環境:
配置文件:/etc/keepalived/keepalived.conf
主程序:/usr/sbin/keepalived
配置文件講解
keepalived有三類配置區域,注意不是三種配置文件,是一個配置文件裏面三種不一樣類別的配置區域,全局配置(Global Configuration)、VRRPD配置、LVS配置
##########################全局配置#############################
global_defs { notification_email { root@localhost #指定keepalived在發生故障切換時須要發送的Email地址,可定義多個 } notification_email_from keepalived@localhost #指定故障切換時的發件人地址 smtp_server 127.0.0.1 #指定smtp服務器地址 smtp_connect_timeout 30 #指定smtp鏈接超時時間 router_id LVS_DEVEL #運行keepalived機器的一個標識 vrrp_mcast_group4 224.0.0.9 #指定ipv4組播地址 }
##########################VRRP配置##################################
vrrp_instance VI_1 { state MASTER #指定在當前VRRP示例的狀態MASTER|BACKUP,若是設置了nopreempt這個值不起做用,主備靠priority決定 interface eth0 #設置實例綁定的網卡 virtual_router_id 51 ##VRID標記 ,路由ID,可經過#tcpdump vrrp查看 priority 100 #優先級,高優先級競選爲master advert_int 1 #檢查間隔,默認1秒 nopreempt #非搶佔(由於默認若是master掛的時候,backup會頂上,當master再好的時候,會再切回去,這樣就會形成兩次 #斷開,加上nopreempt的時候,及時master又好了,依舊不會切換,可是要注意兩個state 都要是backup) preempt_delay 300 #搶佔式模式下,節點上線後觸發新選舉操做的延遲時長; authentication { #設置認證 auth_type PASS #認證方式 auth_pass 1111 #認證密碼 } virtual_ipaddress { #設置vip 192.168.200.16 192.168.200.17 192.168.200.18 } track_interface { #配置要監控的接口,一旦出現故障則轉爲FAULT狀態 eth0 eth1 ... } notify_master <STRING>|<QUOTED-STRING> #當前節點成爲主節點時觸發的腳本; notify_backup <STRING>|<QUOTED-STRING> #當前節點轉爲備節點時觸發的腳本; notify_fault <STRING>|<QUOTED-STRING> #當前節點轉爲「失敗」狀態時觸發的腳本; }
################################LVS配置##################################
virtual_server 192.168.200.100 443 { #VIP 端口 delay_loop 6 #健康檢查時間間隔 lb_algo rr #lvs調度算法lrr|wrr|lc|wlc|lblc|sh|dh lb_kind NAT #負載均衡轉發規則NAT|DR|TUN nat_mask 255.255.255.0 #nat掩碼 persistence_timeout 50 #會話保持時間 protocol TCP #使用的協議 sorry_server <IPADDR> <PORT> #備用服務器地址,全部realserver失效後啓用 real_server 192.168.201.100 443 { #RIP地址,端口 weight 1 #權重,默認爲1,0失效 inhibit_on_failure ##在服務器健康檢查失效時,將其設爲0,而不是直接從ipvs中刪除 notify_up <STRING>|<QUOTED-STRING> #在檢測到server up後執行腳本 notify_down <STRING>|<QUOTED-STRING> #在檢測到server down後執行腳本 HTTP_GET|SSL_GET { url { path <URL_PATH> #定義要監控的URL status_code <INT> #判斷上述檢測機制爲健康狀態的響應碼 digest <STRING> #判斷上述檢測機制爲健康狀態的響應的內容的校驗碼; } connect_timeout <INTEGER> #鏈接請求的超時時長 nb_get_retry <INT> #重試次數 delay_before_retry <INT> #重試以前的延遲時長 connect_ip <IP ADDRESS> #向當前RS的哪一個IP地址發起健康狀態檢測請求 connect_port <PORT> #向當前RS的哪一個PORT發起健康狀態檢測請求 bindto <IP ADDRESS> #發出健康狀態檢測請求時使用的源地址 bind_port <PORT> #發出健康狀態檢測請求時使用的源端口 } TCP_CHECK { connect_ip <IP ADDRESS> #向當前RS的哪一個IP地址發起健康狀態檢測請求 connect_port <PORT> #向當前RS的哪一個PORT發起健康狀態檢測請求 bindto <IP ADDRESS> #發出健康狀態檢測請求時使用的源地址; bind_port <PORT> #發出健康狀態檢測請求時使用的源端口; connect_timeout <INTEGER> #鏈接請求的超時時長; } } }