1. 程式人生 > >keepalived高可用集群技術介紹及實戰演練

keepalived高可用集群技術介紹及實戰演練

keepalived

一、Keepalived是什麽

Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務器。

二、Keepalived的特性

配置文件簡單:配置文件比較簡單,可通過簡單配置實現高可用功能

穩定性強:keepalived是一個類似於layer3, 4&7交換機制的軟件,具備我們平時說的第3層、第4層和第7層交換機的功能,常用於前端負載均衡器的高可用服務,當主服務器出現故障時,可快速進行切換,監測機制靈活,成功率高。

成本低廉:開源軟件,可直接下載配置使用,沒有額外費用。

應用範圍廣:因為keepalived可應用在多個層面,所以它幾乎可以對所有應用做高可用,包括LVS、數據庫、http服務、nginx負載均衡等等

支持多種類型:支持主從模式、主主模式高可用,可根據業務場景靈活選擇。

三、keepalived工作流程

技術分享

keepalived主要模塊是VRRP Stack和Cheackers,實現HA集群中失敗切換(Failover)功能。Keepalived通過VRRP功能能再結合LVS負載均衡軟件即可部署一個高性能的負載均衡集群系統。Cheackers主要實現可實現對服務器運行狀態檢測和故障隔離。,其中ipvs和realserver健康狀態檢查通過配置文件配置就可以實現,而其他服務高可用則需要通過自己編寫腳本,然後配置keepalived調用來實現。Keepalived運行有3個守護進程。父進程主要負責讀取配置文件初始化、監控2個子進程等;然後兩個子進程,一個負責VRRP,另一個負責Cheackers健康檢查。其中父進程監控模塊為WacthDog,工作實現:每個子進程打開一個接受unix域套接字,父進程連接到那些unix域套接字並向子進程發送周期性(5s)hello包。

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

四、什麽是vrrp協議

VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議)可以認為是實現路由器高可用的協議,簡單的說,當一個路由器故障時可以由另一個備份路由器繼續提供相同的服務。VRRP根據優先級來確定虛擬路由器中每臺路由器的角色(Master路由器或Backup路由器)。VRRP優先級的取值範圍為0到255(數值越大表明優先級越高),可配置的範圍是1到254,優先級0為系統保留給路由器放棄Master位置時候使用,255則是系統保留給IP地址擁有者使用。優先級越高,則越有可能成為Master路由器。當兩臺優先級相同的路由器同時競爭Master時,比較接口IP地址大小。接口地址大者當選為Master。

五、keepalived的應用場景

在網絡層、數據鏈路層,運行著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、HTTP、DNS等各種不同類型的高層協議,Keepalived的運行方式也更加全面化和復雜化,用戶可以通過自定義Keepalived的工作方式;例如:用戶可以通過編寫程序來運行keepalived。而keepalived將根據用戶的設定檢測各種程序或服務是否運行正常,如果Keepalived的檢測結果與用戶設定不一致時,Keepalived將把對應的服務從服務器中移除。

六、keepalived配置文件分析

global_defs { #全局配置


notification_email { #realserver故障時通知郵件的收件人地址,可以多個
root@localhost
}
notification_email_from root_keepalived #發件人信息(可以隨意偽裝,因為郵件系統不會驗證處理發件人信息)
smtp_server 127.0.0.1 #發郵件的服務器(一定不可為外部地址)
smtp_connect_timeout 30 #連接超時時間
router_id KEEPALIVED #路由器的標識(可以隨便改動)
}

vrrp_instance VI_1 { #配置虛擬路由器的實例,VI_1是自定義的實例名稱


state MASTER #初始狀態,MASTER|BACKUP,當state指定的instance的初始化狀態,在兩臺服務器都啟動以後,馬上發生競選,優先級高的成為MASTER,所以這裏的MASTER並不是表示此臺服務器一直是MASTER
interface eth0 #通告選舉所用端口
virtual_router_id 51 #虛擬路由的ID號(一般不可大於255)
priority 101 #優先級信息 #備節點必須更低
advert_int 1 #VRRP通告間隔,秒
authentication {
auth_type PASS #認證機制
auth_pass 5344 #密碼(盡量使用隨機)
}
nopreempt #非搶占模式
virtual_server 192.168.18.240 80 { #設置一個virtual server:VIP:Vport
delay_loop 3 # service polling的delay時間,即服務輪詢的時間間隔
lb_algo rr #LVS調度算法:rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #LVS集群模式:NAT|DR|TUN
persistence_timeout 120 #會話保持時間(持久連接,秒),即以用戶在120秒內被分配到同一個後端realserver
nat_mask 255.255.255.255
protocol TCP #健康檢查用的是TCP還是UDP主要,後端有幾臺這裏就要設置幾個
real_server 192.168.18.251 80 { #後端真實節點主機的權重等設置,主要,後端有幾臺這裏就要設置幾個
weight 1 #給每臺的權重,rr無效
inhibit_on_failure #表示在節點失敗後,把他權重設置成0,而不是IPVS中刪除
url {

path /
status_code 200
}
TCP_CHECK {
connect_timeout 2 #連接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 1 #重連間隔
}

七、實戰演練

實現基於keepalived高可用集群:


一、環境準備:centos系統主從兩臺、yum源、防火墻關閉、各節點時鐘服務同步、各節點之間可以通過主機名互相通信
二、安裝步驟:

1、iptables -F && setenforing 清空防火墻策略,關閉selinux 2、兩臺服務器都使用yum方式安裝keepalived服務


三、修改配置文件:

1.修改/etc/keepalived/keepalived.conf配置文件內容 2、對glob段進行定義,添加管理員郵箱等 3、對vrrp_instance 進行配置,配置一主一從,定義一個基於虛擬IP的實例


四、檢驗高可用的效果

1、配置完成後,觀察兩側IP的是情況,看是否虛擬IP在主上配置成功 2、檢查主從服務日誌,服務是否運行正常,監測機制是否有效 3、停掉主服務上的keepalived服務,看虛擬IP是否正常轉移到從節點上 4、觀察日誌,了解整個切換過程,之後啟動主節點服務,看虛擬IP能否被主服務再接管

實現keepalived企業級高可用基於LVS-DR模式的應用實戰


一、環境準備:兩臺centos系統做DR、一主一從,兩臺實現過基於LNMP的電子商務網站(提前分配好各個主機的角色並註意不要搞混IP地址)
    二、安裝步驟:
1、兩臺服務器都使用yum方式安裝keepalived服務
2、iptables -F && setenforing 清空防火墻策略,關閉selinux

三、配置基於DR模式的LVS負載均衡集群:
1、修改keepalived主(lvs-server-master)配置文件實現全局配置以及virtual_instance
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 172.17.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface ens34
virtual_router_id 87
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 666666
}
virtual_ipaddress {
172.17.251.197
}
}

2、修改keepalived主(lvs-server-master)配置文件實現virtual_server

virtual_server 172.17.251.197 80 {
delay_loop 6
lb_algo wrr (調度算法)
lb_kind DR (工作模式)
nat_mask 255.255.255.255
persistence_timeout 600
protocol TCP

real_server 172.17.253.114 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

real_server 172.17.250.142 80{
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3、修改keepalived從(lvs-server-backup)配置文件實現virtual_instance
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 172.17.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface ens34
virtual_router_id 87
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 666666
}
virtual_ipaddress {
172.17.251.197
}
}

4、修改keepalived從(lvs-server-backup)配置文件實現virtual_server

virtual_server 172.17.251.197 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout 600
protocol TCP

real_server 172.17.253.114 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

real_server 172.17.250.142 80{
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

註意:

1、在配置完keepalived配置文件之後需要檢查real server中是否配置VIP到本地回環網卡lo上,並只廣播自己。

2、在配置文件中需要註意借口不要寫錯

3、keepalived主(lvs-server-master)配置文件與從配置文件除了 state(狀態)、interface(VIP接口)、 priority(權重)不同之外其他的內容都一樣,所以可以在完成主配置文件後直接將主配置文件copy到從配置文件,修改對應的信息即可。



本文出自 “13145479” 博客,請務必保留此出處http://13155479.blog.51cto.com/13145479/1980827

keepalived高可用集群技術介紹及實戰演練