您好,登錄后才能下訂單哦!
Oracle 在12c中使用hub-and-spoken技術實現了Flex Cluster的功能(即RAC集群中的每個節點不再需要既運行ASM實例又運行DB實例,各節點可以扮演不同的角色)。相比12c以前的版本,該功能使集群規模的擴大和縮減變得更加靠譜。原因如下:
集群中各節點間網絡的互相干擾變得更少。
關鍵的集群組件爭用更少,如OCR, VOTING DISK。
一個Flex Cluster中可以包含兩類節點,分別是hub node和leaf node。
Hub Node
這種節點幾乎完全等價于12c以前版本的傳統RAC節點,在12c中這種節點就是集群的核心(為什么說是核心呢?因為后面會介紹12c flex cluster中的非核心節點——leaf node)。
每個hub node之間通過私網連接,而且需要配置ssh對等性。
每個節點需要訪問共享存儲,因為ocr voting都依賴于共享存儲。
hub node上既運行ASM實例又運行db實例。
每個flex cluster至少一個hub node最多64個hub node。
Leaf Node
相比hub node , leaf node對于集群來說不是那么核心,與集群耦合度很低,而且leaf node之間不需要互聯。
每個leaf node通過一個hub node連接集群并獲取數據。
雖然leaf node不要求直接訪問共享存儲,但最好還是連上共享存儲,因為說不準未來哪天就要把這個leaf node轉為hub node使用。
(這里譯者補充下:雖然leaf node啟動集群件是不依賴共享存儲的,但當leaf node以只讀打開了某數據庫時,也就是這個leaf node上運行著數據庫實例時,這個leaf node就變成了reader node,官方明確說了reader node是必須連接共享存儲的。官方連接:http://docs.oracle.com/database/122/RILIN/running-database-instances-on-leaf-nodes.htm#RILIN-GUID-35BDCD41-375D-4EB2-B0FC-49345AF6C572)
他們上面運行著輕量版的集群件。
leaf node上面不能運行ASM實例,也不能在上面建庫,因為上面運行的實例打開方式只能是只讀的。
leaf node上可運行多種應用,例如中間件、EBS、IDM等,leaf node上的應用會在leaf node掛掉后自動切換到其他leaf node。
一個flex cluster中可包含0個或多個leaf node。
leaf node和hub node擁有相同的公網和私網。
即使flex cluster中沒有一個leaf node, hub node也可以正常的像傳統rac節點一樣工作。但如果flex cluster中只有leaf node沒有一個hub node是萬萬不可的,因為leaf node需要通過hub node上的asm實例獲取數據。
當集群件啟動在leaf node上時,leaf node就會根據GNS信息查找所有hub node,然后選擇其中一個hub node來獲取數據(配置GNS是使用leaf node的重要前提)。一個hub node同時可能被0個或多個leaf node連接,而一個leaf node同時只能連接一個hub node。hub node和leaf node之間也會交換心跳信息,只有這樣leaf node才能加入集群并作為集群的一部分。
標準集群可無痛轉換為flex cluster,但flex cluster無法轉為標準集群,除非你重新配置(約等于重裝)。
當作為集群的一部分的某hub node掛了,將發生什么?
當發生如下情況時,hub node會被從集群中移除:
被驅逐
服務器關機
手動停止Oracle集群件
這種情況發生時,連接著這個hub node的leaf node會自動挑一個活著的hub node來作為數據源。 這篇文章中,我會論證:
如何確定leaf node連的是那個hub node?
當leaf node連接的hub node掛了后,這個leaf node如何進行故障遷移?
為了更好的闡述,我搭建了如下結構的12.1.0.2c的flex cluster:
hub node
host01
host02
host03
leaf node
host04
host05
確定hub node host01和leaf node host04是活著的:
[root@host01 log]# crsctl get node role status -all
Node 'host01' active role is 'hub'
Node 'host04' active role is 'leaf'
因為當前host01是集群中唯一活著的hub node,所以host04一定連的是host01。而且,host04的警告日志中也可以證明這個事實:
這時啟動host02和host05:
[root@host01 log]# crsctl get node role status -all
Node 'host01' active role is 'hub'
Node 'host02' active role is 'hub'
Node 'host04' active role is 'leaf'
Node 'host05' active role is 'leaf'
為了確定host05連得是那個hub node,我們看下ocssdrim進程的trace文件:
[root@host05 trace]#export ORACLE_BASE=/u01/app/grid
[root@host05 ~]# cat $ORACLE_BASE/diag/crs/host05/crs/trace/ocssdrim.trc |grep 'Sending a ping msg to' | tail -1
2016-05-04 11:12:01.008283 : CSSD:1086187840: clssbnmc_PeriodicPing_CB: Sending a ping msg to host host01, number 1, using handle (0x14055d0) last msg to hub at 4294948750, connection timeout at 11454, current time 4294951260]]
我們可以看到host05連得也是host01。
讓我們停掉host01上的集群件,來確定所有leaf node都能故障切換到集群中其他存活的hub node,在這里就是host02:
[root@host01 log]# crsctl stop crs
[root@host02 ~]# crsctl get node role status -all
Node 'host02' active role is 'hub'
Node 'host04' active role is 'leaf'
Node 'host05' active role is 'leaf'
確定host04切到了host02:
[root@host04 ~]# cat $ORACLE_BASE/diag/crs/host04/crs/trace/ocssdrim.trc |grep 'Destroying connection' | tail -1
2016-05-04 11:17:31.932770 : CSSD:1085761856: clssbnmConnDestroy: Destroying connection object (0x1061200) for host host01
[root@host04 ~]# cat $ORACLE_BASE/diag/crs/host04/crs/trace/ocssdrim.trc |grep 'Sending a ping msg to' | tail -1
2016-05-04 11:18:21.860771 : CSSD:1085761856: clssbnmc_PeriodicPing_CB: Sending a ping msg to host host02, number 2, using handle (0x17e2fe0) last msg to hub at 1404044, connection timeout at 1434044, current time 1405324
確定host05切到了host02:
[root@host05 ~]# cat $ORACLE_BASE/diag/crs/host05/crs/trace/ocssdrim.trc |grep 'Destroying connection' | tail -1
2016-05-04 11:17:31.873993 : CSSD:1086187840: clssbnmConnDestroy: Destroying connection object (0x16979f0) for host host01
[root@host05 ~]# cat $ORACLE_BASE/diag/crs/host05/crs/trace/ocssdrim.trc |grep 'Sending a ping msg to' | tail -1
2016-05-04 11:17:36.751628 : CSSD:1086187840: clssbnmc_PeriodicPing_CB: Sending a ping msg to host host02, number 2, using handle (0x10950b0) last msg to hub at 318184, connection timeout at 348184, current time 319664
總 結
12c引入的flex cluster有兩種節點,hub node和leaf node。
鑒于hub node可以訪問共享存儲,leaf node不直接訪問共享存儲,而是通過某個hub node連入集群。
當leaf node上的集群件啟動時,leaf node自動使用GNS來發現所有hub node,然后通過其中一個hub node連入集群。
如果hub node掛了,那么通過這個hub node訪問集群的leaf node會自動切換至某存活的hub node繼續訪問集群。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。