Keepalived高可用

一、Keepalived是一個相似於工做在layer3, 4 & 7交換機制的軟件,Keepalived軟件有兩種功能,分別是監控檢查、VRRP冗餘協議。nginx

1)Core,是keepalived的核心,負責主進程的啓動和維護,全局配置文件的加載解析等 。
2)Check,負責healthchecker(健康檢查),包括了各類健康檢查方式,以及對應的配置的解析包括LVS的配置解析;
3)Vrrp,VRRPD子進程,VRRPD子進程就是來實現VRRP協議;
4)Libipfwc,iptables(ipchains)庫,配置LVS會用到;
5)Libipvs,虛擬服務集羣,配置LVS會使用。
Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器、Mysql服務器宕機,或工做出現故障,Keepalived將檢測到後,會將有故障的web服務器或者Mysql服務器從系統中剔除,當服務器工做正常後Keepalived自動將web、Mysql服務器加入到服務器羣中。

Layer3,4&7工做在IP/TCP協議棧的IP層、傳輸層及應用層,實現原理分別以下:web

1)Layer3:Keepalived使用Layer3的方式工做式時,Keepalived會按期向服務器羣中的服務器發送一個ICMP的數據包(若是發現某臺服務的IP地址沒法ping通,Keepalived便報告這臺服務器失效,並將它從服務器集羣中剔除。Layer3的方式是以服務器的IP地址是否有效做爲服務器工做正常與否的標準。)
2)Layer4: Layer4主要以TCP端口的狀態來決定服務器工做正常與否。如WEB server的服務端口通常是80,若是Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。
3)Layer7:Layer7工做在應用層,Keepalived將根據用戶的設定檢查服務器程序的運行是否正常,若是與用戶的設定不相符,則Keepalived將把服務器從服務器羣中剔除。

生產環境使用Keepalived正常運行,共啓動3個進程,一個是父進程,負責監控其子進程,一個是VRRP子進程,另一個是Checkers子進程。sql

二、keepalived VRRP基本原理bash

經過VRRP技術能夠將兩臺物理主機當成路由器,兩臺物理機主機組成一個虛擬路由集羣,Master高的主機產生VIP,該VIP負責轉發用戶發起的IP包或者負責處理用戶的請求,Nginx+Keepalived組合,用戶的請求直接訪問keepalived VIP地址,而後訪問Master相應服務和端口。服務器

在VRRP虛擬路由器集羣中,由多臺物理的路由器組成,可是這多臺的物理路由器並不能同時工做,而是由一臺稱爲MASTER路由器負責路由工做,其它的都是BACKUP,MASTER並不是一成不變,VRRP會讓每一個VRRP路由器參與競選,最終獲勝的就是MASTER。架構

MASTER擁有一些特權,例如擁有虛擬路由器的IP地址或者成爲VIP,擁有特權的MASTER要負責轉發發送給網關地址的包和響應ARP請求。負載均衡

VRRP經過競選協議來實現虛擬路由器的功能,全部的協議報文都是經過IP組播(multicast)包(組播地址 224.0.0.18)形式發送的。虛擬路由器由VRID(範圍0-255)和一組IP地址組成,對外表現爲一個周知的MAC地址。因此在一組虛擬路由器集羣中,無論誰是MASTER,對外都是相同的MAC和VIP。客戶端主機並不須要由於MASTER的改變而修改本身的路由配置。網站

三、Nginx+keepalivedspa

1)環境準備.net

Nginx版本:nginx v1.12.2
Keepalived版本:keepalived v1.2.1
Nginx-1192.168.0.111  (Master)
Nginx-2192.168.0.112 (Backup)

2)nginx安裝

tar -xzf nginx-1.12.2.tar.gz
cd nginx-1.12.2 
sed  -e 's/1.12.2//g' -e 's/nginx\//ddd/g' -e 's/"NGINX"/"ddd"/g' src/core/nginx.h 
./configure --prefix=/usr/local/nginx --user=www --group=www  --with-http_stub_status_module --with-http_ssl_module
make
make install

3)keepalived 配置

tar  -xzvf  keepalived-1.2.1.tar.gz
cd keepalived-1.2.1 
./configure
make
make install 
DIR=/usr/local/
\cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/
\cp $DIR/etc/sysconfig/keepalived   /etc/sysconfig/ 
mkdir  -p  /etc/keepalived
\cp   $DIR/sbin/keepalived         /usr/sbin/

4)配置Keepalived,兩臺服務器keepalived.conf內容都爲以下,state均設置爲backup,Backup服務器須要修改優先級爲90。

! Configuration File for keepalived 
 global_defs { 
  notification_email { 
      support@jfedu.net
 } 
    notification_email_from 183363009@163.com 
    smtp_server 127.0.0.1 
    smtp_connect_timeout 30 
    router_id LVS_DEVEL 
 } 

 vrrp_script chk_nginx { 
    script  "/data/sh/check_nginx.sh"
    interval 2 
    weight 2 
 } 
 # VIP1 
 vrrp_instance VI_1 { 
     state BACKUP 
     interface ens33 
     lvs_sync_daemon_inteface ens33 
     virtual_router_id 151 
     priority 100 
     advert_int 5 
     nopreempt 
     authentication { 
         auth_typePASS 
         auth_pass  1111 

     } 
     virtual_ipaddress { 
         192.168.0.188 
     } 
     track_script { 
     chk_nginx 
    } 
 }

如上配置還須要創建check_nginx腳本,用於檢查本地Nginx是否存活,若是不存活,則kill keepalived實現切換。其中check_nginx.sh腳本內容以下:

#!/bin/bash
#2019年4月27日11:38:48
###########
NUM=`ps -ef|grep nginx|grep -v grep|grep -vc check`
if [[ $NUM -eq 0 ]];then
        service keepalived  stop
fi

四、Nginx+Keepalived 雙主架構

1)Master1上keepalived.conf配置

! Configuration File for keepalived 
 global_defs { 
  notification_email { 
      952886823@163.com 
 } 
    notification_email_from 952886823@163.com 
    smtp_server 127.0.0.1 
    smtp_connect_timeout 30 
    router_id LVS_DEVEL 
 }
 vrrp_script chk_nginx {
    script "/data/sh/check_nginx.sh"
    interval 2 
    weight 2 
 } 
 # VIP1 
 vrrp_instance VI_1 { 
     state MASTER 
     interface ens33
     lvs_sync_daemon_inteface ens33
     virtual_router_id 151 
     priority 100 
     advert_int 5 
     nopreempt 
     authentication { 
         auth_type  PASS 
         auth_pass  1111 
     } 
     virtual_ipaddress { 
         192.168.0.188
     } 
     track_script { 
     chk_nginx 
    } 
 }
# VIP2
 vrrp_instance VI_2 { 
     state BACKUP 
     interface ens33
     lvs_sync_daemon_inteface ens33
     virtual_router_id 152 
     priority  90 
     advert_int 5 
     nopreempt 
     authentication { 
         auth_type  PASS 
         auth_pass  2222 
     } 
     virtual_ipaddress { 
         192.168.0.199 
     } 
     track_script { 
     chk_nginx 
    } 
 }

2) Master2上keepalived.conf配置文件內容

! Configuration File for keepalived 
 global_defs { 
  notification_email { 
      952886823@163.com 
 } 
    notification_email_from 952886823@163.com 
    smtp_server 127.0.0.1 
    smtp_connect_timeout 30 
    router_id LVS_DEVEL 
 }
 vrrp_script chk_nginx {
    script "/data/sh/check_nginx.sh"
    interval 2 
    weight 2 
 } 
 # VIP1 
 vrrp_instance VI_1 { 
     state BACKUP 
     interface ens33 
     lvs_sync_daemon_inteface ens33 
     virtual_router_id 151 
     priority 90 
     advert_int 5 
     nopreempt 
     authentication { 
         auth_type  PASS 
         auth_pass  1111 
     } 
     virtual_ipaddress { 
         192.168.0.188
     } 
     track_script { 
     chk_nginx 
    } 
 }
# VIP2
 vrrp_instance VI_2 { 
     state MASTER 
     interface ens33
     lvs_sync_daemon_inteface ens33 
     virtual_router_id 152 
     priority  100
     advert_int 5 
     nopreempt 
     authentication { 
         auth_type  PASS 
         auth_pass  2222 
     } 
     virtual_ipaddress { 
         192.168.0.199 
     } 
     track_script { 
     chk_nginx 
    } 
 }

3)兩臺服務器分別配置腳本

4)查看vip地址

5)平常維護管理方面以下幾點

1、Keepalived主配置文件必須設置不一樣的VRRP名稱,同時優先級和VIP設置也各不相同;
2、Nginx網站總訪問量爲兩臺Nginx服務器之和,能夠寫腳本自動統計訪問量;
3、兩臺Nginx爲Master,存在兩個VIP地址,用戶從外網訪問VIP,需配置域名映射到兩個VIP上方可。
4、經過外網DNS映射不一樣VIP的方法也稱爲DNS負載均衡模式;
5、能夠經過Zabbix實時監控VIP訪問狀態是否正常。
相關文章
相關標籤/搜索