高性能集群軟件Keepalived的介紹以及安裝與配置
Keepalived介紹:
Keepalived是Linux下一個輕量級的高可用解決方案;起初是為LVS設計的,專門用來監控集群系統中各個服務節點的狀態。它根據TCP/IP參考模型的第三、第四和第五層交換機機制檢測每個服務節點的狀態,如果某個服務節點出現異常,或工作出現故障,Keepalived將檢測到,並將出現故障的服務節點從集群系統中剔除,而在故障節點恢復正常後,Keepalived又可以自動將此服務節點重新加入服務器集群中,這些工作全部自動完成,不需要人工幹涉,需要人工完成的只是修復出現故障的服務節點。
Keepalived後來又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗余協議)出現的目的是解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷穩定運行。因此,Keepalived一方面具有服務器狀態檢測和故障隔離功能,另一方面也具有HA cluster 功能。
VRRP協議與工作原理
VRRP,它是一種主備模式的協議,通過VRRP可以在網絡發生故障時透明地進行設備切換而不影響主機間的數據通信;這其中涉及兩個概念:物理路由器和虛擬路由器。
VRRP可以將兩臺或多臺物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或多個)對外提供服務,而在虛擬路由器內部是多個物理路由器協同工作,同一時間只有一臺物理路由器對外提供服務,這臺物理路由器被稱為主路由器(處於MASTER角色)。一般情況MASTER由選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,如ARP請求、ICMP、數據轉發等。而其他物理路由器不擁有對外的虛擬Ip,也不提供對外網絡功能,僅僅接收MASTER的VRRP狀態通告信息,這些路由器被統稱為備份路由器(處於BACKUP角色)。當主路由器失效時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色繼續提供對外服務。
每個虛擬路由器獨有一個唯一標識,稱為VRID,一個VRID與一組IP地址構成了一個虛擬路由器。在VRRP協議中,所有的報文都是通過IP多播形式發送的,而在一個虛擬路由器中,只有處於MASTER角色的路由器會一直發生VRRP數據包,處於BACKUP角色的路由器只接收MASTER發送過來的報文信息,用來監控MASTER運行狀態,因此,不會發生BACKUP搶占的現象,除非它的優先級更高。而當MASTER出現故障,多臺BACKUP就會進行選舉,優先級最高的BACKUP成為新的MASTER,這種選舉並進行角色切換的過程非常快,因而保證了服務的持續可用性。
Keepalived工作原理
keepalive運行機制如下:
在網絡層,運行著4個重要的協議:互聯網協議IP、互聯網控制報文協議ICMP、地址轉換協議ARP以及反向地址轉換協議RARP。Keepalived在網絡層采用的最常見的工作方式是通過ICMP協議向服務器集群中的那個節點發送一個ICMP數據包(類似於ping實現的功能),如果某個節點沒有返回響應數據包,那麽認為此節點發生了故障,Keepalived將報告次節點失效,並從服務器集群中剔除故障節點。
在傳輸層,提供了兩個主要的協議:傳輸控制協議TCP和用戶數據協議UDP。傳輸控制協議TCP可以提供可靠的數據傳輸服務、Ip地址和端口代表TCP的一個連接端。要獲得TCP服務,需要在發送機的一個端口上和接收機的一個端口上建立連接,而Keepalived在傳輸層就是利用TCP協議的端口連接和掃描技術來判斷集群點是否正常的。比如,對於常見的WEB服務默認的80端口、SSH服務默認的22端口等,Keepalived一旦在傳輸層探測到這些端口沒有響應數據返回,就認為這些端口發生異常,然後強制將此端口對應得節點從服務器集群組中移除。
在應用層,可運行FTP、TELNET、SMTIP、DNS等各種不同類型的高層協議,Keepalived的運行方式也更加全面化和復雜化,用戶可以通過自定義Keepalived的工作方式;例如:用戶可以通過編寫程序來運行keepalived。而keepalived將根據用戶的設定檢測各種程序或服務是否運行正常,如果Keepalived的檢測結果與用戶設定不一致時,Keepalived將把對應的服務從服務器中移除。
Keepalived的組件:
核心組件:
VRRP Stack:實現HA集群中失敗切換(Failover)功能。Keepalived通過VRRP功能能
再結合LVS負載均衡軟件即可部署一個高性能的負載均衡集群系統。
ipvs wrapper:可以將設置好的IP VS規則發送到內核空間並提交給IP VS模塊,最終實
現 IP VS模塊的負載均衡功能。
checkers:這是Keepalived 最基礎的功能,也是最主要的功能,可實現對服務器運行狀
態檢測和故障隔離。
HA Cluster的配置前提:
(1) 各節點時間必須同步;
ntp, chrony
(2) 確保iptables及selinux不會成為阻礙;
(3) 各節點之間可通過主機名互相通信(對KA並非必須);
建議使用/etc/hosts文件實現;
(4) 確保各節點的用於集群服務的接口支持MULTICAST通信;
D類:224-239;
Keepalived安裝與配置:
Centos6.4以後版本可以直接yum安裝:
yum install keepalived
程序環境:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:keepalived.service
Unit File的環境配置文件:/etc/sysconfig/keepalived
根據配置文件所實現的功能,將Keepalived配置分三類:
Global Configuration
VRRPD 配置、LVS配置
全局配置以”global_defs”作為標識,在“global_defs”區域內的都是
全局配置選項:
global_defs {
notification_email {
[email protected].loc
[email protected]
[email protected]
}
notification_email_from
[email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_mcast_group4 224.110.129.18
}
notification_email :用於設置報警郵件地址,可以設置多個,每行一個。註意,如果要開啟郵 件報警,需要開啟本機的Sendmail服務。
notification_email_from :用於設置郵件的發送地址,真正的能發郵件的地址。
smtp_server:用於設置郵件的smtp server地址
smtp_connect_timeout:設置smtp server的超時時間
router_id :表示運行keepalived服務器的一個標識,是發郵件時顯示在郵件主題中的信息
vrrp_mcast_group4 :多播地址段
VRRP配置段主要用來配置節點角色(主或從)、綁定的網絡接口、節點間驗證機制、集群 服務IP等。
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
track_interface {
eth0
eth1
…
}
VRRP 配置以” vrrp_instance“作為標識,包含了若幹配置選項:
vrrp_instance:是VRRP實例開始的標識,後跟VRRP實例名稱
state:用於指定Keepalived的角色,MASTER表示此主機是服 務器,BAVKUP表示此 主機是備用服務器。
interface:虛擬IP配置指定的接口
virtual_router_id:虛擬路由標識,它是一個數字,同一個 VRRP配置段的唯一標識, 即在同一個vrrp_instance下,MASTER和BACKUP必須是一致的。
priority:用於定義節點優先級,數字越大優先級越高。
advert_int:設定MASTER和BACKUP主機之間同步檢查的時間間隔,單位是秒。
authentication:用於設定節點間通信驗證類型和密碼,驗證類型主要有PASS(簡單字 符串認證,支持前8位,可以用:openssl rand -base64 8 獲取隨機密碼)和AH兩 種,在一個vrrp_instance下,MASTER和BACKUP必須使用相同的密碼才能正常通信。
virtual_ipaddress:用於設置虛擬IP地址(VIP)。
track_interface:配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態;
nopreempt:定義工作模式為非搶占模式;可以實現主節點故障恢復後不再切回到主節 點,讓服務一直在備用節點工作,直到備用節點出現故障才會進行切換。在使 用不搶占時,只能在”state“狀態為BACKUP的節點上設置,而且這個節點的優 先級必須高於其他節點。
preempt_delay 300:搶占式模式下,節點上線後觸發新選舉操作的延遲時長;
定義通知腳本
notify_master:指定當Keepalived進入MASTER狀態時要執行的腳本,這個腳本可以是一個狀 態報警腳本,也可以是一個服務管理腳本。Keepalived允許腳本出入參數,因此靈活性很強。
notify_backup:當Keepalived進入BACKUP狀態時要執行的腳本,這個腳本可以是一個狀態報警 腳本,也可以是一個服務管理腳本。
notify_fault:指定當Keepalived進入FAULT狀態時要執行的腳本,腳本功能與前兩個類似。
notify <STRING>|<QUOTED-STRING>:通用格式的通知觸發機制,一個腳本可完成以上三種 狀態的轉換時的通知;
實驗: 單主配置示例
環境:
兩臺主機分別是:172.16.252.18/16(node1) 配置BACKUP
172.16.252.19/16 (node2) 配置MASTER
兩臺主機分別配置:/etc/keepalived/keepalived.conf
兩臺主機:systemctl restart keepalived
啟動之後,可以在MASTER的主機上查看:
ip a l
下圖中: 可以看出MASTER主機,一直向多播地址發送信息.
模擬MASTER主機宕機 :
iptables -A OUTPUT -d 224.110.129.18 -j REJECT
systemctl stop keepalived
BACKUP主機上:顯示虛擬地址加進來了
ip a l 可以查看到虛擬地址了。如果MASTER主機再啟動後,由於優先級高,VIP虛擬地址又被 搶回來了!
雙主模型的配置:
所謂雙主模型對於VRRP來講還是單主,所不同的是在同一個接口上,配置了多個虛擬路由器。
在上個實驗基礎上配置:
在note2主節點上配置:
同一個接口上同一組物理服務器上配置第二個虛擬路由器:
vim /etc/keepalived/keepalived.conf
在原來基礎上添加下圖配置段:
同理在note1節點上配置:
測試效果:
note2: systemctl stop keepalived.service
note1: systemctl start keepalived.service
同理:把note2主機啟動起來,查看效果,由於優先級高,會拿走一個地址;而note1主機就一個虛擬地址。
通知腳本的使用方式:
腳本的調用方法:
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
在單主模型的實驗環境下:
在note1和note2節點上,分別執行以下操作:
cd /etc/keepalived/
vim notify.sh
note1、note2兩臺主機上:
systemctl stop keepalived
vim /etc/keepalived/keepalived.conf
當note1備用節點先啟動時,它會變成MASTER,虛擬地址被添加:
systemctl restart keepalived.service
當再啟動note2時,它從沒有啟動到變成主節點,而當前的note1變成了備用節點:
note2: systemctl restart keepalived.service
note1上查看:
root 又收到一份郵件:
而note2主機上:變成了主節點,虛擬地址被添加了:
Keepalived 簡單配置,以及通知腳本的運用就介紹到這裏。之後的高級集群架構,後期會繼續整理,更新!
本文為馬哥Linux運維學員原創,首發於178linux.com
本文出自 “馬哥Linux培訓” 博客,請務必保留此出處http://mageedu.blog.51cto.com/4265610/1967810
高性能集群軟件Keepalived的介紹以及安裝與配置