1. 程式人生 > 實用技巧 >Keepalived高可用軟體概述

Keepalived高可用軟體概述

Keepalived高可用軟體概述: 1)網際網路主要的高可用軟體:Keepalived、Hearttbeat、其中Keepalived是輕量級的,Keepalived是一款開源、免費的實現網站、資料庫、業務系統之間的高可用軟體,是目前企業中使用最廣泛的軟體。 2)Keepalived實現高可用,主要考兩個功能實現:
  • 健康檢查:
Keepalived可以去檢查後端nginx、MySQL、NFS、redis、伺服器的執行狀態,具體可以類似交換機制 3層(網路層ping)、4層(傳輸層:telnet port)、7層(應用層:URL、HTTP、FTP)檢查。
  • VRRP技術:
Keepalived可以使用VRRP(虛擬路由器冗餘技術),可以將兩臺物理機封裝稱為路由器叢集,根據優先順序選舉產生master和backup,成為master的路由器(主機)會產生VIP地址,並且由VIP地址(路由器)負責使用者的請求或者路由轉發。 成為master的路由器(主機)之後,會定時向叢集內部組傳送組播資訊(包),backup接收到組播資訊之後,會認為master還是存活的,此時不會參與競選或者搶佔為master,沒有收到組播包之後會參與叢集內部競選,競選通常是以優先順序來決定,優先順序高則為master,低則為backup。 3) 4)配置Keepalived,兩臺伺服器keepalived.conf常用內容如下:
! Configuration File for
keepalived global_defs { notification_email { [email protected] } notification_email_from wgkgood@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 eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 151 priority 100 advert_int 5 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress {
192.168.0.198 } track_script { chk_nginx } }
5)配置檔案引數詳解: 完整的keepalived的配置檔案,其配置檔案keepalived.conf可以包含三個文字塊:全域性定義塊、VRRP例項定義塊機虛擬伺服器定義塊。全域性定義塊和虛擬伺服器定義塊是必須的,如果在只有一個負載均衡器的場合,就不需要VRRP例項定義塊。 #全域性定義塊:
! Configuration File for keepalived               # !改行表示註釋;
global_defs { 
  notification_email {                            # 指定keepalived在發生切換時需要傳送email到的物件,一行一個;
      [email protected]
} 
    notification_email_from wgkgood@163.com       # 指定發件人;   
    smtp_server 127.0.0.1                         # 指定smtp伺服器地址; 
    smtp_connect_timeout 30                       # 指定smtp連線超時時間;
    router_id LVS_DEVEL                           # 執行keepalived機器的標識; 
} 

#監控nginx程序:

vrrp script chk_nginx {
    script "/data/script/nginx.sh"               # 監控服務指令碼路徑,指令碼需要有x執行許可權;
    interval 2                                   # 檢測時間隔(執行指令碼間隔); 
    weight 2                                      
}

#VRRP例項定義塊:

vrrp sync group VG_1{                           # 監控多個網段的例項;
        group{
    VI_1                                        # 例項名; 
    VI_2    
    }
notify master /data/sh/nginx.sh                 # 指定當時切換到master時,執行指令碼;
notify backup /data/sh/nginx.sh                 # 指定當時切換到backup時,執行指令碼;
notify /data/sh/nginx.sh                        # 發生任何切換,均執行的指令碼;
smtp alert;                                     # 使用global defs中提供的郵件地址和smtp伺服器傳送郵件通知;
}

vrrp instance VI_1{                          
    state BACKUP                               # 設定主機狀態;
    MASTER/BACKUP
    nopreempt                                  # 設定為不搶佔;
    interface ens33                            # 對外提供服務的網路介面;
    lvs sync daemon interface ens33            # 負載均衡器之間監控介面;  
    track interface {                          # 設定額外的監控,網絡卡出現問題都會切換;
        ens33
        eth0
    }
    macast src ip                              # 傳送多播包的地址,如果不設定預設使用繫結網絡卡的primary ip;
    garp master delay                          # 在切換到master狀態後,延遲進行gratuitous ARP請求; 
    virtual router id 50                       # VRID標記,路由ID可通過#tcpdump vrrp檢視;
    priority 90                                # 優先順序,高優先順序競選為master;
    advert int 5                               # 檢查間隔,預設5秒;
    preempt delay                              # 搶佔延時,預設5秒;
    debug                                      # debug日誌級別;
    authentication {                           # 設定認證;
        auth type PASS                         # 認證方式;
        auth pass 1111                         # 認證密碼;
    }
    track script{                              # 以指令碼為監控;
    chk nginx;
        chk_nginx
    }
    virtual ipaddress {                        #設定vip
        192.168.1.188
    }
}

注意: 使用了指令碼監控nginx或者MySQL,不需要如下虛擬伺服器設定塊。
#全域性定義塊:

virtual server 192.168.1.188 3306 {
    delay loop 6                                  # 健康檢查時間間隔; 
    lb_algo rr                                    # 排程演算法rr|wrr|lc|wlc|lblc|sh|dh;
    lb kind DR                                    # 負載均衡轉發規則 ;
 NAT|DR|TUN
    persistence timeout 5                         # 會話保持時間;
    porsistence TCP                               # 使用的協議;
    real server 192.168.1.199 3306 {
        weight 1                                  # 預設為1,0為失效;
        notify up  <string> | <quoted-string>    # 在檢測到server up後執行指令碼;
        notify down <string> | <quoted-string>   # 在檢測到server down後執行指令碼;
        TCP_CHECK {
connect_timeout 3                        # 連線超時時間;
        nb_get_retry 1                    # 重連次數;
 delay_before_retry 1             # 重連間隔時間;
 connect_port 3306                # 健康檢查的埠;
  }
 HTTP_GET {
 url {
 path /index.html                      # 檢測url,可寫多個
 digest 24326582a86bee478bac72d5af25089e  # 檢測效驗碼;
 genhash -s IP -p 80 -u http://IP/index.html  # digest效驗碼獲取方法:
 status_code 200                      # 檢測返回http狀態碼
    }
}
}

檢視日誌:

tail -fn 30 /var/log/messages