1. 程式人生 > >基於linux實現keepalived高可用的集群網站架構

基於linux實現keepalived高可用的集群網站架構

基於linux實現keepalived高可用的集群網站架構

模擬場景:

隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,目前業務已經通過集群LVS架構可做到隨時拓展,後端節點已經通過集群技術(ldirectord)保障了可用性,但對於前端負載均衡器來說,是個比較大的安全隱患,因為當前端負載均衡器出現故障時,整個集群就處於癱瘓狀態,因此,負載均衡器的可用性也顯得至關重要,那麽怎麽來解決負載均衡器的可用性問題呢?(當然是用keepalivedarrp實現地址偏移來實現最簡單啦~

技術說明:

群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群組成後,可以利用多個計算機和組合進行海量請求處理(

負載均衡),從而獲得很高的處理效率,也可用多個計算機做備份(高可用),使得任何一個機器壞了整個系統還是能正常運行。集群在目前互聯網公司是必備的技術,極大提高互聯網業務的可用性和可縮放性

高可用集群技術(理論概念)

高可用(High Availability

HA(High Available), 高可用性群集是通過系統的可靠性(reliability)和可維護性(maintainability)來度量的。工程上,通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均維修時間(MTTR)來度量系統的可維護性。於是可用性被定義為:HA=MTTF/(MTTF+MTTR)*100%

具體HA(可用性)衡量標準

:

99% 一年宕機時間不超過4

99.9% 一年宕機時間不超過10小時(目前這個階段的就可以了,往下的要求就有點高了)

99.99% 一年宕機時間不超過1小時

99.999% 一年宕機時間不超過6分鐘

高可用集群技術實現

高可用工作方式:主從方式 (非對稱方式)、雙機雙工方式(互備互援)、集群工作方式(多服務器互備方式)

高可用的資源分類:網絡高可用、服務器高可用、存儲高可用、服務高可用等

開源高可用解決方案:keepalived:通過實現vrrp協議來實現地址漂移heartbeat(開源社區項目),cman+rgmanager (RHCS:redhat cluster suite)corosync+pacemaker

(大型解決方案,一個用於心跳檢測,一個用於資源轉移。兩個結合起來使用,可以實現對高可用架構的自動管理。)

技術分享


技術分享

Keepalived是什麽:

Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服

務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務器。

Keepalived的特性:

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

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

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

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

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


技術分享

Keepalived工作流程圖詳解:

如上圖,keepalived主要是模塊是VRRP StackCheackers,實現HA集群中失敗切換(Failover)功能。Keepalived通過VRRP功能能再結合LVS負載均衡軟件即可部署一個高性能的負載均衡集群系統。,Cheackers主要實現可實現對服務器運行狀態檢測和故障隔離。其中ipvsrealserver健康狀態檢查通過配置文件配置就可以實現,而其他服務高可用則需要通過自己編寫腳本,然後配置keepalived調用來實現。

Keepalived運行有3個守護進程。父進程主要負責讀取配置文件初始化、監控2個子進程等;然後兩個子進程,一個負責VRRP,另一個負責Cheackers健康檢查。其中父進程監控模塊為WacthDog,工作實現:每個子進程打開一個接受unix域套接字,父進程連接到那些unix域套接字並向子進程發送周期性(5shello包。

上圖是Keepalived的功能體系結構,大致分兩層:用戶空間(user space)和內核空間(kernel space

內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其他相關的網絡功能)兩個部份。


什麽是VRRP協議

VRRPVirtual Router Redundancy Protocol,虛擬路由冗余協議)可以認為是實現路由器高可用的協議,簡單的說,當一個路由器故障時可以由另一個備份路由器繼續提供相同的服務。

VRRP根據優先級來確定虛擬路由器中每臺路由器的角色(Master路由器或Backup路由器)。VRRP優先級的取值範圍為0255數值越大表明優先級越高),可配置的範圍是1254,優先級0為系統保留給路由器放棄Master位置時候使用,255則是系統保留給IP地址擁有者使用。優先級越高,則越有可能成為Master路由器。當兩臺優先級相同的路由器同時競爭Master時,比較接口IP地址大小。接口地址大者當選為Master


實現基於keepalived高可用集群:

技術分享

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

二、安裝步驟:

1iptables -F && setenforing 清空防火墻策略,關閉selinux

2、兩臺服務器都使用yum方式安裝keepalived服務 yum install keepalived

三、修改配置文件:

1.修改/etc/keepalived/keepalived.conf配置文件內容

2、對glob段進行定義,添加管理員郵箱等

3、對vrrp_instance 進行配置,配置一主一從,定義一個基於虛擬IP的實例


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_ipaddress {

172.17.10.100(設置的虛擬VIP)

}

}


技術分享

(backup從)配置文件設置

技術分享

這樣就實現了地址漂移了(意思就是master主機器不行了,設置的虛擬VIP會飄到backup從機器上,這樣的話在主從機器上提供同樣的服務,這樣主機器壞了也不影響服務,實現了高可用。

技術分享

技術分享

基於linux實現keepalived高可用的集群網站架構