keepalived原理及經常使用的配置參數


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


------本文大綱後端

簡介bash

keepalived原理服務器

keepalived配置文件註解網絡

---------------------------------ide

1、簡介模塊化

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

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

ckeckersspa

檢查服務檢查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狀態.

2、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 狀態

3、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 {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    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

相關文章
相關標籤/搜索