1. 程式人生 > >5-1企業級高可用集群介紹以及開源軟件應用

5-1企業級高可用集群介紹以及開源軟件應用

問題 主機 syn fail str -- 專業 unit cal

HA Cluster:
集群類型:LB(lvs/nginx(http/upstream,stream/upstream))、HA、HP
SPoF:Single Point of Failure
系統可用性的公式:A=MTBF/(MTBF+MTTR)---失效轉移(fail over)
(0,1),95%
幾個9(指標):99%,...,99.999%
系統故障:
硬件故障:設計缺陷、wear out、自然災害、...
軟件故障:設計缺陷、
提升系統高用性的解決方案之降低MTTR;
手段:冗余(redundant)
active/passive(主備),active/active(雙主)
active-->HEARTBEAT-->passive
active<-->HEARTBEAT<-->active
高可用的是“服務”:
HA nginx service:
vip/nginx process[/shared storage]
資源:組成一個高可用服務的"組件";
(1)passive node的數量?
(2)資源切換?

現在的開源冗余解決方案:keepalived,heartbeat(基本被棄用),corosync(heartbeat代替者,並且是通用的,專業的,以後接觸不會太多)
怎麽實現冗余呢?在兩個節點上都裝上一個軟件,並基於這個軟件通信(傳遞心跳信息,並基於心跳信息判斷是否故障,觸發操作,完成資源轉移),又叫心跳信息傳遞層(heartbeat layer),集群基礎架構層(infrastructure layer),也叫消息傳遞層(messaging layer)

向上一層是資源管理層:管理資源(資源有很多種ip、應用等)又叫集群資源管理器(cluster resource manager,crm)做決策的
向上一層lrm本地資源管理器(local resource manager),用來執行
一個一個的具體實現叫做RA(resource agent)(腳本或者unitfile)
一共是4個層次

一個集群一般最少有3個節點,並且總數是奇數,一般而言
如果A不能連接B,A不能連接C,BC也不能連接A,這就表示發生了網絡分區(network partition)(彼此之間訪問不到了,網絡之間發生分隔了),BC會重新選舉(少數服從多數的原則),並且向A補刀,例如:通過交換機發信號,讓A的電源閃一下,讓A重啟

這種發生了網絡分區的方式叫隔離,這種隔離是為了避免雙方爭論資源
隔離有兩種方式:1、stonith:一槍打在其他節點頭上,需要借助其他設備來實現2、fence:讓故障節點不再訪問關鍵資源
一會A主機搶過來資源,一會B主機搶過來資源,這樣並不會造成致命故障,但有時會造成致命故障,例如:A主機允許用戶存放數據,但是A主機掛了,用戶就訪問不到數據了,所以需要共享存儲,並且誰是活動節點誰掛載使用。那麽A主機掛了,B主機也認為A主機掛了,B主機會把IP地址拿過了,進程啟動起來,並別把共享存儲掛載上,然後才能訪問數據,此時A主機仍然掛載在共享存儲上,如果沒有卸載,共享存儲中的硬盤如果是能夠多線接入的設備,如果是一個塊設備的話,會有嚴重問題,每一個塊設備的數據都是被節點載入內存中訪問操作的,文件系統元數據崩潰,意味著整個文件系統全部崩潰
一般塊設備都是san(網絡區域存儲)、scsi通過光纖交換機接入進來的,可以通過專業設備(光纖交換機)屏蔽接入A節點的接口

判斷節點故障的機制叫做quorum機制(quorum:法定人數)with quorum > total/2 without quorum <= total/2
選舉領導有很多協議:(流言協議,聽說誰當領導了,就全部同意了),還有很多可以查看兩篇論文paxos(太麻煩了,作者用了十幾年),raft(比較簡單)

那麽判定節點故障後,資源轉移到哪個節點呢?一般是在節點上設置優先級,但是這樣太死板了,而且會浪費資源(服務器上運行的服務應該不止一個),有一個節點是隨時備用的狀態,這種模型叫NM模型(N個節點M個服務),這種模型定義節點的優先級不太現實(每個資源都運行在某一個優先級高的節點,其他節點都閑置備用,浪費),所以要定義資源的傾向性
每個節點上都運行一個服務,每個服務(資源)都傾向於運行在的節點,這種模型叫N/N模型

這裏註意:corosync可以高可用幾乎所有服務,上邊講的兩種模型就是corosync可以做到的,而keepalived主要是用來高可用ipvs的,並且添加了ipvs後端服務器的健康狀態檢測功能

把問題推向客戶端一側是不明智的(客戶端可以通過兩個路由連接互聯網,其中一個路由掛了,不能讓客戶端自己修改網關地址)vrrp:virtual routing redundant protocol虛擬路由冗余協議,而是把兩個路由器的網卡設置成一個群組,使用同一個ip地址,並且網卡也有優先級之分,把IP地址優先配置到網卡上,如果優先級相同,則選擇mac地址其中一個路由掛了,客戶端(網關是相同的)還可以通過另一個路由連接互聯網

keepalived就是利用軟件實現VRRP協議
虛擬路由器:每個路由器可能不止有一塊網卡,那麽可以把每個路由器的1號2號3號網卡組成3個集群(虛擬路由器),用VRID來標識
在高可用集群中,免費ARP是必須的一步:客戶端緩存的是一個路由器的mac,當緩存還沒失效時,ip地址轉移到另一臺路由器,則這臺路由器必須發送免費arp,好讓客戶端知道ip地址已經轉移,

如果有一臺新的路由器(優先級特別高)裝上了keepalive軟件上線了,這種情況就不安全了,有可能泄露信息的。所以需要認證(VRRP有三種認證:無認證、簡單字符認證(不超過8個字符)、MD5認證(keepalive不支持))

15:25min-30min沒好好聽

5-1企業級高可用集群介紹以及開源軟件應用