隨着系統架構的逐漸演化,服務器的數量和結構會愈來愈複雜,例如 Web 服務器集羣的搭建,提升了系統的性能,同時也提升了系統維護的複雜度,咱們須要對集羣中各臺服務器進行監控,來保證爲用戶提供服務的是正常運行的服務器,總體系統的
可用性
就相當重要。
Keepalived一個基於VRRP 協議來實現的 LVS 服務高可用方案,能夠利用其來解決單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP
,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。html
如上述所說,Keepalived 提供了很好的高可用性保障服務
,它能夠檢查服務器的狀態,若是有服務器出現問題,Keepalived 會將其從系統中移除,而且同時使用備份服務器代替該服務器的工做,當這臺服務器能夠正常工做後,Keepalived 再將其放入服務器羣中,這個過程是 Keepalived 自動完成的,不須要人工干涉,咱們只須要修復出現問題的服務器便可。linux
Keepalived 是以 VRRP
協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol
,即虛擬路由冗餘協議
。nginx
虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master 和多個 backup,master 上面有一個對外提供服務的 VIP(Virtual IP Address)
(該路由器所在局域網內其餘機器的默認路由爲該 vip),master 會發組播,當 backup 收不到 vrrp 包時就認爲 master 宕掉了,這時就須要根據 VRRP 的優先級來選舉
一個 backup 當 master。這樣的話就能夠保證路由器的高可用了。web
keepalived 主要有三個模塊,分別是core、check 和 vrrp。core 模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check 負責健康檢查,包括常見的各類檢查方式。vrrp 模塊是來實現 VRRP 協議的。shell
以檢測 web 服務器爲例,Keepalived 從3個層次來檢測服務器的狀態vim
Layer3 、Layer4 以及 Layer7 工做在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別以下:bash
Layer3:服務器
Keepalived使用Layer3的方式工做時,Keepalived會按期向服務器羣中的服務器發送一個ICMP的數據包(既咱們平時用的Ping程序),若是發現某臺服務的IP地址沒有激活,Keepalived 便報告這臺服務器失效,並將它從服務器羣中剔除,這種狀況的典型例子是某臺服務器被非法關機。Layer3 的方式是以服務器的IP地址
是否有效做爲服務器工做正常與否的標準。網絡
Layer4:架構
若是您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP 端口的狀態
來決定服務器工做正常與否。如 web server 的服務端口通常是80,若是 Keepalived 檢測到80端口沒有啓動,則 Keepalived 將把這臺服務器從服務器羣中剔除。
Layer7:
Layer7 就是工做在具體的應用層了,比Layer3,Layer4要複雜一點,在網絡上佔用的帶寬也要大一些。Keepalived 將根據用戶的設定檢查服務器程序的運行是否正常,若是與用戶的設定不相符,則 Keepalived 將把服務器從服務器羣中剔除。
首先,每一個節點有一個初始優先級,由配置文件中的priority
配置項指定,MASTER 節點的 priority 應比 BAKCUP 高。運行過程當中 keepalived 根據 vrrp_script 的 weight
設定,增長或減少節點優先級。規則以下:
weight
值爲正時,腳本檢測成功時」weight」值會加到」priority」上,檢測失敗時不加
weight
爲負數時,腳本檢測成功時」weight」不影響」priority」,檢測失敗時,Master節點的權值將是「priority「值與「weight」值之差
VRRP通告
的 IP 做爲比較對象,IP較大者爲MASTER。Keepalived 官網下載地址:https://www.keepalived.org/do...
解壓
tar -zxvf keepalived-2.0.18.tar.gz
configure
,那麼就能夠作配置了(配置安裝和nginx如出一轍)
使用configure
命令配置安裝目錄與核心配置文件所在位置
./configure --prefix=/usr/local/keepalived --sysconf=/etc
配置過程當中可能會出現警告信息,以下所示:
解決方法:安裝 libnl/libnl-3 依賴 yum -y install libnl libnl-devel
,從新configure
一下就行了。
安裝keepalived
make && make install
/etc/keepalived
,該目錄下爲keepalived核心配置文件進入解壓縮安裝包的 etc
文件夾
將系統配置文件拷貝至系統 etc
文件
cp init.d/keepalived /etc/init.d/ cp sysconfig/keepalived /etc/sysconfig/
刷新系統服務,加載新添加的 Keepalived 服務
systemctl daemon-reload
vim keepalived.conf
打開配置文件,詳細配置以下global_defs { # 路由id:當前安裝keepalived的節點主機標識符,保證全局惟一 router_id keep_104 } vrrp_instance VI_1 { # 表示狀態是MASTER主機仍是備用機BACKUP state MASTER # 該實例綁定的網卡名稱 interface ens33 # 保證主備節點一致便可 virtual_router_id 51 # 權重,master權重通常高於backup,若是有多個,那就是選舉,誰的權重高,誰就當選 priority 100 # 主備之間同步檢查時間間隔,單位秒 advert_int 2 # 認證權限密碼,防止非法節點進入 authentication { auth_type PASS auth_pass 1111 } # 虛擬出來的ip,能夠有多個(vip) virtual_ipaddress { 192.168.1.108 } }
附:查看網卡名稱
在sbin目錄中進行啓動(同nginx),以下圖:
查看進程
ps -ef|grep keepalived
在網卡 ens33 下,多了一個 192.168.1.108
,這個就是虛擬ip
在配置完 Keepalived 主服務器節點後,接下來就能夠配置備用服務器節點了,備用服務器配置以下:
global_defs { router_id keep_105 } vrrp_instance VI_1 { # 備用機設置爲BACKUP state BACKUP interface ens33 virtual_router_id 51 # 權重低於MASTER priority 80 advert_int 2 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { # 注意:主備兩臺的vip都是同樣的,綁定到同一個vip 192.168.1.108 } }
啓動 Keepalived
# 啓動keepalived systemctl start keepalived # 中止keepalived systemctl stop keepalived # 重啓keepalived systemctl restart keepalived
查看備用服務器 Keepalived 進程
如今主服務器節點 192.168.1.104
以及備用服務器節點 192.168.1.105
以及 Keepalived 虛擬 IP 192.168.1.105
已配置完畢
這裏我在本地將 Keepalived 虛擬IP 192.168.1.108
已映射至 www.keep.com
因此直接訪問 www.keep.com
便可訪問主服務器節點
當主服務器節點的 Keepalived 服務不可用時(這裏我直接將主服務器的 Keepalived 服務直接中止systemctl stop keepalived.service
,便於測試),虛擬IP 自動綁定至備用服務器節點地址
增長Nginx重啓檢測腳本
vim /etc/keepalived/check_nginx_alive_or_not.sh
#!/bin/bash A=`ps -C nginx --no-header |wc -l` # 判斷nginx是否宕機,若是宕機了,嘗試重啓 if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx # 等待一小會再次檢查nginx,若是沒有啓動成功,則中止keepalived,使其啓動備用機 sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
增長運行權限
chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
在 keepalived.conf 配置定時監聽 nginx 狀態腳本
vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive_or_not.sh" interval 2 # 每隔兩秒運行上一行腳本 weight 10 # 若是腳本運行成功,則升級權重+10 # weight -10 # 若是腳本運行失敗,則升級權重-10 }
在vrrp_instance
中新增監控的腳本
track_script { check_nginx_alive # 追蹤 nginx 腳本 }
重啓Keepalived使得配置文件生效
systemctl restart keepalived
首先須要配置雲服務的 DNS 解析配置和負載均衡,詳細配置參考:
Keepalived 雙主熱備詳細配置:
規則:以一個虛擬ip分組歸爲同一個路由
主節點配置
global_defs { router_id keep_104 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.108 } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id 52 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.138 } }
備用節點配置
global_defs { router_id keep_105 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.108 } } vrrp_instance VI_2 { state MASTER interface ens33 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.138 } }