oracle集群
Oracle RAC是業(yè)界最流行的產(chǎn)品。其架構(gòu)的最大特點是共享存儲架構(gòu)(Shared-disk),整個RAC集群是建立在一個共享的存儲設(shè)備之上的,節(jié)點之間采用 高速網(wǎng)絡(luò)互連。在 Oracle RAC 環(huán)境中,每個 Oracle 數(shù)據(jù)塊都被賦予一個(且只有一個)“主”Oracle RAC 節(jié)點。該 Oracle RAC 節(jié)點的全局緩存服務(wù) (GCS) 負(fù)責(zé)管理對這些數(shù)據(jù)塊集的訪問。當(dāng)其中一個 Oracle 節(jié)點需要訪問某個 Oracle 數(shù)據(jù)塊時,它必須首先與該數(shù)據(jù)塊協(xié)商。然后,該主節(jié)點的 GCS 或者指示請求的 Oracle 節(jié)點從磁盤中獲取該數(shù)據(jù)塊,或者指示該Oracle 數(shù)據(jù)塊的當(dāng)前持有者將被請求的數(shù)據(jù)塊發(fā)送到請求節(jié)點。Oracle 嘗試跨所有 RAC 節(jié)點統(tǒng)一分發(fā)該數(shù)據(jù)塊的所有權(quán)。在 Oracle RAC 環(huán)境中,數(shù)據(jù)塊大致相等的所有節(jié)點都將被指定為主節(jié)點。(如果 Oracle RAC 節(jié)點數(shù)是 Oracle 數(shù)據(jù)塊數(shù)的約數(shù),則所有 RAC 節(jié)點都是具有同樣數(shù)量的數(shù)據(jù)塊的主節(jié)點。)
mysql集群
MySQL cluster和Oracle RAC完全不同,它采用Shared-nothing架構(gòu)。整個集群由管理節(jié)點(ndb_mgmd),處理節(jié)點(mysqld)和存儲節(jié)點(ndbd)組 成,不存在一個共享的存儲設(shè)備。MySQL cluster主要利用了NDB存儲引擎來實現(xiàn),NDB存儲引擎是一個內(nèi)存式存儲引擎,要求數(shù)據(jù)必須全部加載到內(nèi)存之中。數(shù)據(jù)被自動分布在集群中的不同存 儲節(jié)點上,每個存儲節(jié)點只保存完整數(shù)據(jù)的一個分片(fragment)。同時,用戶可以設(shè)置同一份數(shù)據(jù)保存在多個不同的存儲節(jié)點上,以保證單點故障不會造成數(shù)據(jù)丟失。MySQL cluster的優(yōu)點在于其是一個分布式的數(shù)據(jù)庫集群,處理節(jié)點和存儲節(jié)點都可以線性增加,整個集群沒有單點故障,可用性和擴展性都可以做到很高,更適合 OLTP應(yīng)用。但是它的問題在于:1.NDB存儲引擎必須要求數(shù)據(jù)全部加載到內(nèi)存之中,限制比較大,但是目前NDB新版本對此做了改進,允許只在內(nèi)存中加 載索引數(shù)據(jù),數(shù)據(jù)可以保存在磁盤上。2.目前的MySQL cluster的性能還不理想,因為數(shù)據(jù)是按照主鍵hash分布到不同的存儲節(jié)點上,如果應(yīng)用不是通過主鍵去獲取數(shù)據(jù)的話,必須在所有的存儲節(jié)點上掃描, 返回結(jié)果到處理節(jié)點上去處理。而且,寫操作需要同時寫多份數(shù)據(jù)到不同的存儲節(jié)點上,對節(jié)點間的網(wǎng)絡(luò)要求很高。