本著一顆不斷學(xué)習(xí)新技術(shù)的心態(tài)(好吧,其實(shí)這個(gè)技術(shù)不新车胡,只是我沒有接觸過而已),所以今天下午就研究一下mysql集群,順便在windows搭建起來(下一步計(jì)劃折騰一下linux)睛榄。
一、mysql集群的概念
1. 管理節(jié)點(diǎn):除了管理下面兩個(gè)節(jié)點(diǎn)以外想帅,還要操心集群日志场靴,配置等東西。原則上只有一個(gè)就好了港准,掛了就完蛋了旨剥。
2. 數(shù)據(jù)節(jié)點(diǎn):存儲(chǔ)數(shù)據(jù)
3. sql節(jié)點(diǎn):向數(shù)據(jù)節(jié)點(diǎn)提交sql請(qǐng)求
其他的概念就先不詳細(xì)說明了,因?yàn)槲乙膊皇呛芮宄?/p>
二浅缸、準(zhǔn)備工具
1. 集群版mysql轨帜。
? ?下載地址:?傳送門?。?
2. 因?yàn)樵O(shè)備有限衩椒,所以就兩臺(tái)pc就好了蚌父,具體用途如下:
?管理節(jié)點(diǎn): A地址
?數(shù)據(jù)節(jié)點(diǎn): A地址 & B地址
sql節(jié)點(diǎn): A地址 & B地址
所以,在啟動(dòng)管理節(jié)點(diǎn)的時(shí)候毛萌,可能會(huì)出現(xiàn)警告苟弛。(誰叫你窮呢,只要兩臺(tái)機(jī)器)
三膏秫、準(zhǔn)備工作
1. 在管理節(jié)點(diǎn)(A主機(jī))的c:\mysql\bin下面新建兩個(gè)文件夾cluster-logs和config。前者用來存儲(chǔ)日志做盅,后者存放配置文件
2. 在config文件夾新建兩個(gè)文件config.ini和my.ini荔睹。
(配置文件的格式有點(diǎn)亂啊狸演。。僻他。)
my.ini
[mysql_cluster]
#?Options?for?management?node?process
config-file=C:/mysql/bin/config/config.ini
config.ini
[ndbd default]
#?Options?affecting?ndbd?processes?on?all?data?nodes:
NoOfReplicas=2??????????????????????#?Number?of?replicas
DataDir=C:/mysql/bin/cluster-data???#?Directory?for?each?data?node's?data?files
#?Forward?slashes?used?in?directory?path,
#?rather?than?backslashes.?This?is?correct;
#?see?Important?note?in?text
DataMemory=80M??????????????????????#?Memory?allocated?to?data?storage
IndexMemory=18M?????????????????????#?Memory?allocated?to?index?storage
#?For?DataMemory?and?IndexMemory,?we?have?used?the
#?default?values.?Since?the?"world"?database?takes?up
#?only?about?500KB,?this?should?be?more?than?enough?for
#?this?example?Cluster?setup.
[ndb_mgmd]
#?Management?process?options:
HostName=A???????????#?Hostname?or?IP?address?of?management?node
DataDir=C:/mysql/bin/cluster-logs???#?Directory?for?management?node?log?files
[ndbd]
#?Options?for?data?node?"A":
HostName=A?????????????#?Hostname?or?IP?address
[ndbd]
#?Options?for?data?node?"B":
HostName=B????????????#?Hostname?or?IP?address
[mysqld]
#?SQL?node?A?options:
HostName=A??????????????#?Hostname?or?IP?address
[mysqld]
#?SQL?node?B?options:
HostName=B???????????#?Hostname?or?IP?address
這兩個(gè)文件的意思還是挺簡(jiǎn)單明了的宵距。這里稍微講一下config.ini文件。NoOfReplicas的值吨拗,根據(jù)數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)來填寫就好满哪。當(dāng)然,也可以小于這個(gè)數(shù)劝篷,只是可能會(huì)產(chǎn)生數(shù)據(jù)不一致的情況而已(我其實(shí)還不是和清楚哨鸭,以后再補(bǔ)充)。還有娇妓,上面提到一個(gè) C:/mysql/bin/cluster-data 文件夾像鸡,新建一個(gè)就好,用來存放數(shù)據(jù)文件的哈恰。
3. 配置好A主機(jī)后只估,將整個(gè)mysq文件夾同步到B主機(jī)即可(不怕麻煩的話,可以自行再安裝一份)
四着绷、部署
mysql集群的啟動(dòng)順序如下:
管理節(jié)點(diǎn)---》數(shù)據(jù)節(jié)點(diǎn)----》sql節(jié)點(diǎn)
注意蛔钙,以下步驟,最好使用root權(quán)限啟動(dòng)cmd窗口荠医。
1. 啟動(dòng)管理節(jié)點(diǎn)
執(zhí)行命令: c:\mysql\bin\ndb_mgmd.exe --configdir=c:\mysql\bin\config --config-file=c:\mysql\bin\config\config.ini --ndb-nodeid=1 --reload –initial
這里指定了配置文件夾吁脱,配置文件和節(jié)點(diǎn)id。
突然想到一個(gè)事情娃胆,如果啟動(dòng)不成功遍希,只要清理掉config文件夾下面的 非配置文件,然后重新啟動(dòng)即可缕棵。
2. 啟動(dòng)數(shù)據(jù)節(jié)點(diǎn)
執(zhí)行命令:c:\mysql\bin\ndbd.exe --ndb-connectstring=A主機(jī)地址 --initial-start 孵班。網(wǎng)上很多教程會(huì)忽略參數(shù) ?--initial-start ,你可以先不用招驴,出現(xiàn)問題的時(shí)候再回來加上篙程。這個(gè)地方坑了我好久,總是出現(xiàn)莫名其妙的錯(cuò)誤别厘,后來在一個(gè)同事的幫忙下才解決(在ndbd --help里面找到的虱饿,我的腦子短路了沒有留意這里)。
3. 啟動(dòng)sql節(jié)點(diǎn)
執(zhí)行命令: c:\mysql\bin\mysqld.exe --ndbcluster --ndb-connectstring=A主機(jī)地址 --console。 這里開啟集群模式氮发,連接的是A主機(jī)渴肉。
4. 至此,應(yīng)該是成功了爽冕,如果沒有明顯報(bào)錯(cuò)的話(這句話好像有點(diǎn)廢仇祭。。颈畸。)
我們可以再開一個(gè)窗口乌奇,觀察連接情況。執(zhí)行命令: c:\mysql\bin\ndb_mgm眯娱,連接成功后礁苗,鍵入 show.
如果顯示失敗什么之類的,自行面壁去徙缴。试伙。。這是管理節(jié)點(diǎn)的情況于样,可以進(jìn)行對(duì)節(jié)點(diǎn)的操作疏叨,例如kill一個(gè)節(jié)點(diǎn)之類的,我沒去了解百宇,不懂考廉。下次再了解秘豹。
五携御、測(cè)試集群時(shí)候成功
1. 在A節(jié)點(diǎn)創(chuàng)建數(shù)據(jù),然后在B節(jié)點(diǎn)觀察既绕,看看會(huì)不會(huì)同步過來啄刹。至于怎么創(chuàng)建,我就不說了凄贩。這里有一點(diǎn)需要注意的是誓军,一開始我創(chuàng)建的數(shù)據(jù)庫(kù)會(huì)同步,但是數(shù)據(jù)表卻沒反應(yīng)疲扎。有點(diǎn)坑昵时,其實(shí)也正常,不然數(shù)據(jù)可能會(huì)亂套了椒丧。在建表的時(shí)候壹甥,只需要在sql語(yǔ)句末尾加上 engine=ndbcluster 即可,表示這個(gè)數(shù)據(jù)表參與集群活動(dòng)壶熏,不然數(shù)據(jù)表不會(huì)同步的句柠。
2. 在我的觀察下,顯示是成功的。
六溯职、總結(jié)遇到的坑以及下一步的去向
現(xiàn)在看來精盅,這個(gè)環(huán)境的搭建真的很簡(jiǎn)單,但是總會(huì)遇到各種亂七八糟的一臉蒙蔽的錯(cuò)誤谜酒。
1. 數(shù)據(jù)節(jié)點(diǎn)連接不上的時(shí)候叹俏,可以上網(wǎng)查詢答案,或者查看該命令的用法(command --help)僻族,或許可以找到答案她肯。我發(fā)現(xiàn)自己的解決能力真的很一般。
2. 雖然搭建好這個(gè)東西鹰贵,但是還有一大堆的事情完全不了解晴氨。譬如,如何管理節(jié)點(diǎn)碉输,如何備份籽前,如何負(fù)載均衡。敷钾。枝哄。出現(xiàn)異常如何快速定位錯(cuò)誤并及時(shí)解決。還有很長(zhǎng)很長(zhǎng)的路要走阻荒。
3. 對(duì)于線上的項(xiàng)目挠锥,一般不會(huì)使用windows作為服務(wù)器,也不會(huì)將msql部署在win平臺(tái)上侨赡,所以下一步要折騰linxu蓖租。至于我為什么會(huì)先弄windows,我只能說羊壹,我喜歡蓖宦。
4. 最后,需要說明一下油猫,并不是一個(gè)數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)sql節(jié)點(diǎn)的稠茂。一般來說,如果數(shù)據(jù)節(jié)點(diǎn)太多的話情妖,會(huì)降低性能睬关;sql節(jié)點(diǎn)多的話,能提升并發(fā)量毡证。