今天下了一份mysql cluster architecture overview,大致了解下mysql的cluster功能
1.mysql cluster現(xiàn)在主要是解決ha(高可用性)的問(wèn)題,并不是完全的支持ha,load balance的cluster.
2.mysql cluster構(gòu)架是建立在share nothing的基礎(chǔ)上的,這也應(yīng)該是cluster發(fā)展的趨勢(shì)吧,否則,要使用共享磁盤(pán)的話,代價(jià)太昂貴了.
3.mysql cluster只適用于mysql的ndb storage,mysql的存儲(chǔ)引擎很多,不同的引擎適用于不同的業(yè)務(wù),以后還得花些時(shí)間研究下這些引擎的特征
4.mysql cluster體系把一組計(jì)算機(jī)節(jié)點(diǎn)分為三大類,分別是sql節(jié)點(diǎn),storage存儲(chǔ)節(jié)點(diǎn),mgmt管理節(jié)點(diǎn).
5.存儲(chǔ)節(jié)點(diǎn):mysql cluster在各存儲(chǔ)節(jié)點(diǎn)之間復(fù)制數(shù)據(jù),這樣當(dāng)任意一個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)生意外的時(shí)候,始終有另外的存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)有相同的數(shù)據(jù).如果節(jié)點(diǎn)多于兩個(gè)的話,這個(gè)復(fù)制的性能不知道是否會(huì)降低?因?yàn)檫€不知道它的復(fù)制原理,也不能妄下結(jié)論.數(shù)據(jù)庫(kù)事務(wù)是由存儲(chǔ)節(jié)點(diǎn)來(lái)保證的,任一個(gè)事務(wù)產(chǎn)生的數(shù)據(jù)變化會(huì)同時(shí)反映到所有存儲(chǔ)節(jié)點(diǎn)中;當(dāng)在一個(gè)事務(wù)執(zhí)行的時(shí)候,由于其中一個(gè)存儲(chǔ)節(jié)點(diǎn)失敗,那么會(huì)導(dǎo)致整個(gè)事務(wù)的回退.
6.管理節(jié)點(diǎn):一般在一個(gè)mysql cluster體系中只需要一個(gè)管理節(jié)點(diǎn).它僅用于cluster的啟動(dòng)及cluster的系統(tǒng)參數(shù)配置,因此,存儲(chǔ)節(jié)點(diǎn)是可以在沒(méi)有管理節(jié)點(diǎn)的情況下正常運(yùn)行的.(恩,可以節(jié)省一臺(tái)機(jī)器^_^,其實(shí)是不可以的,因?yàn)閟ql節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)在啟動(dòng)的時(shí)候需要連接到管理節(jié)點(diǎn)讀取cluster的配置信息,但是在sql節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)啟動(dòng)完成后,管理節(jié)點(diǎn)是可以停止的)
7.sql節(jié)點(diǎn):就是mysqld服務(wù)器了.應(yīng)用程序通過(guò)sql節(jié)點(diǎn)訪問(wèn)存儲(chǔ)節(jié)點(diǎn)中的數(shù)據(jù).在mysql cluster體系中,任意一個(gè)sql節(jié)點(diǎn)都是連接到所有的存儲(chǔ)節(jié)點(diǎn)的.所以當(dāng)任意一個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)生意外的時(shí)候,sql節(jié)點(diǎn)都可以把請(qǐng)求轉(zhuǎn)移到另一個(gè)存儲(chǔ)節(jié)點(diǎn)執(zhí)行
8.mysql cluster的sql節(jié)點(diǎn),存儲(chǔ)節(jié)點(diǎn)可以動(dòng)態(tài)增加,減少,這可以管理節(jié)點(diǎn)配置
9.存儲(chǔ)節(jié)點(diǎn)的故障檢測(cè):mysql cluster通過(guò)兩種方式來(lái)檢測(cè)故障,
一是通訊丟失,可以通過(guò)tcp,共享內(nèi)存等方式在各存儲(chǔ)節(jié)點(diǎn)之間通訊來(lái)偵測(cè)節(jié)點(diǎn)是否正常這種方式是最快的故障檢測(cè)方式,
二是心跳失敗,通訊丟失的檢測(cè)方法在某些特殊情況下無(wú)效,例如磁盤(pán)故障等問(wèn)題.所有的存儲(chǔ)節(jié)點(diǎn)通過(guò)組成一個(gè)環(huán)路,每個(gè)節(jié)點(diǎn)向下一個(gè)節(jié)點(diǎn)發(fā)送心跳信號(hào),如果下一個(gè)節(jié)點(diǎn)沒(méi)有收到心跳信號(hào),則認(rèn)為上一個(gè)存儲(chǔ)節(jié)點(diǎn)故障,并依次向下下個(gè)節(jié)點(diǎn)廣播此故障信息