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)資源切換?node
如今的開源冗餘解決方案:keepalived,heartbeat(基本被棄用),corosync(heartbeat代替者,而且是通用的,專業的,之後接觸不會太多)
怎麼實現冗餘呢?在兩個節點上都裝上一個軟件,並基於這個軟件通訊(傳遞心跳信息,並基於心跳信息判斷是否故障,觸發操做,完成資源轉移),又叫心跳信息傳遞層(heartbeat layer),集羣基礎架構層(infrastructure layer),也叫消息傳遞層(messaging layer)
向上一層是資源管理層:管理資源(資源有不少種ip、應用等)又叫集羣資源管理器(cluster resource manager,crm)作決策的
向上一層lrm本地資源管理器(local resource manager),用來執行
一個一個的具體實現叫作RA(resource agent)(腳本或者unitfile)
一共是4個層次nginx
一個集羣通常最少有3個節點,而且總數是奇數,通常而言
若是A不能鏈接B,A不能鏈接C,BC也不能鏈接A,這就表示發生了網絡分區(network partition)(彼此之間訪問不到了,網絡之間發生分隔了),BC會從新選舉(少數服從多數的原則),而且向A補刀,例如:經過交換機發信號,讓A的電源閃一下,讓A重啓
這種發生了網絡分區的方式叫隔離,這種隔離是爲了不雙方爭論資源
隔離有兩種方式:一、stonith:一槍打在其餘節點頭上,須要藉助其餘設備來實現二、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不支持))ide
15:25min-30min沒好好聽設計