實戰keepalived高可用集群解決方案

Keepalived定義

     Keepalived 是一個基于VRRP協議來實現的LVS服務高可用方案,可以利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺為主服務器(MASTER),一臺為備份服務器(BACKUP),但是對外表現為一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。Keepalived是VRRP的完美實現。

VRRP 協議簡介
    VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。
    虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。于安全性考慮,VRRP包使用了加密協議進行加密。

keepalived的配置文件
keepalived只有一個配置文件keepalived.conf,里面主要包括以下幾個配置區域:

  • global_defs主要是配置故障發生時的通知對象以及機器標識
  • static_ipaddress和static_routes區域配置的是是本節點的IP和路由信息
  • vrrp_script用來做健康檢查的,當時檢查失敗時會將vrrp_instance的priority減少相應的值
  • vrrp_instance用來定義對外提供服務的VIP區域及其相關屬性
  • vrrp_rsync_group用來定義vrrp_intance組,使得這個組內成員動作一致

環境準備
Centos7系統,后端服務器提供web服務。
地址規劃:

  • VS1: 172.18.51.7
  • VS2:172.17.51.77
  • RS1:172.18.51.74
  • RS2:172.18.51.75
  • VirtualIP:172.18.51.81

拓撲圖:

實戰keepalived高可用集群解決方案


     實驗目標:   通過keepalived+lvs部署DR類型集群,實現高可用、負載均衡;主、備兩臺調度器均處于在線狀態,當任意一臺調度器宕機或出現故障時,VIP會“漂移”到另外一臺服務器上,繼續提供服務。

安裝chrony程序包,部署時間服務器,同步各服務器時間

實戰keepalived高可用集群解決方案

RS:提供httpd服務,定義web主頁,啟動服務


實戰keepalived高可用集群解決方案

實戰keepalived高可用集群解決方案

VS:當所有real server宕掉時,sorry
server
頂替,定義其主頁,啟動服務

實戰keepalived高可用集群解決方案

實戰keepalived高可用集群解決方案


RS的預配置腳本:   

vim setparam.sh
#!/bin/bash
        #
        vip=172.18.51.100
        mask='255.255.255.255'

        case $1 in
        start)
          echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
          echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
          echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
          echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

          ifconfig lo:0 $vip netmask $mask broadcast $vip up
          route add -host $vip dev lo:0
          ;;
        
         stop)
          ifconfig lo:0 down
          echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
          echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
          echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
          echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
          ;;
       
         *) 
          echo "Usage $(basename $0) start|stop"
          exit 1
      ;;
esac

啟動 bash -x  setparam.sh start

VS配置:

        vs1和vs2的配置文件,主備模式、優先級不一樣,其它地方一致;

VS1

[root@centos7 keepalived]#cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {                          #故障發生時給誰發郵件通知
   root@localhost
}
   notification_email_from keepalived@localhost         #通知郵件從哪個地址發出
   smtp_server 127.0.0.1                              #通知郵件的smtp地址
   smtp_connect_timeout 30                        #連接smtp服務器的超時時間
   vrrp_mcast_group4 224.0.101.24                 # 通過組播地址通告狀態和優先級信息
}

vrrp_instance sr1 {
    state MASTER                           #MASTER或BACKUP
    interface ens33                      #節點固有IP(非VIP)的網卡,用來發VRRP包
    virtual_router_id 51                 #取值在0-255之間,用來區分多個instance的VRRP組播
    priority 100                        #設置優先級,選舉master,取值范圍1-255
    advert_int 1                        #健康查檢時間間隔
    authentication {                   #認證區域,認證類型有PASS和HA(IPSEC),密碼8位字符
        auth_type PASS
        auth_pass rE+szbuO
    }
        track_interface {    
        ens33                        #配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態;
 }
   # nopreempt                      #非搶占模式
    virtual_ipaddress {    
        172.18.51.81/16 dev ens33 label ens33:0       #配置虛擬IP地址(vip)
    }
}


virtual_server 172.18.51.81 80 {                        
     delay_loop 6                                       #定義延遲輪詢時間(單位秒)     
     lb_algo wrr                                        #設定VS的調用算法
     lb_kind DR                                        #設定lvs調度類型
     protocol TCP                                      #工作的協議
     sorry_server 127.0.0.1 80                         #當所有real server宕掉時,sorry server頂替
     real_server 172.18.51.74 80 {                     #真正提供服務的服務器RS1
             weight 1                                  #權重
             HTTP_GET {                                ##設置健康狀態檢測方法
                     url {                            
                         path /                         #定義要監控的URL;
                         status_code 200                  #判斷上述檢測機制為健康狀態的響應碼;
                     }
             connect_timeout 1                          #連接請求的超時時長
             nb_get_retry 3                            #重試次數
             delay_before_retry 1                       #下次重試的延遲時間
             }
     }
     real_server 172.18.51.75 80 {                    #真正提供服務的服務器RS2
             weight 1
             HTTP_GET {
                     url {
                             path /  
                             status_code 200
                     }
             connect_timeout 1
             nb_get_retry 3
             delay_before_retry 1    

             }
     }
}

VS2

[root@centos703 ~]# cd /etc/keepalived/
[root@centos703 keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   root@localhost
}
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   vrrp_mcast_group4 224.0.101.24
}

vrrp_instance sr1 {
     state BACKUP
     interface ens33
     virtual_router_id 51
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass rE+szbuO
    }
        track_interface {
        ens33
}
    nopreempt
    virtual_ipaddress {
       172.18.51.81/16 dev ens33 ens33 label ens33:0
    }
}


virtual_server 172.18.51.81 80 {                        
     delay_loop 6                                       
     lb_algo wrr                                             
     lb_kind DR                                           
     protocol TCP                                       
    sorry_server 127.0.0.1 80                          
    real_server 172.18.51.74 80 {                               
          weight 1                                          
          HTTP_GET {                                               
               url {                                                       
                   path /
                   status_code 200
                     }
            connect_timeout 1                      
            nb_get_retry 3                                      
            delay_before_retry 1                              
            }
     }

     real_server 172.18.51.75 80 {
             weight 1
             HTTP_GET {
                     url {
                             path /  
                             status_code 200
                     }
             connect_timeout 1
             nb_get_retry 3
             delay_before_retry 1    

             }
     }
}

啟動服務:systemctl start keepalived.service,自動生成ipvs規則

實戰keepalived高可用集群解決方案

通過客戶端測試:

real
server正常時訪問:輪詢

實戰keepalived高可用集群解決方案

關閉RS1上httpd 服務:  訪問RS2頁面

實戰keepalived高可用集群解決方案

關閉RS2httpd 服務后,訪問頁面跳到sorry
server頁面:

實戰keepalived高可用集群解決方案

原創文章,作者:Mr-Xiao,如若轉載,請注明出處:http://www.www58058.com/75935

(0)
Mr-XiaoMr-Xiao
上一篇 2017-05-16
下一篇 2017-05-16

相關推薦

  • GNU awk

    文本處理三工具:grep, sed, awk grep, egrep, fgrep:文本過濾工具;pattern sed: 行編輯器 模式空間、保持空間 awk:報告生成器,格式化文本輸出;  AWK: Aho, Weinberger, Kernighan –> New AWK, NAWK  GNU awk, gawk&…

    Linux干貨 2015-12-03
  • ACL權限管理練習

    ACL簡介;
    權限管理練習

    2017-09-11
  • 堡壘機-麒麟開源堡壘機SSH公私鑰認證配置文檔

    1、進入SSH公私鑰管理界面 操作步驟:進入系統,點擊左側導航資產管理,后邊TAB標簽導航SSH公私鑰,如下圖     2、批量導入SSH公私鑰: SSH公私鑰管理界面,點擊下方”導入“,進入導入頁面上傳公私鑰,     上傳說明: 1) 講所有的公私鑰放到一個名為pvt的空文件夾中。 2) 在同樣…

    Linux干貨 2016-05-29
  • 文本處理之sed

     sed:是一種行編輯器,它在處理行時會把要處理的行讀入模式空間中,處理的是模式空間的內容,一行一行的處理,然后把處理結果顯示在屏幕中,不對原文做修改,除非強制重定向。   好處:可同時編輯一個或多個文件,簡化了對文件的反復操作。 sed用法:   格式: sed [options ]…'script&#0…

    Linux干貨 2016-08-15
  • Linux文件系統權限詳解

    一、綜述 在用戶和組的管理中介紹了Linux系統是用戶多任務的分時操作系統,這意味著同時可以有多人在同一臺pc上進行不同的操作。為了能夠保護每個用戶的數據安全,針對不同的用戶設置相應的權限是非常重要的。 Linux文件系統權限主要針對三類用戶: 文件的所有者: owner,用u標識 文件的所有組:group,用g標識 其他人: other,用o標識。不包含在…

    Linux干貨 2016-08-04
  • Linux用戶和組相關知道小結

    用戶和組主要配置文件相關的參數,以及這些文件管理常用的命令。有很多的不足的地方。望大家指導。

    Linux干貨 2017-11-18
欧美性久久久久