Oracle真正集群的出現(xiàn)是在Oracle公司收購(gòu)Rdb并吸收了相關(guān)技術(shù)優(yōu)勢(shì)后,才正在推出了屬于自己的RAC集群解決方案。RAC?和集群分類(lèi)章節(jié)提到的集群系統(tǒng)有很多相似之處,從下圖我們大概了解一下RAC集群的層次結(jié)構(gòu)和所需的軟硬件環(huán)境。
Oracle Rac 結(jié)構(gòu)
從上圖可以看出,RAC集群是由若干個(gè)物理計(jì)算機(jī)組成( 每個(gè)叫作一個(gè)節(jié)點(diǎn)),這些節(jié)點(diǎn)間通過(guò)網(wǎng)線(心跳線)連接。每個(gè)節(jié)點(diǎn)上都運(yùn)行一個(gè)Oracle實(shí)例(Instance), 這些實(shí)例通過(guò)一個(gè)集群管理軟件(Clusterware, 集群件)的協(xié)助,共同操作一個(gè)數(shù)據(jù)庫(kù)。從用戶(hù)(使用者)的視角來(lái)看,他們看到的只是一個(gè)數(shù)據(jù)庫(kù)。
我們從邏輯上可以把RAC集群分為存儲(chǔ)層、網(wǎng)絡(luò)層、集群件層、應(yīng)用層4層結(jié)構(gòu),下面我們逐一講解一下各分層的概念。
存儲(chǔ)層
Oracle RAC其實(shí)是一個(gè)多實(shí)例、單數(shù)據(jù)庫(kù)的系統(tǒng)。其中數(shù)據(jù)文件、聯(lián)機(jī)日志、控制文件等文件在集群中只有一份。集群當(dāng)中不管有多少個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)都平等地使用著同樣的數(shù)據(jù)文件,每個(gè)節(jié)點(diǎn)服務(wù)器通過(guò)光纖線連接到存儲(chǔ)上。雖然RAC中有多個(gè)實(shí)例,但是只有一個(gè)數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)就保存在共享存儲(chǔ)的磁盤(pán)上。
在Oracle中,實(shí)例和數(shù)據(jù)庫(kù)這兩個(gè)概念是不同的。實(shí)例特指由SGA內(nèi)存結(jié)構(gòu)和后臺(tái)進(jìn)程組成的運(yùn)行時(shí)環(huán)境,因此Oracle實(shí)例是一個(gè)動(dòng)態(tài)的概念,而數(shù)據(jù)庫(kù)指的是數(shù)據(jù)文件、控制文件、日志文件這些保存在存儲(chǔ)上的永久文件,是一個(gè)靜態(tài)的概念。
因此,Oracle的實(shí)例和數(shù)據(jù)庫(kù)是多對(duì)一的關(guān)系,在單實(shí)例環(huán)境中,二者是一對(duì)一的關(guān)系,所以二者經(jīng)常會(huì)混淆使用,會(huì)被認(rèn)為是同一個(gè)概念。但是在RAC集群環(huán)境中,可以有多個(gè)實(shí)例,但是數(shù)據(jù)庫(kù)就只有一個(gè),所以區(qū)分這兩個(gè)概念有重要意義。
網(wǎng)絡(luò)層
通過(guò)上圖的RAC的結(jié)構(gòu)圖,我們可以發(fā)現(xiàn)在整個(gè)RAC集群環(huán)境中,是有3個(gè)網(wǎng)絡(luò)存在的。一個(gè)是訪問(wèn)者訪問(wèn)數(shù)據(jù)庫(kù)時(shí),提供的一個(gè)公共網(wǎng)絡(luò),主要用于提供數(shù)據(jù)庫(kù)查詢(xún)和操作等服務(wù);另一個(gè)是由私有網(wǎng)卡組成的私有網(wǎng)絡(luò),用于RAC集群各個(gè)節(jié)點(diǎn)間的互聯(lián),既是心跳線;第三個(gè)是各個(gè)節(jié)點(diǎn)和存儲(chǔ)設(shè)備進(jìn)行連接的存儲(chǔ)網(wǎng)絡(luò)。
集群鍵層
Oracle在單機(jī)環(huán)境下是運(yùn)行在OS操作系統(tǒng)的內(nèi)核之上的,操作系統(tǒng)負(fù)責(zé)和硬件設(shè)備進(jìn)行交互,并通過(guò)訪問(wèn)接口。Oracle系統(tǒng)是不會(huì)直接操作硬件的,而是有操作系統(tǒng)替代完成的。
但是,到了RAC集群環(huán)境下,雖然會(huì)有多個(gè)實(shí)例(節(jié)點(diǎn)或計(jì)算機(jī)),但是Oracle的存儲(chǔ)設(shè)備是共享的。這個(gè)時(shí)候如果還依賴(lài)OS操作系統(tǒng),只能控制單機(jī)上的多個(gè)進(jìn)程間的訪問(wèn),無(wú)法實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)間的協(xié)調(diào)工作。因此,Oracle RAC引進(jìn)額外的控制機(jī)制,這個(gè)機(jī)制就是位于Oracle和OS操作系統(tǒng)之間的多了一集群管理軟件(Clusterware),它會(huì)在OS操作系統(tǒng)之前截獲請(qǐng)求,然后和其他節(jié)上的Clusterware協(xié)商,最終完上層的請(qǐng)求。
應(yīng)用層
Oracle RAC應(yīng)用層,必須要提到一個(gè)軟件CRS,CRS是Oracle Cluster Ready Service(Oracle集群就緒服務(wù))。CRS是Oracle 10gR2開(kāi)始的,用以提供標(biāo)準(zhǔn)的群集服務(wù)接口,用來(lái)搭建一般應(yīng)用程序的高可用集群。之后從Oracle 10.2版本開(kāi)始把CRS改名為上面的Oracle Clusterware。并且這個(gè)產(chǎn)品不局限于搭建Oracle數(shù)據(jù)庫(kù)的集群,其它軟件可以借助其API搭建集群功能。
集群環(huán)境之所以能夠提供高可用性,是因?yàn)榧很浖?CRS)對(duì)運(yùn)行于其上的應(yīng)用進(jìn)行監(jiān)視,并在發(fā)生異常時(shí)進(jìn)行重啟、切換等干預(yù)手段,這些被CRS監(jiān)控的對(duì)象就叫作CRS Resource。可以簡(jiǎn)單的理解,CRS Resource通常是一個(gè)進(jìn)程或者有一組進(jìn)程組成的服務(wù)。通過(guò)這些服務(wù)提供應(yīng)用。
其中,RAC集群的CRS Resource主要有GSD ( Global Service Daemon)、ONS (Oracle Notification Service Daemon)、VIP、 Database、 Instance、 Listener 和Service。
總結(jié):
本節(jié)主要大概介紹Oracle RAC的結(jié)構(gòu)和邏輯層次,主要目的為了讀者可以對(duì)Oracle RAC集群有一個(gè)宏觀的了解。