實戰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 09:28
下一篇 2017-05-16 19:42

相關推薦

  • php-fpm

    1.安裝 mariadb 服務 修改配置文件 2.musql 安全加強 3.安裝 php-fpm php-mysql php-mbstring php-mcrypt 服務 修改配置文件 4.安裝httpd服務 加虛擬主機配置文件 5.測試php網頁 6.安裝myadmin包及測試

    2017-06-04
  • N22-第一周(作業)

    馬哥教育網絡班22期-第一周課程練習:   一.描述計算機的組成及其功能       計算機組成:CPU :包含控制器,運算器,寄存器,緩存。通過時序復用的方式來處理加工來自輸入設備的指令或數據,協調各組件之間的工作       存儲器(內存):編址存儲單元陣列,用于暫時存放CP…

    Linux干貨 2016-08-13
  • N25第四周博客作業

    第四周博客作業 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 2、編輯/etc/group文件,添加組hadoop。      3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的i…

    Linux干貨 2016-12-19
  • 計劃任務管理

        Linux系統計劃任務有兩種:A、一次性任務;B、定時循環任務。     一次性任務:at命令。at的安裝包名字就是at,可以使用命令"yum install at"進行安裝.安裝完成后,啟用atd服務就可以運行at命令了.運行格式為:at [opti…

    Linux干貨 2016-11-27
  • Linux基礎之RAID

    一.RAID介紹 RAID剛開始出現的時候叫做廉價磁盤冗余陣列(Redundant Array of Inexpensive Disks),但在當時磁盤并非像現在這么便宜,反而這種組合方式使得代價非常昂貴,所以后來改名為獨立磁盤冗余陣列(Redundant Array of Independent Disks),基本的思想就是組合組合多個便宜的,性能相對較低…

    Linux干貨 2016-11-08
  • 硬鏈接和軟鏈接的區別

                        硬鏈接和軟鏈接的區別     硬鏈接: 1.創建命令:ln或link 2.同一文…

    Linux干貨 2016-12-05
欧美性久久久久