《MYSQL數(shù)據(jù)庫Windows Server 2003 下配置 MySQL 集群(Cluster)教程》要點:
本文介紹了MYSQL數(shù)據(jù)庫Windows Server 2003 下配置 MySQL 集群(Cluster)教程,希望對您有用。如果有疑問,可以聯(lián)系我們。
MySQL 群集是 MySQL 適合于分布式計算環(huán)境的高可用、高冗余版本.它采用了 NDB Cluster 存儲引擎,允許在 1 個群集中運行多個 MySQL 服務(wù)器.在 MySQL 5.0 及以上的二進制版本中,以及與最新的 Linux 版本兼容的 RPM 包中提供了該存儲引擎.MYSQL學(xué)習(xí)
MySQL 群集是一種技術(shù),該技術(shù)允許在無共享的系統(tǒng)中部署“內(nèi)存中”和“磁盤中”數(shù)據(jù)庫的 Cluster .通過無共享體系結(jié)構(gòu),系統(tǒng)能夠使用廉價的硬件,而且對軟硬件無特殊要求.此外,由于每個組件有自己的內(nèi)存和磁盤,不存在單點故障.MySQL Cluster 由一組計算機構(gòu)成,每臺計算機上均運行著多種進程,包括 MySQL 服務(wù)器,NDB Cluster 的數(shù)據(jù)節(jié)點,管理服務(wù)器,以及(可能存在的)專門的數(shù)據(jù)訪問程序.MYSQL學(xué)習(xí)
管理服務(wù)器(MGM節(jié)點)負(fù)責(zé)管理 Cluster 配置文件和 Cluster 日志.Cluster 中的每個節(jié)點從管理服務(wù)器檢索配置數(shù)據(jù).當(dāng)數(shù)據(jù)節(jié)點內(nèi)出現(xiàn)新的事件時,節(jié)點將關(guān)于這類事件的信息傳輸?shù)焦芾矸?wù)器,然后,將這類信息寫入 Cluster 日志.MYSQL學(xué)習(xí)
目前能夠運行 MySQL Cluster 的操作系統(tǒng)有 Linux、Mac OS X 和 Solaris,最新的版本已經(jīng)支持 Windows 操作系統(tǒng).MYSQL學(xué)習(xí)
MySQL 群集的數(shù)據(jù)節(jié)點之間的通信是不加密的,并且需要高速的帶寬,所以建議把群集建立在一個高速局域網(wǎng)內(nèi),不建議跨網(wǎng)段、跨公網(wǎng)的部署這種系統(tǒng)體系.MYSQL學(xué)習(xí)
MySQL 群集分為三種節(jié)點:管理節(jié)點,數(shù)據(jù)節(jié)點和SQL節(jié)點.MYSQL學(xué)習(xí)
管理節(jié)點:主要用于管理各個節(jié)點,能夠通過命令對某個節(jié)點進行重啟、關(guān)閉、啟動等操作.也能夠監(jiān)視全部節(jié)點的工作狀態(tài).MYSQL學(xué)習(xí)
數(shù)據(jù)節(jié)點:主要是對數(shù)據(jù)的存儲,不提供其他的服務(wù).
SQL節(jié)點:主要是對外提供SQL功能,類似一臺普通的 MySQL Server.MYSQL學(xué)習(xí)
而SQL節(jié)點和數(shù)據(jù)節(jié)點可以是同一臺機器,也就是說這臺機器即是SQL節(jié)點也是數(shù)據(jù)節(jié)點.它們只是邏輯關(guān)系上的劃分,實際部署時,甚至所有的階段都可以位于同一臺物理機器上,只是配置較復(fù)雜些.MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)
一、軟件下載機器操作環(huán)境MYSQL學(xué)習(xí)
配置 MySQL 群集必需使用其群集版本,注意和 MySQL Server 版本的區(qū)別.本文以 Windows 平臺下的 MySQL 群集版本 MySQL Cluster 7.1.3 為例(截至2010年6月初的最高版本),這是 MySQL Server 5.1 系列版本之一,添加了群集的功能.下載地址為:http://dev.mysql.com/downloads/cluster,選擇 mysql-cluster-gpl-noinstall-7.1.3-win32.zip 文件,這是一個 for Windows 32位版本的、免安裝的二進制版本.MYSQL學(xué)習(xí)
根據(jù)自己的操作系統(tǒng)的位數(shù),也可以選擇 64 位版本的.還有一個 27.2M 的 Windows(x86, 32-bit) 版本,下載下來需要自己編譯,有經(jīng)驗的高級用戶可以選用.MYSQL學(xué)習(xí)
本實驗在 2 臺安裝 Windows Server 2003(sp2) 的機器上進行.節(jié)點分配及 IP 配置如下:MYSQL學(xué)習(xí)
第一臺機器,IP 為 10.0.0.201,作為管理節(jié)點(MGM),SQL節(jié)點1(SQL1),數(shù)據(jù)節(jié)點1(NDBD1).
第二臺機器,IP 為 10.0.0.202,作為SQL節(jié)點2(SQL2),數(shù)據(jù)節(jié)點2(NDBD2).MYSQL學(xué)習(xí)
管理節(jié)點最好不要與數(shù)據(jù)節(jié)點部署在同一臺服務(wù)器上,否則可能會因為該數(shù)據(jù)節(jié)點服務(wù)器的當(dāng)機,而導(dǎo)致管理節(jié)點服務(wù)器的問題,從而導(dǎo)致整個群集系統(tǒng)的崩潰.MYSQL學(xué)習(xí)
二,配置管理節(jié)點:MYSQL學(xué)習(xí)
??? 在第一臺機器上,建文件夾 D:\mysql-cluster,在其下建立文件 config.ini,內(nèi)容如下:
MYSQL學(xué)習(xí)
??? [MYSQLD DEFAULT]MYSQL學(xué)習(xí)
??? [NDB_MGMD DEFAULT]MYSQL學(xué)習(xí)
??? [TCP DEFAULT]MYSQL學(xué)習(xí)
??? # Managment Server
??? [NDB_MGMD]
??? hostname=10.0.0.201MYSQL學(xué)習(xí)
??? # Storage Engines
??? [NDBD]
??? hostname=10.0.0.201
??? datadir= D:\dataMYSQL學(xué)習(xí)
??? [NDBD]
??? hostname=10.0.0.202
??? datadir= D:\dataMYSQL學(xué)習(xí)
??? # SQL Engines
??? [MYSQLD]
??? hostname=10.0.0.201MYSQL學(xué)習(xí)
??? [MYSQLD]
??? hostname=10.0.0.202
MYSQL學(xué)習(xí)
??? Cluster 管理節(jié)點作為一個服務(wù)端(通過運行 db_mgmd.exe 程序讀取本配置文件來啟動),通過本機上的客戶端 ndb_mgm.exe 來連接和操作.MYSQL學(xué)習(xí)
? 三、配置 MySQL 數(shù)據(jù)庫服務(wù)器:MYSQL學(xué)習(xí)
??? 在2臺機器上,分別依次操作.MYSQL學(xué)習(xí)
??? 解壓 mysql-cluster-gpl-noinstall-7.1.3-win32.zip 文件到 D:\mysql-cluster-gpl-noinstall-7.1.3-win32 文件夾下,把 D:\mysql-cluster-gpl-noinstall-7.1.3-win32\bin 加到 Windows 的系統(tǒng) path 中.MYSQL學(xué)習(xí)
??? 打開DOS命令行窗口(配置完系統(tǒng)path后,在再次打開新的命令行窗口),執(zhí)行以下語句,讓 MySQL 作為 Windows 服務(wù)運行:
MYSQL學(xué)習(xí)
??? 把 D:\mysql-cluster-gpl-noinstall-7.1.3-win32 下的某個備用的配置文件(例如my-small.ini)復(fù)制為 my.ini 文件.MYSQL學(xué)習(xí)
??? 建立 D:\tmp 文件夾.MYSQL學(xué)習(xí)
四、配置SQL節(jié)點和數(shù)據(jù)節(jié)點:MYSQL學(xué)習(xí)
??? 在2臺機器上,分別依次操作.MYSQL學(xué)習(xí)
??? 建立文件夾 D:\data.MYSQL學(xué)習(xí)
??? 編輯 NySQL 配置文件 D:\mysql-cluster-gpl-noinstall-7.1.3-win32\my.ini,在 [mysqld] 節(jié)末尾加語句:
MYSQL學(xué)習(xí)
??? 在末尾加語句:
MYSQL學(xué)習(xí)
五,啟動群集各服務(wù)器MYSQL學(xué)習(xí)
??? 啟動順序依次是:管理節(jié)點、數(shù)據(jù)節(jié)點、SQL節(jié)點.MYSQL學(xué)習(xí)
??? 1,啟動管理節(jié)點MYSQL學(xué)習(xí)
??? 在第一臺服務(wù)器的DOS窗口,運行命令:
MYSQL學(xué)習(xí)
??? 屏幕顯示:
MYSQL學(xué)習(xí)
??? 分別在2臺服務(wù)器的DOS窗口運行命令.MYSQL學(xué)習(xí)
??? 第一次,或初始化群集節(jié)點時,運行命令:
MYSQL學(xué)習(xí)
??? 數(shù)據(jù)節(jié)點依賴管理節(jié)點服務(wù)器,進行數(shù)據(jù)的自動復(fù)制和同步,使各個數(shù)據(jù)節(jié)點的數(shù)據(jù)保持一致,并在某個數(shù)據(jù)節(jié)點意外關(guān)閉又恢復(fù)后,進行數(shù)據(jù)的恢復(fù)重建.MYSQL學(xué)習(xí)
??? 3,啟動SQL節(jié)點MYSQL學(xué)習(xí)
??? 有了 ndbcluster 語句,啟動 mysql 服務(wù),就啟動了SQL節(jié)點.應(yīng)在前2種節(jié)點啟動后,分別在2臺服務(wù)器上進行.MYSQL學(xué)習(xí)
六、群集管理MYSQL學(xué)習(xí)
??? 在所有的數(shù)據(jù)節(jié)點和SQL節(jié)點未啟動之前,運行群集管理節(jié)點服務(wù)的客戶端 ndb_mgm.exe,只能獲得以下信息:
MYSQL學(xué)習(xí)
??? [ndb_mgmd(MGM)] 1 node(s)
??? id=1??? @10.0.0.201? (mysql-5.1.44 ndb-7.1.3)MYSQL學(xué)習(xí)
??? [mysqld(API)]?? 2 node(s)
??? id=4 (not connected, accepting connect from 10.0.0.201)
??? id=5 (not connected, accepting connect from 10.0.0.202)MYSQL學(xué)習(xí)
??? ndb_mgm>
MYSQL學(xué)習(xí)
??? 在所有的數(shù)據(jù)節(jié)點和SQL節(jié)點正確啟動之后,將獲得以下信息:
MYSQL學(xué)習(xí)
??? [ndb_mgmd(MGM)] 1 node(s)
??? id=1??? @10.0.0.201? (mysql-5.1.44 ndb-7.1.3)MYSQL學(xué)習(xí)
??? [mysqld(API)]?? 2 node(s)
??? id=4??? @10.0.0.201? (mysql-5.1.44 ndb-7.1.3)
??? id=5??? @10.0.0.202? (mysql-5.1.44 ndb-7.1.3)MYSQL學(xué)習(xí)
??? ndb_mgm>
MYSQL學(xué)習(xí)
??? 以上命令或關(guān)閉管理節(jié)點服務(wù)和所有的數(shù)據(jù)節(jié)點.隨意、強行關(guān)閉群集系統(tǒng)(關(guān)機或關(guān)閉進程),會導(dǎo)致數(shù)據(jù)沒有全部寫回磁盤而導(dǎo)致的數(shù)據(jù)丟失.MYSQL學(xué)習(xí)
??? 關(guān)閉SQL節(jié)點的 mysqld 服務(wù):
MYSQL學(xué)習(xí)
??? C:\>mysqladmin -u root shutdown
MYSQL學(xué)習(xí)
七、測試MYSQL學(xué)習(xí)
??? 正常運行的 MySQL 群集系統(tǒng),通過SQL節(jié)點可以對數(shù)據(jù)節(jié)點進行數(shù)據(jù)庫操作,各數(shù)據(jù)節(jié)點可以自動進行數(shù)據(jù)同步.某一個數(shù)據(jù)節(jié)點關(guān)閉后,不影響SQL節(jié)點的使用.某些數(shù)據(jù)節(jié)點出錯后,可以進行恢復(fù).需要注意的是,SQL節(jié)點建立數(shù)據(jù)庫時,必須選擇“ndbcluster”數(shù)據(jù)庫引擎.如果不選擇“ndbcluster”引擎,建立的數(shù)據(jù)庫將不會進入MySQL群集系統(tǒng)中,但是可以獨立使用.MYSQL學(xué)習(xí)
??? 另外,每個 NDB 表必須有一個主鍵.如果在創(chuàng)建表時未定義主鍵,NDB Cluster 存儲引擎將自動生成隱含的主鍵.該隱含的鍵也將占用空間,就像任何其他的表索引一樣.由于沒有足夠的內(nèi)存來容納這些自動創(chuàng)建的鍵,出現(xiàn)問題并不罕見.MYSQL學(xué)習(xí)
??? 測試實例:MYSQL學(xué)習(xí)
??? 在某臺 SQL 節(jié)點上登錄 mysql,建表 city,并插入數(shù)據(jù):
MYSQL學(xué)習(xí)
??? 在群集系統(tǒng)正常工作的情況下,應(yīng)當(dāng)能取到先前插入的所有記錄.MYSQL學(xué)習(xí)
??? 另外的測試(單點故障測試):MYSQL學(xué)習(xí)
??? 1,還可以人為停止某一個數(shù)據(jù)節(jié)點(Ctrl+C中斷DOS命令ndbd.exe,停止該服務(wù)),看看所有的 SQL 節(jié)點是不是能正常工作.
??? 2,在某一個數(shù)據(jù)節(jié)點停止后,進行數(shù)據(jù)庫操作.然后重新開啟該數(shù)據(jù)節(jié)點,看看群集中的所有的 SQL 節(jié)點能不能得到完整的數(shù)據(jù).MYSQL學(xué)習(xí)
八、常見問題與擴展MYSQL學(xué)習(xí)
??? 配置和管理 MySQL 群集系統(tǒng)并不是一件簡單的事情.由于不合理的配置導(dǎo)致的系統(tǒng)問題非常常見,比如網(wǎng)絡(luò)故障、內(nèi)存限制等,會導(dǎo)致仲裁體統(tǒng)強制關(guān)閉數(shù)據(jù)節(jié)點.MYSQL學(xué)習(xí)
??? 如果機器上原來已經(jīng)安裝過 MySQL Server,則一定要卸載干凈原來的數(shù)據(jù)庫系統(tǒng).注意群集系統(tǒng)中的 mysql.exe 程序與非群集系統(tǒng)的管理 Client 是不同的.MYSQL學(xué)習(xí)
??? 還可以與負(fù)載均衡系統(tǒng)結(jié)合,以提供更強的可用性和數(shù)據(jù)存取效率.MYSQL學(xué)習(xí)
??? 可能由于未知的Bug或別的原因,導(dǎo)致群集系統(tǒng)出現(xiàn)一些意外故障.所以建議選取版本時,選擇已經(jīng)得到大多數(shù)人認(rèn)可的版本,不一定選取最新的版本,最新的版本往往不太穩(wěn)定.當(dāng)然也不要選用太陳舊的功能有限制的版本.MYSQL學(xué)習(xí)
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/2344.html