keepalived


keepalived(高可用軟件)

什么是高可用?

       拿lvs來舉例,我設置的是rr算法,當我用戶請求進來,經過調度器,調度器通過算法把請求分給后端RS,如果我后端有一台RS宕機了,那么我調度器是不知道的,還是會一直給它發送報文,而用戶時而能收到返回請求,時而收到請求超時,還有一種情況,就是我調度器故障,所謂的單點故障,lvs都是沒有辦法排除的,它只是一款負載均衡軟件。在節點出現故障時,並不影響用戶的使用,訪問,這種機制就叫高可用。英文名字叫high avalible。

高可用中需要了解的名詞:

什么是節點?

  運行高可用進程的一個獨立主機,稱為節點,節點分為主節點(master),備節點(backup),主節點和備節點之間的協議叫VRRP(虛擬路由冗余協議),通過轉移ip來實現高可用。

  在keepalived中,主節點是實時向它的備節點發送報文,告訴他我還活着,你休想篡位,我死了你才能上位,主節點會每隔多少多少秒告訴他的備節點我還活着,這個時間可以設置。這個告訴的時間要拿捏好,不能太短,也不能太長,備節點可以是多個,當主節點死掉了,備節點靠自身的優先級來上位,優先級越大,就先上位。

  keepalived利用checker(監控者)這個組件來檢查后端節點的好壞,當后端RS宕機,就會剔除壞的,master因為有leepalived的存在,他就會知道后端RS有宕機的,就不會給宕機的RS發送請求了,只會給正常的RS發送請求。

資源:IP地址

事件:就是集群中可能發生的事情,例如節點故障,網絡連通故障,網卡故障都會發生節點資源的轉移。

動作:針對事件的發生而產生的動作。

keepalived簡介

  keepalived 是linux下一個輕量級的高可用解決方案,它與HACMP(IBM研發)實現功能類似,都可以實現服務或者網絡的高可用,但是又有差別:hacmp是一個專業的、功能完善的高可用軟件,它提供了HA軟件所需的基本功能,比如心跳檢測和資源接管,檢測集群中的系統服務,在集群節點間轉移共享ip地址所有者等,hacmp功能強大,但是部署和使用相對麻煩,同時也是商業化軟件,與hacmp相比,keepalived主要是通過虛擬路由冗余來實現高可用功能,雖然他沒有hacmp功能強大,但是keepalived部署使用相對簡單,所有配置只需要一個配置文件即可完成.。

keepalived用途

  keepalived起初是為lvs設計的,專門用來監控集群系統中各個服務節點的狀態,它根據layer3,4 & 5交換機制檢測每個服務節點的狀態,如果某個服務節點出現異常,或工作出現故障,keepaived將檢測到,並將出現故障的服務節點從集群系統中剔除,而在故障節點恢復正常后,keepalived又可以自動將此服務節點重新加入到集群中,這些工作全部自動完成,不需要人工干預,需要人工完成的只是修復故障節點。

  keepalived后來又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗余協議)的縮寫,它出現的目的是為了解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷的、穩定的運行,因此,keepalived一方面具有服務器狀態監測和故障隔離功能,另一方面也具有HA Cluster功能,下面詳細介紹下VRRP協議的實現過程

vrrp工作原理

  在一個虛擬路由器中,只有處於master角色的路由器會一直發送vrrp數據包,處於backup角色的路由器只接受master發過來的報文信息,用來監控master運行狀態,因此,不會發生master搶占的現象,除非它的優先級更高,而當master不可用時,backup也就無法收到master發過來的報文信息,於是就認定master出現故障,接着多台backup就會進行選舉,優先級最高的backup將成為新的master,這種選舉並進行角色的過程非常快,因此也就保證了服務的持續可用性。

 

keepalived體系結構

  可以看出來,keepalived的體系結構從整體上分為兩層,分別是用戶空間層和內核空間層。下面介紹一個keepalived兩層結構的詳細組成及實現的功能。

內核空間層處於最底層,它包括ipvs和netlink兩個模塊。ipvs模塊是keepalived引入的一個第三方模塊,通過ipvs可以實現基於ip的負載均衡集群。ipvs默認包含在lvs集群軟件中。

  這里有一個誤區,由於keepalived可以和ipvs一起很好的工作,所以很多初學者都認為keepalived是一個負載均衡的軟件,這種理解是錯誤的

內核模塊:

IPVS:主要用於通過IPVS跟lvs進行整合,是lvs的核心模塊,跟lvs一塊使用的

NETLINK:主要實現一些網絡的功能

用戶模塊:主要用於高可用

checker:檢查服務狀態

vrrp stack:用於DS高可用

keepalived的安裝與配置

#先基於的情況是單點故障

#mask端的配置:

yum install keepalived

#主配置文件:

/etc/keepalived/keepalived.conf

#分為三段:

global全局、vrrp、virtual_server虛擬主機

#只留vrrp的,其余的都注釋掉,global的只注釋里面的內容。

#而后修改vrrp:

! Configuration File for keepalived

global_defs {

   notification_email {

   }  

}

vrrp_instance VI_1 {

    state MASTER

    interface ens33  #要監控的網絡端口

    virtual_router_id 51  #虛擬路由的ID,master跟backup要一樣,證明他倆是在同一個虛擬網絡>里面

    priority 100  #優先級

    advert_int 1  #一秒檢查一次

    authentication {   #認證

        auth_type PASS  #認證方式

        auth_pass 1111  #密碼

    }  

    virtual_ipaddress {

        192.168.24.250

    }  

}

#backup端的配置:

yum install keepalived –y

#打開keepalived配置文件

! Configuration File for keepalived

global_defs {

   notification_email {

   }  

}

vrrp_instance VI_1 {

    state BACKUP

    interface ens33  #要監控的網絡端口

    virtual_router_id 51  #虛擬路由的ID,master跟backup要一樣,證明他倆是在同一個虛擬網絡>里面

    priority 99  #優先級

    advert_int 1  #一秒檢查一次

    authentication {   #認證

        auth_type PASS  #認證方式

        auth_pass 1111  #密碼

    }  

    virtual_ipaddress {

        192.168.24.250

    }  

}

#分別啟動master端和backup端的keepalived

systemctl start keepalived

#如何發生飄移:只需停掉keepalived服務即可。

互為主備

  就是說master在提供服務時候,backup是充當了一個冷備,這是對系統資源的一種浪費。如何實現兩台機器即是master又是backup。就是互為主備。

比如我去訪問www.wuyuetian.com這個域名的時候,它是對應的多個IP,什么意思,我有兩台服務器,他倆的IP是不一樣的,但對外提供的服務是一樣的,都是提供www.wuyuetian.com這個web服務,那么給這兩台服務器做keepalived,讓他倆互為主備,如果我的一台服務器宕機,那么,宕機服務器的IP會漂移到正常的上面,正常,另一台就有了兩個IP。

! Configuration File for keepalived

 

global_defs {

   notification_email {

   }

}

 

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.24.250

    }  

}

vrrp_instance VI_2 {  #此處修改,不能跟v1重名

    state BACKUP  #此處修改

    interface ens33 

    virtual_router_id 52  #此處修改

    priority 99 #此處修改 

    advert_int 1  

    authentication {  

        auth_type PASS 

        auth_pass 2222  #此處修改 

    }  

    virtual_ipaddress {

        192.168.24.200 #服務IP修改

    }

}

 

 

! Configuration File for keepalived

 

   notification_email {

   }

} 

 

vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 51

    priority 99 

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111 

    }  

    virtual_ipaddress {

        192.168.24.250

    }  

}  

vrrp_instance VI_2 {  #此處修改,不能跟v1重名

    state MASTER  #此處修改

    interface ens33 

    virtual_router_id 52  #此處修改

    priority 100 #此處修改  

    advert_int 1   

    authentication {

        auth_type PASS

        auth_pass 2222  #此處修改

    }  

    virtual_ipaddress {

        192.168.24.200 #服務IP修改

    }  

}

不搶占模式

  在互為主備的情況下,對於業務來說,第一次宕機,發生了切換,那么主節點好了,IP又漂移了回來,又發生了一次切換,第一次是因為故障發生切換,是正常的,那么第二次,就是可控制的,這就是讓他不搶占。

! Configuration File for keepalived

global_defs {

} 

 

vrrp_instance VI_1 {

    state BACKUP #此處修改,純靠優先級決定

    interface ens33 

    virtual_router_id 51

    priority 100 

    advert_int 1 

    nopreempt  #非搶占模式

    authentication {   

        auth_type PASS 

        auth_pass 1111 

    }  

    virtual_ipaddress {

        192.168.24.250

    }  

}  

vrrp_instance VI_2 {  #此處修改,不能跟v1重名

    state BACKUP  #此處修改

    interface ens33 

    virtual_router_id 52  #此處修改

    priority 99 #此處修改 

    advert_int 1  

    authentication {

        auth_type PASS

        auth_pass 2222  #此處修改

    }  

    virtual_ipaddress {

        192.168.24.200 #服務IP修改

    }  

} 

real server宕機

       我們之前說過,keepalived是利用checker這個組建實現調度器監控后端RS,當后端RS宕機后,就不在給它發送報文,並把它剔除出去,現在我們來做一下這個實驗。

#首先配置后端RS,后端RS需配置lvs。

#!/bin/bash

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 ens33:0 192.168.24.250/32 broadcast 192.168.24.250 up

    if [ $? -eq 0 ];then

        route add -host 192.168.24.250 dev ens33:0

    fi 

        echo "ok"

;;

stop)

    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

    ifconfig ens33:0 down

    route del -host 192.168.24.250

        echo "lose"

;;

*)

        echo "go away"

;;

esac

#而后配置keepalived,把virtual_server段注釋解開,需配置在24.250虛IP的主節點上。

virtual_server 192.168.24.250 80 { #此處修改為后端RS的VIP和他的網站端口

    delay_loop 3  #健康檢查時間間隔

    lb_algo rr

    lb_kind DR

    protocol TCP

   

    real_server 192.168.24.10 80 {  #此出為后端RSIP和80端口

        weight 1   #權重

        HTTP_GET {  #協議

            url {

              path /

              status_code 200

            }  

            connect_timeout 3  #連接超時時間

            nb_get_retry 3   #重連次數

            delay_before_retry 3  #重連時間間隔

        }  

    }  

    real_server 192.168.24.11 80 {  #此出為后端RSIP和80端口

        weight 1   #權重

        HTTP_GET {  #協議

            url {

              path /

              status_code 200

            }  

            connect_timeout 3  #連接超時時間

            nb_get_retry 3   #重連次數

            delay_before_retry 3  #重連時間間隔

        }  

    }  

}  

#重新啟動keepalived,使用ipvsadm查看是否添加成功

#后端RS啟動httpd,使用windows抓取網頁

systemctl start httpd

curl 192.168.24.250

#而后停掉后端RS中的任意一台的httpd

systemctl stop httpd

#等待一下,再抓取網頁,只會抓取到一台的,而且使用ipvsadm查看,停掉的那台已經被剔除了。

ipvsadm –L –n

#當我重啟或恢復,那么就會自動把它添加回去


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM