自己總結的keepalived的配置流程以及注意事項


 

編寫背景:上班時領導要求我們團隊實現postgresql主備切換的高可用問題,我輔助keepalived的部分,從查資料到實施最后使用,最后編寫了這個博客,水平有限,歡迎大家指正

###postgresql常用命令參考我的這篇博客http://www.cnblogs.com/liyasen/p/6611020.html

 

 

Keepalived安裝配置

一、簡介

Keepalived是一個免費開源的,用C編寫的類似於layer3, 4 & 7交換機制軟件,具備我們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協議實現多台機器之間的故障轉移服務。

 

 

上圖是Keepalived的功能體系結構,大致分兩層:用戶空間(user space)和內核空間(kernel space)。 
內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其他相關的網絡功能)兩個部份。 
用戶空間

  • WatchDog:負載監控checkers和VRRP進程的狀況
  • VRRP Stack:負載負載均衡器之間的失敗切換FailOver,如果只用一個負載均稀器,則VRRP不是必須的。
  • Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能。換言之,可以沒有VRRP Stack,但健康檢查healthchecking是一定要有的。
  • IPVS wrapper:用戶發送設定的規則到內核ipvs代碼
  • Netlink Reflector:用來設定vrrp的vip地址等。

Keepalived的所有功能是配置keepalived.conf文件來實現的。

 

二、安裝與配置

2.1 下載及安裝

以當前最新版本1.3.4為例

將從官網下載的keepalived-1.3.4.tar.gz包,上傳到/tmp目錄下。

 

 

tar -zxvfkeepalived-1.3.4.tar.gz

 

cd keepalived-1.3.4

 

./configure --prefix=安裝路徑

 

make && make install

 

 

 

2.2 配置

安裝完成后,進入安裝目錄的etc目錄下,將keepalived相應的配置文件拷貝到系統相應的目錄當中。keepalived啟動時會從/etc/keepalived目錄下查找keepalived.conf配置文件,如果沒有找到則使用默認的配置。/etc/keepalived目錄安裝時默認是沒有安裝的,需要手動創建。配置文件目錄結構如下所示:

 

-- keepalived

|   |-- keepalived.conf

|   `-- samples

|       |-- keepalived.conf.status_code

|       |-- keepalived.conf.track_interface

|       |-- keepalived.conf.vrrp

|       |-- 。。。

|-- rc.d

|   `-- init.d

|       `-- keepalived

`-- sysconfig

    `-- keepalived

 

分別對應系統目錄:

/etc/keepalived/keepalived.conf

/etc/rc.d/init.d/keepalived

/etc/sysconfig/keepalived

 

將配置文件拷貝到系統對應的目錄下:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived.conf /etc/keepalived/keepalived.conf

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

 

keepalived服務控制

systemctl enable keepalived.service #設置開機自動啟動

systemctl disable keepalived.service     #取消開機自動啟動

systemctl start keepalived.service       #啟動服務

systemctl restart keepalived.service     #重啟服務

systemctl stop keepalived.service         #停止服務

systemctl status keepalived.service      #查看服務狀態

設置防火牆打開

firewall-cmd --permanent–-add-service=keepalived

firewall-cmd --reload

再次強調:Keepalived的所有功能是配置keepalived.conf文件來實現的。

2.2 配置文件的詳細說明

keepalived.conf的配置

如下圖所示:

主機配置:

 

 

 

備機配置:

 

全局定義塊

1、email通知(notification_email、smtp_server、smtp_connect_timeout):用於服務有故障時發送郵件報警,可選項,不建議用。需要系統開啟sendmail服務,建議用第三獨立監控服務,如用nagios全面監控代替。 
2、lvs_id:lvs負載均衡器標識,在一個網絡內,它的值應該是唯一的。 
3、router_id:用戶標識本節點的名稱,通常為hostname 
4、花括號{}:用來分隔定義塊,必須成對出現。如果寫漏了,keepalived運行時不會得到預期的結果。由於定義塊存在嵌套關系,因此很容易遺漏結尾處的花括號,這點需要特別注意。

VRRP實例定義塊

  1. vrrp_sync_group:同步vrrp級,用於確定失敗切換(FailOver)包含的路由實例個數。即在有2個負載均衡器的場景,一旦某個負載均衡器失效,需要自動切換到另外一個負載均衡器的實例是哪
  2. group:至少要包含一個vrrp實例,vrrp實例名稱必須和vrrp_instance定義的一致
  3. vrrp_instance:vrrp實例名 
    1> state:實例狀態,只有MASTER 和 BACKUP兩種狀態,並且需要全部大寫。搶占模式下,其中MASTER為工作狀態,BACKUP為備用狀態。當MASTER所在的服務器失效時,BACKUP所在的服務會自動把它的狀態由BACKUP切換到MASTER狀態。當失效的MASTER所在的服務恢復時,BACKUP從MASTER恢復到BACKUP狀態。 
    2> interface:對外提供服務的網卡接口,即VIP綁定的網卡接口。如:eth0,eth1。當前主流的服務器都有2個或2個以上的接口(分別對應外網和內網),在選擇網卡接口時,一定要核實清楚。 
    3>mcast_src_ip:本機IP地址 
    4>virtual_router_id:虛擬路由的ID號,每個節點設置必須一樣,可選擇IP最后一段使用,相同的 VRID 為一個組,他將決定多播的 MAC 地址。 
    5> priority:節點優先級,取值范圍0~254,MASTER要比BACKUP高 
    6>advert_int:MASTER與BACKUP節點間同步檢查的時間間隔,單位為秒 
    7>lvs_sync_daemon_inteface:負載均衡器之間的監控接口,類似於 HA HeartBeat的心跳線。但它的機制優於 Heartbeat,因為它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。在 DR 模式中,lvs_sync_daemon_inteface與服務接口interface使用同一個網絡接口 
    8> authentication:驗證類型和驗證密碼。類型主要有 PASS、AH 兩種,通常使用PASS類型,據說AH使用時有問題。驗證密碼為明文,同一vrrp實例MASTER與BACKUP使用相同的密碼才能正常通信。 
    9>smtp_alert:有故障時是否激活郵件通知 
    10>nopreempt:禁止搶占服務。默認情況,當MASTER服務掛掉之后,BACKUP自動升級為MASTER並接替它的任務,當MASTER服務恢復后,升級為MASTER的BACKUP服務又自動降為BACKUP,把工作權交給原MASTER。當配置了nopreempt,MASTER從掛掉到恢復,不再將服務搶占過來。 
    11>virtual_ipaddress:虛擬IP地址池,可以有多個IP,每個IP占一行,不需要指定子網掩碼。注意:這個IP必須與我們的設定的vip保持一致。

三、主備切換時執行的腳本

在keepalived.conf配置文件中加入以下內容

1.notify_master“想要執行的腳本路徑” #表示當切換到master狀態時,要執行的腳本

2.notify_backup “想要執行的腳本路徑”#表示當切換到backup狀態時,要執行的腳本

3.notify_fault“想要執行的腳本路徑”#表示切換出現故障時要執行的腳本

 

 


免責聲明!

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



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