1. 程式人生 > >ORACLE GI CSS(集群同步服務)

ORACLE GI CSS(集群同步服務)

檢查 也會 節點集群 方案 一段時間 操作 心跳線 一秒 流程

CSS啟動流程

1)操作系統被啟動,並調用/etc/inittab文件中GI相關的腳本。

2)ohasd.bin守護進程被啟動,該進程負責啟動所有的代理進程,包括oracssdagent_root代理進程。

3)oracssdagent_root代理進程啟動ocssd.bin守護進程。

4)ocssd.bin和gpnpd.bin通信,獲得構建集群的基本信息。

5)ocssd.bin和gipcd.bin通信,獲得本地節點和遠程節點的私網連接信息。

6)在獲得了步驟4與5中提到的信息後,ocssd.bin和遠程節點的ocssd.bin通信,並通過訪問vf的lease block獲得本地節點的節點編號。

7)該節點加入集群。


集群一致性

集群一致性就是指集群中每個成員能夠了解其他成員的狀態,而且每個成員獲得的集群中其他節點的狀態和集群中節點成員列表信息是一致的。


實現集群一致性的三種心跳機制

1)確認節點與節點間的連通性,節點之間能夠了解彼此的狀態(網絡心跳)。

2)用一個共享的位置來保存節點之間的連通性信息,在集群需要進行重新配置時,能夠做出正確的決定並記錄集群最新的狀態(磁盤心跳)。

3)本地節點自我監控,當本地節點出現問題時能夠主動離開集群,避免不一致的產生(本地心跳)。



網絡心跳(NHB)

ocssd.bin守護進程每秒鐘會向集群的其他節點發送網絡心跳,例如一個4節點集群,集群的每一個節點每一秒都會向集群中的其他三個節點發送網絡心跳信息,這也意味著每個節點每一秒也會收到集群中其他節點發送的網絡心跳。


ocssd.bin的線程實現

1)發送線程:該線程每秒鐘向集群中的所有節點發送網絡心跳信息

2)派遣線程:該線程負責接收從遠程節點傳遞過來的信息,之後根據信息的種類發送給相關的線程進行處理

3)分析線程:該線程會分析收到的網絡心跳信息並進行處理,如果發現集群的某一個節點持續丟失網絡心跳,就會通知集群進行重新配置

4)集群重新配置線程:當分析線程發現集群需要進行重新配置時,該線程負責對集群進行重新配置


丟失網絡心跳導致的重新配置步驟

1)當集群的某一個節點連續一段時間(misscount)丟失網絡心跳之後,分析線程決定發起集群重新配置。

2)集群的重新配置管理節點(簡稱RM節點,通常是集群中節點號最小的節點)向集群中的所有節點發送重新配置消息,所有收到此消息的節點會回復該消息,並通知RM節點自己的狀態。

3)接下來,RM節點基於每個節點的狀態進行投票並檢查是否有腦裂會發生。

4)對於檢查腦裂,RM會查看網絡心跳無法訪問的節點的磁盤心跳信息,確認這個節點的狀態,如果發現無法訪問的節點狀態也是正常的,那麽就可能發生腦裂,需要避免 。

5)RM節點向表決盤的kill block中寫入有毒(poison package)的信息,需要重啟的節點在訪問表決盤時讀取到有毒信息,完成對本節點的重啟。 (君讓臣死,臣不得不死)

6)RM節點修改集群節點列表(主要是在表決盤中),重新配置完成。


腦裂是指集群的某些節點間的網絡心跳丟失,但是節點的磁盤心跳正常的情況。當腦裂出現後,集群會分裂成為若幹個子集群,對於這種情況的出現,集群需要進行重新配置,基本原則是:節點數多的子集群存活,如果子集群包含的節點數相同,那麽包含最小編號節點的子集群存活。 (一山不容二虎)



磁盤心跳(DHB)

磁盤心跳的主要目的是當集群發送腦裂時幫助制定腦裂解決方案,集群的每一個節點每秒鐘都會向集群的所有vf註冊本地節點的磁盤心跳信息,同時也會將自己能夠聯系到的集群中其他信息,或者說本地節點認為集群中的成員列表信息寫入vf中,一旦發生腦裂,css的重新配置線程可以通過vf中的信息了解集群中節點之間的連通性,從而決定集群分裂成幾個子集群,以及每個子集群包含的節點情況和每個節點的狀態。


ocssd.bin線程實現

1)磁盤心跳線程:該線程負責向集群的vf中發送磁盤心跳信息,同時,該線程也負責讀取vf中的kill block信息,以確定本地節點是否需要重新啟動。

2)磁盤心跳監控線程:該線程負責確定磁盤心跳線程是否能夠正確地發送磁盤心跳,並且能夠正確地讀取kill block中的信息。

3)kill block線程:該線程負責監控vf的kill block信息。


如果某個節點在short i/o timeout時間內一直無法訪問某一個vf,對應的vf會被離線,當大多數的vf(vf數量/2+1)被離線時,該節點會被自動重啟,因此oracle建議配置奇數個vf。



本地心跳(LHB)

本地心跳的主要目的是監控ocssd.bin進程以及本地節點的狀態,在每一秒鐘,在發送網絡心跳的同時(同一個線程)向caadagent和cssdmonitor發送本地ocssd.bin進程的狀態,如果本地心跳沒有問題,cssdagent就認為ocssd.bin進程正常,反之,如果ocssd.bin持續丟失本地心跳(misscount),ocssdagent就認為本地節點的ocssd.bin進程出現了問題,並重啟該節點。




ORACLE GI CSS(集群同步服務)