国产91精品在线播放,欧美精品在线免费,日韩中文字幕在线有码视频网

上海校區切換校區
圖標

學習文章

當前位置:首頁 > >學習文章 > >

{紅帽 RHCE}keepalived工作原理和配置說明

發布時間: 2018-05-25 18:35:54

keepalived工作原理和配置說明


 keepalived

 配置


keepalived是什么

keepalived是集群管理中保證集群高可用的一個服務軟件,其功能類似于heartbeat,用來防止單點故障。

keepalived工作原理

keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。

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

keepalived主要有三個模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。

keepalived的配置文件

keepalived只有一個配置文件keepalived.conf,里面主要包括以下幾個配置區域,分別是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

global_defs區域

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

global_defs {

   notification_email {

       [email protected]

       [email protected]

       ...

   }

   notification_email_from [email protected]

   smtp_server smtp.abc.com

   smtp_connect_timeout 30

   enable_traps

   router_id host163

}


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

notification_email_from 通知郵件從哪個地址發出。

smpt_server 通知郵件的smtp地址。

smtp_connect_timeout 連接smtp服務器的超時時間。

enable_traps 開啟SNMP陷阱(Simple Network Management Protocol)。

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


static_ipaddress和static_routes區域

static_ipaddress和static_routes區域配置的是是本節點的IP和路由信息。如果你的機器上已經配置了IP和路由,那么這兩個區域可以不用配置。其實,一般情況下你的機器都會有IP地址和路由信息的,因此沒必要再在這兩個區域配置。

static_ipaddress {

   10.210.214.163/24 brd 10.210.214.255 dev eth0

   ...

}

static_routes {

   10.0.0.0/8 via 10.210.214.1 dev eth0

   ...

}

以上分別表示啟動/關閉keepalived時在本機執行的如下命令:

# /sbin/ip addr add 10.210.214.163/24 brd 10.210.214.255 dev eth0

# /sbin/ip route add 10.0.0.0/8 via 10.210.214.1 dev eth0

# /sbin/ip addr del 10.210.214.163/24 brd 10.210.214.255 dev eth0

# /sbin/ip route del 10.0.0.0/8 via 10.210.214.1 dev eth0

注意: 請忽略這兩個區域,因為我堅信你的機器肯定已經配置了IP和路由。

vrrp_script區域

用來做健康檢查的,當時檢查失敗時會將vrrp_instance的priority減少相應的值。

vrrp_script chk_http_port {

   script "</dev/tcp/127.0.0.1/80"

   interval 1

   weight -10

}

以上意思是如果script中的指令執行失敗,那么相應的vrrp_instance的優先級會減少10個點。

vrrp_instance和vrrp_sync_group區域

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

vrrp_rsync_group用來定義vrrp_intance組,使得這個組內成員動作一致。舉個例子來說明一下其功能:

兩個vrrp_instance同屬于一個vrrp_rsync_group,那么其中一個vrrp_instance發生故障切換時,另一個vrrp_instance也會跟著切換(即使這個instance沒有發生故障)。

vrrp_sync_group VG_1 {

   group {

       inside_network   # name of vrrp_instance (below)

       outside_network  # One for each moveable IP.

       ...

   }

   notify_master /path/to_master.sh

   notify_backup /path/to_backup.sh

   notify_fault "/path/fault.sh VG_1"

   notify /path/notify.sh

   smtp_alert

}

vrrp_instance VI_1 {

   state MASTER

   interface eth0

   use_vmac <VMAC_INTERFACE>

   dont_track_primary

   track_interface {

       eth0

       eth1

   }

   mcast_src_ip <IPADDR>

   lvs_sync_daemon_interface eth1

   garp_master_delay 10

   virtual_router_id 1

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 12345678

   }

   virtual_ipaddress {

       10.210.214.253/24 brd 10.210.214.255 dev eth0

       192.168.1.11/24 brd 192.168.1.255 dev eth1

   }

   virtual_routes {

       172.16.0.0/12 via 10.210.214.1

       192.168.1.0/24 via 192.168.1.1 dev eth1

       default via 202.102.152.1

   }

   track_script {

       chk_http_port

   }

   nopreempt

   preempt_delay 300

   debug

   notify_master <STRING>|<QUOTED-STRING>

   notify_backup <STRING>|<QUOTED-STRING>

   notify_fault <STRING>|<QUOTED-STRING>

   notify <STRING>|<QUOTED-STRING>

   smtp_alert

}


notify_master/backup/fault 分別表示切換為主/備/出錯時所執行的腳本。


notify

表示任何一狀態切換時都會調用該腳本,并且該腳本在以上三個腳本執行完成之后進行調用,keepalived會自動傳遞三個參數($1 =

"GROUP"|"INSTANCE",$2 = name of group or instance,$3 = target state of

transition(MASTER/BACKUP/FAULT))。

smtp_alert 表示是否開啟郵件通知(用全局區域的郵件設置來發通知)。

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

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

use_vmac 是否使用VRRP的虛擬MAC地址。

dont_track_primary 忽略VRRP網卡錯誤。(默認未設置)

track_interface 監控以下網卡,如果任何一個不通就會切換到FALT狀態。(可選項)

mcast_src_ip 修改vrrp組播包的源地址,默認源地址為master的IP。(由于是組播,因此即使修改了源地址,該master還是能收到回應的)

lvs_sync_daemon_interface 綁定lvs syncd的網卡。

garp_master_delay 當切為主狀態后多久更新ARP緩存,默認5秒。

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


注意: 同一網段中virtual_router_id的值不能重復,否則會出錯,相關錯誤信息如下。  

Keepalived_vrrp[27120]: ip address associated with VRID not present in received packet :

one or more VIP associated with VRID mismatch actual MASTER advert

bogus VRRP packet received on eth1 !!!

receive an invalid ip number count associated with VRID!

VRRP_Instance(xxx) ignoring received advertisment...

可以用這條命令來查看該網絡中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8

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

advert_int 發VRRP包的時間間隔,即多久進行一次master選舉(可以認為是健康查檢時間間隔)。

authentication 認證區域,認證類型有PASS和HA(IPSEC),推薦使用PASS(密碼只識別前8位)。

virtual_ipaddress vip,不解釋了。

virtual_routes 虛擬路由,當IP漂過來之后需要添加的路由信息。

virtual_ipaddress_excluded 發送的VRRP包里不包含的IP地址,為減少回應VRRP包的個數。在網卡上綁定的IP地址比較多的時候用。

nopreempt 允許一個priority比較低的節點作為master,即使有priority更高的節點啟動。


首先nopreemt必須在state為BACKUP的節點上才生效(因為是BACKUP節點決定是否來成為MASTER的),其次要實現類似于關閉auto

failback的功能需要將所有節點的state都設置為BACKUP,或者將master節點的priority設置的比BACKUP低。我個人推薦使用將所有節點的state都設置成BACKUP并且都加上nopreempt選項,這樣就完成了關于autofailback功能,當想手動將某節點切換為MASTER時只需去掉該節點的nopreempt選項并且將priority改的比其他節點大,然后重新加載配置文件即可(等MASTER切過來之后再將配置文件改回去再reload一下)。

當使用track_script時可以不用加nopreempt,只需要加上preempt_delay 5,這里的間隔時間要大于vrrp_script中定義的時長。

preempt_delay master啟動多久之后進行接管資源(VIP/Route信息等),并提是沒有nopreempt選項。

virtual_server_group和virtual_server區域

virtual_server_group一般在超大型的LVS中用到,一般LVS用不過這東西,因此不多說。

virtual_server IP Port {

   delay_loop <INT>

   lb_algo rr|wrr|lc|wlc|lblc|sh|dh

   lb_kind NAT|DR|TUN

   persistence_timeout <INT>

   persistence_granularity <NETMASK>

   protocol TCP

   ha_suspend

   virtualhost <STRING>

   alpha

   omega

   quorum <INT>

   hysteresis <INT>

   quorum_up <STRING>|<QUOTED-STRING>

   quorum_down <STRING>|<QUOTED-STRING>

   sorry_server <IPADDR> <PORT>

   real_server <IPADDR> <PORT> {

       weight <INT>

       inhibit_on_failure

       notify_up <STRING>|<QUOTED-STRING>

       notify_down <STRING>|<QUOTED-STRING>

       # HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK

       HTTP_GET|SSL_GET {

           url {

               path <STRING>

               # Digest computed with genhash

               digest <STRING>

               status_code <INT>

           }

           connect_port <PORT>

           connect_timeout <INT>

           nb_get_retry <INT>

           delay_before_retry <INT>

       }

   }

}


delay_loop 延遲輪詢時間(單位秒)。

lb_algo 后端調試算法(load balancing algorithm)。

lb_kind LVS調度類型NAT/DR/TUN。

virtualhost 用來給HTTP_GET和SSL_GET配置請求header的。

sorry_server 當所有real server宕掉時,sorry server頂替。

real_server 真正提供服務的服務器。

weight 權重。

notify_up/down 當real server宕掉或啟動時執行的腳本。

健康檢查的方式,N多種方式。

path 請求real serserver上的路徑。

digest/status_code 分別表示用genhash算出的結果和http狀態碼。

connect_port 健康檢查,如果端口通則認為服務器正常。

connect_timeout,nb_get_retry,delay_before_retry分別表示超時時長、重試次數,下次重試的時間延遲。


其他選項暫時不作說明。

keepalived主從切換

主從切換比較讓人蛋疼,需要將backup配置文件的priority選項的值調整的比master高50個點,然后reload配置文件就可以切換了。當時你也可以將master的keepalived停止,這樣也可以進行主從切換。

keepalived僅做HA時的配置

請看該文檔同級目錄下的配置文件示例。

說明:

10.210.214.113 為keepalived的備機,其配置文件為113.keepalived.conf

10.210.214.163 為keepalived的主機,其配置文件為163.keepalived.conf

10.210.214.253 為Virtual IP,即提供服務的內網IP地址,在網卡eth0上面

192.168.1.11 為模擬的提供服務的公網IP地址,在網卡eth1上面

用tcpdump命令來捕獲的結果如下:

17:20:07.919419 IP 10.210.214.163 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 200, authtype simple, intvl 1s, length 20

LVS+Keepalived配置

注Keepalived與LVS結合使用時一般還會用到一個工具ipvsadm,用來查看相關VS相關狀態,關于ipvsadm的用法可以參考man手冊。

10.67.15.95為keepalived master,VIP為10.67.15.94,配置文件為95-lvs-keepalived.conf

10.67.15.96為keepalived master,VIP為10.67.15.94,配置文件為96-lvs-keepalived.conf

10.67.15.195為real server  

注意:

當使用LVS+DR+Keepalived配置時,需要在real server上添加一條iptables規則(其中dport根據情況添加或缺省):

# iptables -t nat -A PREROUTING -p tcp -d 10.67.15.94 --dport 80 -j REDIRECT

當使用LVS+NAT+Keepalived配置時,需要將real server的默認路由配置成Director的VIP10.67.15.94,必須確保client的請求是通過10.67.15.94到達real server的。

安裝keepalived

從keepalived官網下載合適的版本,解壓并執行如下命令完成安裝。

# cd keepalived-xxx

# ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share

# make && make install

你也可以打成RPM包,然后安裝。

說明

我們用到的HA場景如下:

兩臺主機host113和host163,內網IP在eth1網卡上,分別是10.210.214.113和10.210.214.163,VIP為公網IP在eth0上,IP地址是202.102.152.253,網關為202.102.152.1。當VIP在host113上提供服務時,host113上的默認路由為202.102.152.1,提供服務的端口為202.102.152.253:443。host113發生故障需要將VIP及服務切回到host163上的時候,需要以下幾步,第一將VIP接管過來,第二添加默認路由202.102.152.1,第三啟動在端口202.102.152.253:443上的服務。

如此一來,keepalived需要另外的腳本來完成添加默認路由和啟動服務工作,這點和heartbeat中的resources是相同的。目前我進行了測試,發現keepalived速度要比heartbeat快,也就是說效率比heartbeat高。并且,最重要的一點,keepalived支持多個backup。

不要問我為何有以上需求。要為兩個不同的域名提供https服務,由于SSL證書問題,必須有兩個公網IP地址分別綁定443端口。

當然,通過SNI也可以實現一個公網IP綁定443端口來為多個域名提供https服務,但是這需要瀏覽器支持(M$的IE瀏覽器不支持)。(nginx/apache)


keepalived的文檔也很舊了,一直都找不到合適的文檔,之前我就一直忽略了vrrp_script這個區域,導致很多事情想不通。

另外,我發現我越來越喜歡keepalived了。。。

上一篇: {思科 CCNA-RS}?NAT理論,三種NAT的類型簡述

下一篇: {思科 CCNA-RS}EIGRP的簡介

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<menuitem id="vlare"></menuitem>

    <ul id="vlare"><rp id="vlare"><optgroup id="vlare"></optgroup></rp></ul>

  • 主站蜘蛛池模板: 韩城市| 德惠市| 岢岚县| 辽阳县| 镇江市| 荆州市| 彭山县| 南丹县| 崇文区| 孙吴县| 当涂县| 平阴县| 洛宁县| 清河县| 万荣县| 德州市| 吴川市| 如东县| 资阳市| 墨玉县| 天气| 怀宁县| 石阡县| 克山县| 威信县| 洪洞县| 比如县| 万全县| 冀州市| 仁布县| 高尔夫| 衡水市| 云安县| 炉霍县| 呼和浩特市| 望谟县| 青冈县| 延庆县| 大连市| 乌拉特前旗| 横山县|