bebeOracle CSSD(Cluster ServicesSynchronization Daemon)進(jìn)程通過兩個(gè)互相獨(dú)立的心跳信號(hào)來監(jiān)控集群節(jié)點(diǎn)的健康狀況:network heart beat和disk heart beat
在彌渡等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都營(yíng)銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,彌渡網(wǎng)站建設(shè)費(fèi)用合理。網(wǎng)絡(luò)心跳:集群里每一個(gè)節(jié)點(diǎn)的CSSD進(jìn)程的一個(gè)線程每秒會(huì)通過inteconnect發(fā)送一個(gè)TCP協(xié)議心跳信號(hào)給RAC里面的所有節(jié)點(diǎn)(包括自己)。如果心跳信號(hào)傳輸出現(xiàn)問題,TCP協(xié)議的自我矯正機(jī)制會(huì)重新傳送數(shù)據(jù)包。這種情況下,oracle不會(huì)關(guān)注傳輸細(xì)節(jié)。
磁盤心跳:集群里每一個(gè)節(jié)點(diǎn)的CSSD進(jìn)程會(huì)在voting磁盤的特定位置的數(shù)據(jù)塊通過讀寫數(shù)據(jù)維持心跳信號(hào)。此外,每個(gè)節(jié)點(diǎn)還會(huì)監(jiān)控其它節(jié)點(diǎn)CSSD進(jìn)程維護(hù)的心跳信號(hào)數(shù)據(jù)塊。如果發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)在指定的時(shí)間內(nèi)沒有寫入磁盤心跳,這個(gè)節(jié)點(diǎn)就被判決為死亡。如果一個(gè)節(jié)點(diǎn)處于未知狀態(tài),其它節(jié)點(diǎn)也會(huì)被通過更新它的voting disk上的kill block狀態(tài)的方式把它驅(qū)逐出集群。
總的來說,網(wǎng)絡(luò)心跳每秒都會(huì)發(fā)起,如果一個(gè)節(jié)點(diǎn)超出了參數(shù)css_miscount time設(shè)定的時(shí)間沒有響應(yīng),就會(huì)被踢出集群。類似的,集群里的每個(gè)節(jié)點(diǎn)每秒讀寫voting disk特定區(qū)域,出現(xiàn)超時(shí)響應(yīng)的節(jié)點(diǎn)也會(huì)被踢出集群。下面是節(jié)點(diǎn)面臨的心跳可能出現(xiàn)的狀況及后果:
腦裂:在RAC環(huán)境里,所有的oracle實(shí)例都是通過高速私有網(wǎng)絡(luò)互相通訊的。這個(gè)私有網(wǎng)絡(luò)的鏈路都應(yīng)該配置成冗余的,并且僅用于實(shí)例之間的oracle數(shù)據(jù)塊傳輸。以含有運(yùn)行在兩臺(tái)機(jī)器上的2個(gè)實(shí)例組成的RAC集群為例,當(dāng)RAC集群里服務(wù)器運(yùn)行正常,兩個(gè)實(shí)例本身也運(yùn)行正常的情況下,兩個(gè)oracle實(shí)例不能夠通過私有網(wǎng)絡(luò)互相通訊時(shí),如果不做預(yù)防,兩個(gè)實(shí)例會(huì)各自獨(dú)立的運(yùn)行并對(duì)外提供服務(wù)。由于兩個(gè)實(shí)例失去了互相之間的通訊,都會(huì)認(rèn)為對(duì)方已死,從而不再使用原有的保護(hù)共享數(shù)據(jù)的機(jī)制,這會(huì)導(dǎo)致共享數(shù)據(jù)混亂。這就是腦裂。
IOfencing:如果操作系統(tǒng)正常但是oracle實(shí)例出現(xiàn)故障導(dǎo)致時(shí),recovery進(jìn)程可能會(huì)把之前故障實(shí)例殘留的寫操作執(zhí)行。由于在這種情況下寫操作無法保持正確的寫入順序,他們可能會(huì)導(dǎo)致數(shù)據(jù)混亂,所以必須阻止。所以,在集群環(huán)境里,如果一個(gè)節(jié)點(diǎn)故障,必須阻止它對(duì)共享存儲(chǔ)的寫操作。這種方法稱之為IO fencing。
簡(jiǎn)單多數(shù)原則:為了維持RAC集群正常運(yùn)行,配置的仲裁盤必須有一半以上數(shù)量正常運(yùn)行。
下面兩個(gè)實(shí)例用來理解當(dāng)心跳出現(xiàn)問題時(shí),仲裁盤的作用機(jī)制。
例子1,如下圖,三個(gè)節(jié)點(diǎn)的集群,配有3個(gè)仲裁盤. Node3與其它兩個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)通訊(network heartbeat)中斷。但是,CSSD進(jìn)程通過讀仲裁盤狀態(tài)發(fā)現(xiàn)所有的節(jié)點(diǎn)都可以寫仲裁盤,這說明出現(xiàn)了腦裂。于是節(jié)點(diǎn)1和節(jié)點(diǎn)2就會(huì)更新仲裁盤上的節(jié)點(diǎn)3 kill block狀態(tài)。然后節(jié)點(diǎn)3的CSSD進(jìn)程通過讀仲裁盤上對(duì)應(yīng)的kill block,知道自己應(yīng)該退出集群。于是執(zhí)行IO fencing,然后關(guān)閉自己。
例子2,配有3個(gè)仲裁盤的雙節(jié)點(diǎn)集群,disk heartbeat出現(xiàn)問題,導(dǎo)致節(jié)點(diǎn)1可以訪問2個(gè)仲裁盤,節(jié)點(diǎn)2可以訪問1個(gè)仲裁盤。這時(shí)基于簡(jiǎn)單多數(shù)原則,節(jié)點(diǎn)1(兩個(gè)仲裁盤)會(huì)發(fā)出自殺指令給節(jié)點(diǎn)2。這樣節(jié)點(diǎn)2就會(huì)退出集群。
例子2中更進(jìn)一步的問題,如果出現(xiàn)一個(gè)仲裁盤故障導(dǎo)致兩個(gè)節(jié)點(diǎn)都不能訪問它,但是另外兩個(gè)仲裁盤對(duì)兩個(gè)節(jié)點(diǎn)都可訪問。這種情況下,如何判定該退出哪個(gè)節(jié)點(diǎn)?此時(shí),由于兩個(gè)節(jié)點(diǎn)可以訪問的仲裁盤滿足簡(jiǎn)單多數(shù)原則,如果此時(shí)Network heartbeat正常,RAC會(huì)正常運(yùn)行,不會(huì)踢出任何一個(gè)節(jié)點(diǎn)。如果不幸,又有一個(gè)仲裁盤故障導(dǎo)致它不能被兩個(gè)node訪問,又會(huì)發(fā)生什么?
此時(shí),網(wǎng)絡(luò)正常,但是仲裁盤低于簡(jiǎn)單多數(shù),所以RAC必然重構(gòu),但是兩個(gè)節(jié)點(diǎn)條件一致。RAC會(huì)選擇保留最低節(jié)點(diǎn)號(hào)的節(jié)點(diǎn),在這個(gè)案例中,就是node1被保留,node2被踢出。
本文大部分內(nèi)容來自需要科學(xué)上網(wǎng)的英文網(wǎng)站https://nitishanandsrivastava.wordpress.com/,我對(duì)其做了裁剪和引申。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。