集群、RAC和MAA
集群:是一種由兩臺(tái)或多臺(tái)節(jié)點(diǎn)機(jī)構(gòu)成的松散耦合的計(jì)算節(jié)點(diǎn)集合,這個(gè)集合在整個(gè)網(wǎng)絡(luò)中表現(xiàn)為單一的系統(tǒng),并通過(guò)單一接口進(jìn)行使用和管理。給用戶提供網(wǎng)絡(luò)服務(wù)或應(yīng)用程序的單一視圖。大多數(shù)模式下,集群中所有計(jì)算機(jī)都擁有一個(gè)相同的名稱,集群內(nèi)任意一個(gè)系統(tǒng)都可以被所有網(wǎng)絡(luò)客戶所使用。當(dāng)一個(gè)應(yīng)用服務(wù)發(fā)生故障時(shí),應(yīng)用服務(wù)將被重新啟動(dòng)或被另一臺(tái)服務(wù)器接管??蛻魧⒛芎芸爝B接到新應(yīng)用服務(wù)器上,理想情況下用戶甚至感覺(jué)不到這種故障存在。
一、集群技術(shù)基礎(chǔ)
1.集群地址
維護(hù)集群地址的設(shè)施被稱為負(fù)載均衡器。對(duì)內(nèi)負(fù)責(zé)管理各節(jié)點(diǎn)加入和退出,對(duì)外負(fù)責(zé)集群地址向內(nèi)部實(shí)體地址轉(zhuǎn)換。
2.內(nèi)部通信
節(jié)點(diǎn)間心跳測(cè)試信息、服務(wù)實(shí)體間任務(wù)執(zhí)行上下文信息的通信。
3.集群仲裁
二、集群術(shù)語(yǔ)
1.兩大特性:可擴(kuò)展性和高可用性
可擴(kuò)展:新的服務(wù)實(shí)體可以動(dòng)態(tài)的加入集群,從而增強(qiáng)集群性能。
高可用性:通過(guò)對(duì)服務(wù)實(shí)體的冗余配置,使客戶端減少遇到“服務(wù)宕機(jī)”的可能性。
2.兩大核心能力:負(fù)載均衡和故障轉(zhuǎn)移
負(fù)載均衡:把處理任務(wù)盡可能均衡的分散到集群中的每個(gè)節(jié)點(diǎn)和網(wǎng)絡(luò)資源。
故障轉(zhuǎn)移:集群中正在執(zhí)行任務(wù)的服務(wù)出現(xiàn)故障,另一服務(wù)實(shí)體中執(zhí)行同一任務(wù)的資源將接手并繼續(xù)完成任務(wù),這個(gè)過(guò)程叫故障轉(zhuǎn)移。
三、集群組成元素
-
Cluster
通過(guò)心跳網(wǎng)絡(luò),基于共享存儲(chǔ)磁盤(pán)的心跳網(wǎng)絡(luò),將一組機(jī)器整合而成的一個(gè)集群。 -
Node
Cluster中的一個(gè)主機(jī) -
Resource
可以從主機(jī)接管到備機(jī)上的邏輯實(shí)體,比如IP地址、文件系統(tǒng)、應(yīng)用程序
四、集群分類
根據(jù)不同功能分類
-
高性能計(jì)算集群
將計(jì)算任務(wù)分配到不同計(jì)算節(jié)點(diǎn)來(lái)提高整體計(jì)算能力,多見(jiàn)于搜索引擎、文本挖掘等互聯(lián)網(wǎng)業(yè)務(wù)。 -
負(fù)載均衡集群(LB)
核心是把業(yè)務(wù)的負(fù)載流量盡可能平均合理的分?jǐn)偟郊焊鱾€(gè)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)可以處理一部分負(fù)載,并且可以根據(jù)節(jié)點(diǎn)負(fù)載進(jìn)行動(dòng)態(tài)平衡。 -
高可用性集群(HA)
側(cè)重提高系統(tǒng)可用性,通過(guò)集成硬件和軟件容錯(cuò)性來(lái)實(shí)現(xiàn)整體服務(wù)高可用。如果某節(jié)點(diǎn)發(fā)生故障,將由另外節(jié)點(diǎn)代替。RAC就同時(shí)具有HA和LB兩種能力。
五、Oracle高可用架構(gòu)(MAA)
最大可用性體系架構(gòu)
MAA是通過(guò)把所有可用技術(shù)組合起來(lái),減少或者消除計(jì)劃內(nèi)和計(jì)劃外的系統(tǒng)宕機(jī)時(shí)間,包括來(lái)自各方面的風(fēng)險(xiǎn),從硬件故障導(dǎo)致的數(shù)據(jù)破壞、到自然災(zāi)害引起的大范圍癱瘓。
RAC不是一個(gè)獨(dú)立的產(chǎn)品,更像是一個(gè)實(shí)施方案或者指導(dǎo)方針,把Oracle產(chǎn)品中可用于數(shù)據(jù)保護(hù)的技術(shù)匯集在一起,進(jìn)行歸納、整理、分析,最終提出一個(gè)“最佳時(shí)間規(guī)劃”。
1.MAA實(shí)例
MAA核心思想就是冗余,通過(guò)數(shù)據(jù)、軟件、硬件、網(wǎng)絡(luò)等各種組件的冗余,實(shí)現(xiàn)最大程度的數(shù)據(jù)保護(hù)。
易混淆概念:
1)雙機(jī)熱備
兩個(gè)或多個(gè)主機(jī)連接一個(gè)共享的存儲(chǔ)設(shè)備,當(dāng)主機(jī)服務(wù)器發(fā)生故障時(shí),一旦Cluster軟件偵測(cè)到故障,就會(huì)把備用機(jī)器激活,保證應(yīng)用繼續(xù)提供服務(wù)。
2)雙機(jī)互備
雙機(jī)熱備技術(shù)的擴(kuò)展,當(dāng)一個(gè)服務(wù)器出現(xiàn)故障時(shí),另一臺(tái)機(jī)器可以很快把服務(wù)接管過(guò)來(lái),保證業(yè)務(wù)連續(xù)性。
3)Oracle DataGuard
DataGuard環(huán)境也有多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),其中一個(gè)是活躍的,其余為備用狀態(tài)Standby,由Primary節(jié)點(diǎn)對(duì)外提供服務(wù),Primary節(jié)點(diǎn)和Standby節(jié)點(diǎn)之間通過(guò)日志傳遞,日志恢復(fù)機(jī)制實(shí)現(xiàn)數(shù)據(jù)同步。當(dāng)Primary節(jié)點(diǎn)發(fā)生故障時(shí),可以由DBA或者系統(tǒng)自動(dòng)進(jìn)行Primary、Standby角色切換。
區(qū)別:DataGuard環(huán)境中的兩個(gè)或者多個(gè)主機(jī) 并不需要共享存儲(chǔ)設(shè)備,每個(gè)有自己的存儲(chǔ)數(shù)據(jù),其次DataGuard環(huán)境中并不需要心跳機(jī)制。
2.RAC集群
邏輯上看,RAC集群由存儲(chǔ)層、網(wǎng)絡(luò)層、集群件層、應(yīng)用層4層組成
存儲(chǔ)層:
RAC是一個(gè)多實(shí)例、單份數(shù)據(jù)的系統(tǒng)。數(shù)據(jù)文件、聯(lián)機(jī)日志文件、控制文件等文件在集群中只有一份。不管有幾個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)都平等的使用這些數(shù)據(jù)文件。一般采用EMC等存儲(chǔ)陣列,每個(gè)服務(wù)器通過(guò)HBA卡和光纖線連接到存儲(chǔ)上。
網(wǎng)絡(luò)層:
RAC環(huán)境有3個(gè)物理網(wǎng)絡(luò)存在:
一個(gè)是由每臺(tái)服務(wù)器的Public網(wǎng)卡組成的網(wǎng)絡(luò),對(duì)外提供數(shù)據(jù)查詢等服務(wù);
一個(gè)是由每臺(tái)服務(wù)器的Private網(wǎng)卡組成的私有網(wǎng)絡(luò),用于RAC心跳網(wǎng)絡(luò)和Cache Fusion
一個(gè)是存儲(chǔ)設(shè)備、光纖交換機(jī)、每個(gè)節(jié)點(diǎn)HBA組成的存儲(chǔ)網(wǎng)絡(luò)。
前兩個(gè)傳輸IP數(shù)據(jù),后一個(gè)傳輸SCSI數(shù)據(jù)
集群件層:
Clusterware會(huì)在OS Kernel之前截獲數(shù)據(jù)庫(kù)發(fā)出的請(qǐng)求,然后和其他節(jié)點(diǎn)上Clusterware協(xié)商,最終完成上層請(qǐng)求。
應(yīng)用層:
整個(gè)應(yīng)用層由若干CRS組成,可以簡(jiǎn)單的理解,一個(gè)Resource通常是一個(gè)進(jìn)程、或者由一組進(jìn)程組成的一個(gè)完整服務(wù)。
3.RAC集群環(huán)境問(wèn)題3.RAC集群環(huán)境問(wèn)題
1)并發(fā)控制
集群環(huán)境只能很高數(shù)據(jù)是共享存放,而集群內(nèi)各個(gè)節(jié)點(diǎn)身份是對(duì)等的,所有節(jié)點(diǎn)對(duì)數(shù)據(jù)有相同的訪問(wèn)權(quán)利。利用DML(Distribute Lock Management)機(jī)制進(jìn)行多個(gè)實(shí)例間的并發(fā)控制。
2)健忘癥
兩個(gè)節(jié)點(diǎn)集群,節(jié)點(diǎn)1因?yàn)檎5木S護(hù)需要被關(guān)閉,然后在節(jié)點(diǎn)2修改了某些配置,然后關(guān)閉了節(jié)點(diǎn)2,啟動(dòng)節(jié)點(diǎn)1,因?yàn)楣?jié)點(diǎn)2的配置修改沒(méi)有同步到節(jié)點(diǎn)1,所以節(jié)點(diǎn)1啟動(dòng)后仍然使用舊配置文件工作,這時(shí)就會(huì)造成配置丟失,就是所謂的“健忘癥”。
3)腦裂
集群里,節(jié)點(diǎn)間需要通過(guò)某種機(jī)制(心跳)了解彼此健康狀況,以確保節(jié)點(diǎn)間協(xié)調(diào)工作,假設(shè)只是“心跳”出現(xiàn)故障,但各節(jié)點(diǎn)還在正常運(yùn)行,這時(shí)每個(gè)節(jié)點(diǎn)都認(rèn)為其他節(jié)點(diǎn)宕機(jī),自己是整個(gè)集群環(huán)境中的“唯一健在者”,自己應(yīng)該獲得整個(gè)集群的“控制權(quán)”。在集群環(huán)境中,設(shè)備都是共享的,這就意味著數(shù)據(jù)災(zāi)難,這種情況就是“腦裂”。
解決腦裂的通常辦法是使用投票算法:
集群中各節(jié)點(diǎn)需要心跳機(jī)制來(lái)通報(bào)彼此“健康狀況”,假設(shè)每收到一個(gè)節(jié)點(diǎn)的“通報(bào)”代表一票。對(duì)于一個(gè)三節(jié)點(diǎn)集群,正常運(yùn)行時(shí),每個(gè)節(jié)點(diǎn)都會(huì)有3票,假設(shè)節(jié)點(diǎn)1的心跳出現(xiàn)故障,但是節(jié)點(diǎn)1還在運(yùn)行:這時(shí)整個(gè)集群就分裂成兩個(gè)小的partition,節(jié)點(diǎn)1自己是一個(gè)partition,節(jié)點(diǎn)2和節(jié)點(diǎn)3是一個(gè)partition。這時(shí)就必須剔除一個(gè)partition,應(yīng)該剔除哪一個(gè)?
這時(shí)節(jié)點(diǎn)2和節(jié)點(diǎn)3組成的partition,每個(gè)節(jié)點(diǎn)有兩票:節(jié)點(diǎn)1自己一個(gè)partition,節(jié)點(diǎn)1只有一票。節(jié)點(diǎn)2和節(jié)點(diǎn)3組成的小集群獲得控制權(quán),而節(jié)點(diǎn)1被踢出,由節(jié)點(diǎn)2和節(jié)點(diǎn)3組成的新的集群繼續(xù)對(duì)外提供服務(wù)。
如果集群中只有兩個(gè)節(jié)點(diǎn),則就必須引入第三個(gè)設(shè)備Quorum Device。
Quorum Device通常采用共享磁盤(pán),這個(gè)磁盤(pán)叫Quorum Disk。整個(gè)Quorum Disk也代表一票。當(dāng)心跳出現(xiàn)故障時(shí),兩個(gè)節(jié)點(diǎn)同時(shí)去爭(zhēng)取Quorum Disk這一票,最早到達(dá)的請(qǐng)求最先被滿足,最后到達(dá)的節(jié)點(diǎn)就無(wú)法獲得這一票,只有一票的節(jié)點(diǎn)就會(huì)被踢出集群。
4)IO隔離
為了保證被踢出集群的節(jié)點(diǎn)不能操作共享數(shù)據(jù),這就是IO隔離要解決的問(wèn)題。
有軟硬兩種方式:
支持SCSI Reserve/Release命令的存儲(chǔ)設(shè)備,可以用SG命令實(shí)現(xiàn)。正常節(jié)點(diǎn)使用SCSI Reserve命令“鎖住”存儲(chǔ)設(shè)備,故障節(jié)點(diǎn)發(fā)現(xiàn)存儲(chǔ)設(shè)備被鎖住后,就知道自己已經(jīng)被趕出集群了,就要自行重啟,這個(gè)機(jī)制也叫自殺。
STONTH是另一種實(shí)現(xiàn)方式,直接操作電源開(kāi)關(guān)。當(dāng)一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),另一節(jié)點(diǎn)如果能偵測(cè)到,就會(huì)通過(guò)串行口發(fā)出命令,控制故障節(jié)點(diǎn)的電源開(kāi)關(guān),通過(guò)暫時(shí)斷電而后又上電的方式使得故障節(jié)點(diǎn)被重啟動(dòng),這種方式需要硬件支持。
Oracle RAC采用的是軟件方式,直接重啟故障節(jié)點(diǎn)。
5.RAC優(yōu)點(diǎn)
- 增加可用性
- 增加擴(kuò)展能力
- 增加可維護(hù)性
- 減少總持有成本
1)增加可用性
RAC確實(shí)可以有效較少計(jì)劃外宕機(jī)時(shí)間,但也不是百分百消除,讓然會(huì)有部分停止響應(yīng)時(shí)間。
當(dāng)一個(gè)節(jié)點(diǎn)或者實(shí)例Failed時(shí),RAC Database會(huì)發(fā)生Crash Recovery。在其他健康節(jié)點(diǎn)上的Oracle Clusterware軟件能夠檢查到這個(gè)節(jié)點(diǎn)或者實(shí)例Failure,并通知其他節(jié)點(diǎn)。最先察覺(jué)到發(fā)生故障的那個(gè)節(jié)點(diǎn),會(huì)讀取故障節(jié)點(diǎn)的聯(lián)機(jī)日志內(nèi)容(從最后一次檢查點(diǎn)開(kāi)始讀起),并且把這些日子在數(shù)據(jù)庫(kù)上重演,這個(gè)過(guò)程就是前滾(roll-forward),然后所有未提交的事物被回滾撤銷掉(roll-back)。在前滾和回滾過(guò)程中,整個(gè)集群處于凍結(jié)狀態(tài)forzen,這個(gè)節(jié)點(diǎn)不能處理任何請(qǐng)求,只有全部完成后,才能繼續(xù)對(duì)外提供服務(wù)。這個(gè)過(guò)程叫做“brown-out”階段。知識(shí)這個(gè)階段可能很短。
但是,RAC環(huán)境數(shù)據(jù)本身只有一份,沒(méi)有任何冗余數(shù)據(jù),同時(shí)結(jié)構(gòu)也變復(fù)雜,包括共享存儲(chǔ)、私有網(wǎng)絡(luò)、光纖網(wǎng)絡(luò)也引入了更多的故障點(diǎn)。升級(jí)也變的復(fù)雜,數(shù)據(jù)庫(kù)升級(jí)必須關(guān)閉整個(gè)數(shù)據(jù)庫(kù),不能減少計(jì)劃內(nèi)宕機(jī)時(shí)間。
2)擴(kuò)展性
通過(guò)增加資源的方式導(dǎo)致系統(tǒng)吞吐量增長(zhǎng)。
對(duì)于RAC而言,最好的擴(kuò)展能力是1.8,應(yīng)為數(shù)據(jù)庫(kù)擴(kuò)展能力很大部分取決于應(yīng)用系統(tǒng)的使用方式。
3)容易管理
原來(lái)企業(yè)中有多個(gè)數(shù)據(jù)庫(kù),通過(guò) 部署RAC把原來(lái)多個(gè)數(shù)據(jù)庫(kù)整合成一個(gè)多節(jié)點(diǎn)的RAC數(shù)據(jù)庫(kù),隨著數(shù)據(jù)庫(kù)減少,DBA管理任務(wù)自然減少。
但是RAC環(huán)境下,升級(jí)是一個(gè)很復(fù)雜的操作,其次多應(yīng)用整合到一個(gè)數(shù)據(jù)庫(kù)中,RAC宕機(jī)將影響更多的應(yīng)用系統(tǒng),計(jì)劃內(nèi)宕機(jī)時(shí)間更短,人力成本更高。
是否應(yīng)該選擇RAC,最有資格做決定是DBA自己,因?yàn)橹挥心阕约褐滥愕男枨蟆㈩A(yù)算、預(yù)期。一定要問(wèn)清自己想通過(guò)RAC解決什么問(wèn)題。RAC并不是包治百病的“萬(wàn)金油”,因此,在考慮RAC之前一定要確定你已經(jīng)考慮過(guò)其他解決方案。
一個(gè)好或者壞的系統(tǒng)都是被設(shè)計(jì)出來(lái)的,最初的視野決定了最終系統(tǒng)的負(fù)載能力。決定選擇RAC之前,一定要確保理解了RAC的優(yōu)缺點(diǎn),一定要確保其他方案無(wú)法奏效,只有RAC一條路可以走。那種單節(jié)點(diǎn)表現(xiàn)極差,并且沒(méi)有做過(guò)任何調(diào)整,就企圖用RAC解決性能問(wèn)題的,無(wú)異于自尋死路。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
轉(zhuǎn)載于:https://www.cnblogs.com/xiangqianzhang/p/9082961.html
總結(jié)
以上是生活随笔為你收集整理的集群、RAC和MAA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [Java]LeetCode138. 复
- 下一篇: IDEA引入外部jar包的方法