編寫背景:上班時領導要求我們團隊實現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實例定義塊
- vrrp_sync_group:同步vrrp級,用於確定失敗切換(FailOver)包含的路由實例個數。即在有2個負載均衡器的場景,一旦某個負載均衡器失效,需要自動切換到另外一個負載均衡器的實例是哪
- group:至少要包含一個vrrp實例,vrrp實例名稱必須和vrrp_instance定義的一致
- 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“想要執行的腳本路徑”#表示切換出現故障時要執行的腳本