keepalived原理及常用的配置參數


轉自:http://essun.blog.51cto.com/721033/1405642


------本文大綱

簡介

keepalived原理

keepalived配置文件註解

---------------------------------

一、簡介

Keepalived:它的誕生最初是爲ipvs(一些服務,內核中的一些規則)提供高可用性的,最初最主要目的是能夠自主調用ipvsadm來生成規則,並且能夠自動實現將用戶訪問的地址轉移到其他節點上進行實現的。

Keepalived:核心包含兩個ckeckers和VRRP協議。

ckeckers

檢查服務檢查reserved的健康狀況的,基於腳本也可檢查服務本身的健康狀況。這裏是實現ipvs後端健康狀況的檢測的。

VRRP

是一種容錯協議,它保證當主機的下一跳路由器出現故障時,由另一臺路由器來代替出現故障的路由器進行工作,從而保持網絡通信的連續性和可靠性。VRRP中每個節點之間都有優先級的一般爲0-255(0,255有特殊用法)數字越大優先級越高。

  • 相關術語解析

虛擬路由器

由一個Master路由器和多個Backup路由器組成。主機將虛擬路由器當作默認網關;

VRID

虛擬路由器的標識。有相同VRID的一組路由器構成一個虛擬路由器;

Master路由器

虛擬路由器中承擔報文轉發任務的路由器;

Backup路由器

Master路由器出現故障時,能夠代替Master路由器工作的路由器;

虛擬IP 地址

虛擬路由器的IP 地址。一個虛擬路由器可以擁有一個或多個IP地址;

IP地址擁有者

接口IP地址與虛擬IP地址相同的路由器被稱爲IP地址擁有者;

虛擬MAC地址

一個虛擬路由器擁有一個虛擬MAC地址。通常情況下,虛擬路由器迴應ARP請求使用的是虛擬MAC地址,只有虛擬路由器做特殊配置的時候,纔回應接口的真實MAC地址;

優先級

VRRP根據優先級來確定虛擬路由器中每臺路由器的地位;

非搶佔方式

如果Backup路由器工作在非搶佔方式下,則只要Master路由器沒有出現故障Backup路由器即使隨後被配置了更高的優先級也不會成爲Master路由器;

搶佔方式

如果Backup路由器工作在搶佔方式下,當它收到VRRP報文後,會將自己的優先級與通告報文中的優先級進行比較。如果自己的優先級比當前的Master路由器的優先級高,就會主動搶佔成爲Master路由器;否則,將保持Backup狀態.

二、Keepalived原理

  • 組成模塊

keepalived也是模塊化設計,不同模塊複雜不同的功能,下面是keepalived的組件
core check vrrp libipfwc libipvs-2.4 libipvs-2.6

core

是keepalived的核心,複雜主進程的啓動和維護,全局配置文件的加載解析等

check

負責healthchecker(健康檢查),包括了各種健康檢查方式,以及對應的配置的解析包括LVS的配置解析

vrrp

VRRPD子進程,VRRPD子進程就是來實現VRRP協議的

libipfwc

iptables(ipchains)庫,配置LVS會用到

libipvs*

配置LVS會用到

  • 進程

keepalived啓動後會有三個進程
父進程:內存管理,子進程管理等等
子進程:VRRP子進程

子進程:checkers子進程

wKioL1NkAtXT2YBkAAHdTUCBUMc227.jpg

兩 個子進程都被系統WatchDog看管,兩個子進程各自複雜自己的事,checkers子進程複雜檢查各自服務器的健康程度,例如HTTP,LVS等等, 如果checkers子進程檢查到MASTER上服務不可用,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,並且去掉虛擬IP,轉換爲BACKUP 狀態

三、keepkeepalived配置文件介紹

  • 安裝

1
[root@essun yum.repos.d]# yum install -y keepalived

只有一個配置文件/etc/keepalived/keepalived.conf,裏面主要包括以下幾個比較常用的配置區域,分別是global_defs、vrrp_script、vrrp_instance和virtual_server。

  • global_defs區域主要是配置故障發生時的通知對象以及機器標識

1
2
3
4
5
6
7
8
9
10
11
global_defs {
   notification_email {
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

notification_email

故障發生時給誰發郵件通知

notification_email_from

通知郵件從哪個地址發出

smpt_server

通知郵件的smtp地址

smtp_connect_timeout

連接smtp服務器的超時時間

router_id

標識本節點的字條串,通常爲hostname,但不一定非得是hostname。故障發生時,郵件通知會用到

  • vrrp_instance區域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
vrrp_script  switch {
   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   interval 1
   weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {
      switch
}
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault "/path/fault.sh VG_1"
}

vrrp_script

定義vrrp_script 區域名稱

script

所要執行的腳本

interval

腳本執行間隔時間

weight

腳本結果導致的優先級變更:2表示優先級+2;-2則表示優先級-2

vrrp_instance

用來定義對外提供服務的VIP區域及其相關屬性

state

可以是MASTER或BACKUP,不過當其他節點keepalived啓動時會將priority比較大的節點選舉爲MASTER,因此該項其實沒有實質用途

interface

節點固有IP(非VIP)的網卡,用來發VRRP包

virtual_router_id

取值在0-255之間,用來區分多個instance的VRRP組播。

注意: 同一網段中virtual_router_id的值不能重複,否則會出錯。

priority

用來選舉master的,要成爲master,那麼這個選項的值最好高於其他機器50個點,該項取值範圍是1-255(在此範圍之外會被識別成默認值100)

advert_int

檢查間隔,默認爲1秒

authentication

這裏設置認證

auth type

認證方式,可以是PASS或AH兩種認證方式

auth pass認證密碼

track_script

對vrrp_script定義的腳本進行追蹤

switch

對那一個區域進行追蹤

notify_master /path/to/to_master.sh

切換到主狀態要發的通知

notify_backup /path_to/to_backup.sh

切換到備狀態要執行的通知

notify_fault "/path/fault.sh VG_1"

故障時要執行的通知(如果路徑中有空格,需要加雙引號引用)

注:

以上三個參數指的腳本要自定義

  • virtual_server區域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.200.100 443

對外通過ip地址192.168.200.100 提供443端口的服務

delay_loop

延遲輪詢時間(s)

lb_algo

後端指定的調度算法

lb_kind

調度模式

nat_mask

網絡地址

persistence_timeout

會話保持時間(秒爲單位),用戶在50秒內被分配到同一個後端realserver

protocol TCP

健康檢查用的是TCP還是UDP

real_server <IPADDR> <PORT>                  

後端真實節點主機的權重等設置,主要,後端有幾臺這裏就要設置幾個

weight

每一臺realserver的權重

SSL_GET

健康檢查方式

url

要堅持的URL,可以有多個

path

具體的路徑

digest

表示用genhash算出的結果

connect_timeout

超時時長

nb_get_retry

重試次數

delay_before_retry

下次重試的時間延遲

在realserver也可自定義服務器狀態發生變化後所執行的腳本

notify_up <STRING> | <QUOTED-STRING>  

檢查服務器正常(UP)後,要執行的腳本
notify_down <STRING> | <QUOTED-STRING>

檢查服務器失敗(down)後,要執行的腳本

以上則常用到的參數,更多參數及用法請man keepalived.conf


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章