MySQL群集是一種技術,該技術允許在無共享的系統中部署“記憶體中”和“磁碟中”資料庫的Cluster。透過無共享體系結構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由於每個元件有自己的記憶體和磁碟,不存在單點故障。MySQLCluster由一組計算機構成,每臺計算機上均執行著多種程序,包括MySQL伺服器,NDBCluster的資料節點,管理伺服器,以及(可能存在的)專門的資料訪問程式。 管理伺服器(MGM節點)負責管理Cluster配置檔案和Cluster日誌。Cluster中的每個節點從管理伺服器檢索配置資料。當資料節點內出現新的事件時,節點將關於這類事件的資訊傳輸到管理伺服器,然後,將這類資訊寫入Cluster日誌。 目前能夠執行MySQLCluster的作業系統有Linux、MacOSX和Solaris,最新的版本已經支援Windows作業系統。 MySQL群集的資料節點之間的通訊是不加密的,並且需要高速的頻寬,所以建議把群集建立在一個高速區域網內,不建議跨網段、跨公網的部署這種系統體系。 MySQL群集分為三種節點:管理節點,資料節點和SQL節點。 管理節點:主要用於管理各個節點,能夠透過命令對某個節點進行重啟、關閉、啟動等操作。也能夠監視全部節點的工作狀態。 資料節點:主要是對資料的儲存,不提供其他的服務。 SQL節點:主要是對外提供SQL功能,類似一臺普通的MySQLServer。 而SQL節點和資料節點可以是同一臺機器,也就是說這臺機器即是SQL節點也是資料節點。它們只是邏輯關係上的劃分,實際部署時,甚至所有的階段都可以位於同一臺物理機器上,只是配置較複雜些。 一、軟體下載機器操作環境 配置MySQL群集必需使用其群集版本,注意和MySQLServer版本的區別。本文以Windows平臺下的MySQL群集版本MySQLCluster7.1.3為例(截至2010年6月初的最高版本),這是MySQLServer5.1系列版本之一,添加了群集的功能。選擇mysql-cluster-gpl-noinstall-7.1.3-win32.zip檔案,這是一個forWindows32位版本的、免安裝的二進位制版本。 根據自己的作業系統的位數,也可以選擇64位版本的。還有一個27.2M的Windows(x86,32-bit)版本,下載下來需要自己編譯,有經驗的高階使用者可以選用。 本實驗在2臺安裝WindowsServer2003(sp2)的機器上進行。節點分配及IP配置如下: 第一臺機器,IP為10.0.0.201,作為管理節點(MGM),SQL節點1(SQL1),資料節點1(NDBD1)。 第二臺機器,IP為10.0.0.202,作為SQL節點2(SQL2),資料節點2(NDBD2)。 管理節點最好不要與資料節點部署在同一臺伺服器上,否則可能會因為該資料節點伺服器的當機,而導致管理節點伺服器的問題,從而導致整個群集系統的崩潰。 二,配置管理節點: 在第一臺機器上,建資料夾D:\mysql-cluster,在其下建立檔案config.ini,內容如下: [NDBDDEFAULT] NoOfReplicas=1 [MYSQLDDEFAULT] [NDB_MGMDDEFAULT] [TCPDEFAULT] #ManagmentServer [NDB_MGMD] hostname=10.0.0.201 #StorageEngines [NDBD] hostname=10.0.0.201 datadir=D:\data [NDBD] hostname=10.0.0.202 datadir=D:\data #SQLEngines [MYSQLD] hostname=10.0.0.201 [MYSQLD] hostname=10.0.0.202 Cluster管理節點的預設埠是1186,資料節點的預設埠是2202。從MySQL5.0.3開始,該限制已被放寬,Cluster能夠根據空閒的埠自動地為資料節點分配埠。如果你的版本低於5.0.22,請注意這個細節。 Cluster管理節點作為一個服務端(透過執行db_mgmd.exe程式讀取本配置檔案來啟動),透過本機上的客戶端ndb_mgm.exe來連線和操作。 三、配置MySQL資料庫伺服器: 在2臺機器上,分別依次操作。 解壓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的系統path中。 開啟DOS命令列視窗(配置完系統path後,在再次開啟新的命令列視窗),執行以下語句,讓MySQL作為Windows服務執行: mysqld.exe-installmysql 再在Windows服務管理介面裡,配置mysql服務,手動啟動(不要自動啟動)。 把D:\mysql-cluster-gpl-noinstall-7.1.3-win32下的某個備用的配置檔案(例如my-small.ini)複製為my.ini檔案。 建立D:\tmp資料夾。 四、配置SQL節點和資料節點: 在2臺機器上,分別依次操作。 建立資料夾D:\data。 編輯NySQL配置檔案D:\mysql-cluster-gpl-noinstall-7.1.3-win32\my.ini,在[mysqld]節末尾加語句: #SQL群集節點 ndbcluster ndb-connectstring=10.0.0.201 有了ndbcluster語句,mysql服務將作為群集的SQL節點啟動。mysqld.exe命令帶引數–ndbcluster執行是一樣的效果。 mysql服務連線到資料節點的2202預設埠,或自動分配的別的可用埠。 (問題:SQL節點如何獲得資料節點的IP地址?是否透過連線管理節點,取得所有資料節點的IP地址的列表?) 這裡的連線字串的值在MySQL服務啟動時使用,用於連線到管理節點。 在末尾加語句: #NDB叢集節點 [mysql_cluster] ndb-connectstring=10.0.0.201 注:好像以下形式也可: [ndbd] ndb-connectstring=10.0.0.201 這裡的連線字串的值在資料節點啟動時使用,用於連線到管理節點。 五,啟動群集各伺服器 啟動順序依次是:管理節點、資料節點、SQL節點。 1,啟動管理節點 在第一臺伺服器的DOS視窗,執行命令: C:\>ndb_mgmd.exe-fd:\mysql-cluster.conf\config.ini–configdir=d:\mysql-cluster 注:如果不帶–configdir=d:\mysql-cluster引數,將預設為C:\mysql\mysql-cluster資料夾。 螢幕顯示: C:\>ndb_mgmd.exe-fd:\mysql-cluster.conf\config.ini–configdir=d:\mysql-cluster 2010-06-1001:16:57[MgmtSrvr]INFO—NDBClusterManagementServer.mysql-5.1.44ndb-7.1.3 2010-06-1001:16:57[MgmtSrvr]INFO—Readingclusterconfigurationfrom‘d:\mysql-cluster.conf\config.ini" 2010-06-1001:16:57[MgmtSrvr]INFO—Gotinitialconfigurationfrom‘d:\mysql-cluster.conf\config.ini",willtrytosetitwhenallndb_mgmd(s)started 2010-06-1001:16:57[MgmtSrvr]INFO—Mgmtserverstate:nodeid1reservedforip10.0.0.201,m_reserved_nodes1. 2010-06-1001:16:57[MgmtSrvr]INFO—Id:1,Commandport:*:1186 ==INITIAL== 2010-06-1001:16:57[MgmtSrvr]INFO—Startinginitialconfigurationchange 2010-06-1001:16:57[MgmtSrvr]INFO—Configuration1commited 2010-06-1001:16:57[MgmtSrvr]INFO—Configchangecompleted!Newgeneration:1 ==CONFIRMED== 2,啟動資料節點 分別在2臺伺服器的DOS視窗執行命令。 第一次,或初始化群集節點時,執行命令: ndbd.exe–initial 初始化之後,只執行ndbd.exe即可。若帶引數–initial執行,將使正常執行的群集系統中,資料節點的資料全部丟失。 資料節點依賴管理節點伺服器,進行資料的自動複製和同步,使各個資料節點的資料保持一致,並在某個資料節點意外關閉又恢復後,進行資料的恢復重建。 3,啟動SQL節點 有了ndbcluster語句,啟動mysql服務,就啟動了SQL節點。應在前2種節點啟動後,分別在2臺伺服器上進行。 六、群集管理 在所有的資料節點和SQL節點未啟動之前,執行群集管理節點服務的客戶端ndb_mgm.exe,只能獲得以下資訊: C:\>ndb_mgm.exe —NDBCluster—ManagementClient– ndb_mgm>show ClusterConfiguration ——————— [ndbd(NDB)]2node(s) id=2(notconnected,acceptingconnectfrom10.0.0.201) id=3(notconnected,acceptingconnectfrom10.0.0.202) [ndb_mgmd(MGM)]1node(s) [email protected](mysql-5.1.44ndb-7.1.3) [mysqld(API)]2node(s) id=4(notconnected,acceptingconnectfrom10.0.0.201) id=5(notconnected,acceptingconnectfrom10.0.0.202) ndb_mgm> 說明資料節點、SQL節點均未連線到管理節點服務。 在所有的資料節點和SQL節點正確啟動之後,將獲得以下資訊: ndb_mgm>show ClusterConfiguration ——————— [ndbd(NDB)]2node(s) [email protected](mysql-5.1.44ndb-7.1.3,Nodegroup:0,Master) [email protected](mysql-5.1.44ndb-7.1.3,Nodegroup:1) [ndb_mgmd(MGM)]1node(s) [email protected](mysql-5.1.44ndb-7.1.3) [mysqld(API)]2node(s) [email protected](mysql-5.1.44ndb-7.1.3) [email protected](mysql-5.1.44ndb-7.1.3) ndb_mgm> 關閉群集的DOS命令: ndb_mgm-eshutdown 或在ndb_mgm環境下執行shutdown命令。 以上命令或關閉管理節點服務和所有的資料節點。隨意、強行關閉群集系統(關機或關閉程序),會導致資料沒有全部寫回磁碟而導致的資料丟失。 關閉SQL節點的mysqld服務: C:\>netstopmysql,或: C:\>mysqladmin-urootshutdown 七、測試 正常執行的MySQL群集系統,透過SQL節點可以對資料節點進行資料庫操作,各資料節點可以自動進行資料同步。某一個數據節點關閉後,不影響SQL節點的使用。某些資料節點出錯後,可以進行恢復。需要注意的是,SQL節點建立資料庫時,必須選擇“ndbcluster”資料庫引擎。如果不選擇“ndbcluster”引擎,建立的資料庫將不會進入MySQL群集系統中,但是可以獨立使用。 另外,每個NDB表必須有一個主鍵。如果在建立表時未定義主鍵,NDBCluster儲存引擎將自動生成隱含的主鍵。該隱含的鍵也將佔用空間,就像任何其他的表索引一樣。由於沒有足夠的記憶體來容納這些自動建立的鍵,出現問題並不罕見。
MySQL群集是一種技術,該技術允許在無共享的系統中部署“記憶體中”和“磁碟中”資料庫的Cluster。透過無共享體系結構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由於每個元件有自己的記憶體和磁碟,不存在單點故障。MySQLCluster由一組計算機構成,每臺計算機上均執行著多種程序,包括MySQL伺服器,NDBCluster的資料節點,管理伺服器,以及(可能存在的)專門的資料訪問程式。 管理伺服器(MGM節點)負責管理Cluster配置檔案和Cluster日誌。Cluster中的每個節點從管理伺服器檢索配置資料。當資料節點內出現新的事件時,節點將關於這類事件的資訊傳輸到管理伺服器,然後,將這類資訊寫入Cluster日誌。 目前能夠執行MySQLCluster的作業系統有Linux、MacOSX和Solaris,最新的版本已經支援Windows作業系統。 MySQL群集的資料節點之間的通訊是不加密的,並且需要高速的頻寬,所以建議把群集建立在一個高速區域網內,不建議跨網段、跨公網的部署這種系統體系。 MySQL群集分為三種節點:管理節點,資料節點和SQL節點。 管理節點:主要用於管理各個節點,能夠透過命令對某個節點進行重啟、關閉、啟動等操作。也能夠監視全部節點的工作狀態。 資料節點:主要是對資料的儲存,不提供其他的服務。 SQL節點:主要是對外提供SQL功能,類似一臺普通的MySQLServer。 而SQL節點和資料節點可以是同一臺機器,也就是說這臺機器即是SQL節點也是資料節點。它們只是邏輯關係上的劃分,實際部署時,甚至所有的階段都可以位於同一臺物理機器上,只是配置較複雜些。 一、軟體下載機器操作環境 配置MySQL群集必需使用其群集版本,注意和MySQLServer版本的區別。本文以Windows平臺下的MySQL群集版本MySQLCluster7.1.3為例(截至2010年6月初的最高版本),這是MySQLServer5.1系列版本之一,添加了群集的功能。選擇mysql-cluster-gpl-noinstall-7.1.3-win32.zip檔案,這是一個forWindows32位版本的、免安裝的二進位制版本。 根據自己的作業系統的位數,也可以選擇64位版本的。還有一個27.2M的Windows(x86,32-bit)版本,下載下來需要自己編譯,有經驗的高階使用者可以選用。 本實驗在2臺安裝WindowsServer2003(sp2)的機器上進行。節點分配及IP配置如下: 第一臺機器,IP為10.0.0.201,作為管理節點(MGM),SQL節點1(SQL1),資料節點1(NDBD1)。 第二臺機器,IP為10.0.0.202,作為SQL節點2(SQL2),資料節點2(NDBD2)。 管理節點最好不要與資料節點部署在同一臺伺服器上,否則可能會因為該資料節點伺服器的當機,而導致管理節點伺服器的問題,從而導致整個群集系統的崩潰。 二,配置管理節點: 在第一臺機器上,建資料夾D:\mysql-cluster,在其下建立檔案config.ini,內容如下: [NDBDDEFAULT] NoOfReplicas=1 [MYSQLDDEFAULT] [NDB_MGMDDEFAULT] [TCPDEFAULT] #ManagmentServer [NDB_MGMD] hostname=10.0.0.201 #StorageEngines [NDBD] hostname=10.0.0.201 datadir=D:\data [NDBD] hostname=10.0.0.202 datadir=D:\data #SQLEngines [MYSQLD] hostname=10.0.0.201 [MYSQLD] hostname=10.0.0.202 Cluster管理節點的預設埠是1186,資料節點的預設埠是2202。從MySQL5.0.3開始,該限制已被放寬,Cluster能夠根據空閒的埠自動地為資料節點分配埠。如果你的版本低於5.0.22,請注意這個細節。 Cluster管理節點作為一個服務端(透過執行db_mgmd.exe程式讀取本配置檔案來啟動),透過本機上的客戶端ndb_mgm.exe來連線和操作。 三、配置MySQL資料庫伺服器: 在2臺機器上,分別依次操作。 解壓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的系統path中。 開啟DOS命令列視窗(配置完系統path後,在再次開啟新的命令列視窗),執行以下語句,讓MySQL作為Windows服務執行: mysqld.exe-installmysql 再在Windows服務管理介面裡,配置mysql服務,手動啟動(不要自動啟動)。 把D:\mysql-cluster-gpl-noinstall-7.1.3-win32下的某個備用的配置檔案(例如my-small.ini)複製為my.ini檔案。 建立D:\tmp資料夾。 四、配置SQL節點和資料節點: 在2臺機器上,分別依次操作。 建立資料夾D:\data。 編輯NySQL配置檔案D:\mysql-cluster-gpl-noinstall-7.1.3-win32\my.ini,在[mysqld]節末尾加語句: #SQL群集節點 ndbcluster ndb-connectstring=10.0.0.201 有了ndbcluster語句,mysql服務將作為群集的SQL節點啟動。mysqld.exe命令帶引數–ndbcluster執行是一樣的效果。 mysql服務連線到資料節點的2202預設埠,或自動分配的別的可用埠。 (問題:SQL節點如何獲得資料節點的IP地址?是否透過連線管理節點,取得所有資料節點的IP地址的列表?) 這裡的連線字串的值在MySQL服務啟動時使用,用於連線到管理節點。 在末尾加語句: #NDB叢集節點 [mysql_cluster] ndb-connectstring=10.0.0.201 注:好像以下形式也可: [ndbd] ndb-connectstring=10.0.0.201 這裡的連線字串的值在資料節點啟動時使用,用於連線到管理節點。 五,啟動群集各伺服器 啟動順序依次是:管理節點、資料節點、SQL節點。 1,啟動管理節點 在第一臺伺服器的DOS視窗,執行命令: C:\>ndb_mgmd.exe-fd:\mysql-cluster.conf\config.ini–configdir=d:\mysql-cluster 注:如果不帶–configdir=d:\mysql-cluster引數,將預設為C:\mysql\mysql-cluster資料夾。 螢幕顯示: C:\>ndb_mgmd.exe-fd:\mysql-cluster.conf\config.ini–configdir=d:\mysql-cluster 2010-06-1001:16:57[MgmtSrvr]INFO—NDBClusterManagementServer.mysql-5.1.44ndb-7.1.3 2010-06-1001:16:57[MgmtSrvr]INFO—Readingclusterconfigurationfrom‘d:\mysql-cluster.conf\config.ini" 2010-06-1001:16:57[MgmtSrvr]INFO—Gotinitialconfigurationfrom‘d:\mysql-cluster.conf\config.ini",willtrytosetitwhenallndb_mgmd(s)started 2010-06-1001:16:57[MgmtSrvr]INFO—Mgmtserverstate:nodeid1reservedforip10.0.0.201,m_reserved_nodes1. 2010-06-1001:16:57[MgmtSrvr]INFO—Id:1,Commandport:*:1186 ==INITIAL== 2010-06-1001:16:57[MgmtSrvr]INFO—Startinginitialconfigurationchange 2010-06-1001:16:57[MgmtSrvr]INFO—Configuration1commited 2010-06-1001:16:57[MgmtSrvr]INFO—Configchangecompleted!Newgeneration:1 ==CONFIRMED== 2,啟動資料節點 分別在2臺伺服器的DOS視窗執行命令。 第一次,或初始化群集節點時,執行命令: ndbd.exe–initial 初始化之後,只執行ndbd.exe即可。若帶引數–initial執行,將使正常執行的群集系統中,資料節點的資料全部丟失。 資料節點依賴管理節點伺服器,進行資料的自動複製和同步,使各個資料節點的資料保持一致,並在某個資料節點意外關閉又恢復後,進行資料的恢復重建。 3,啟動SQL節點 有了ndbcluster語句,啟動mysql服務,就啟動了SQL節點。應在前2種節點啟動後,分別在2臺伺服器上進行。 六、群集管理 在所有的資料節點和SQL節點未啟動之前,執行群集管理節點服務的客戶端ndb_mgm.exe,只能獲得以下資訊: C:\>ndb_mgm.exe —NDBCluster—ManagementClient– ndb_mgm>show ClusterConfiguration ——————— [ndbd(NDB)]2node(s) id=2(notconnected,acceptingconnectfrom10.0.0.201) id=3(notconnected,acceptingconnectfrom10.0.0.202) [ndb_mgmd(MGM)]1node(s) [email protected](mysql-5.1.44ndb-7.1.3) [mysqld(API)]2node(s) id=4(notconnected,acceptingconnectfrom10.0.0.201) id=5(notconnected,acceptingconnectfrom10.0.0.202) ndb_mgm> 說明資料節點、SQL節點均未連線到管理節點服務。 在所有的資料節點和SQL節點正確啟動之後,將獲得以下資訊: ndb_mgm>show ClusterConfiguration ——————— [ndbd(NDB)]2node(s) [email protected](mysql-5.1.44ndb-7.1.3,Nodegroup:0,Master) [email protected](mysql-5.1.44ndb-7.1.3,Nodegroup:1) [ndb_mgmd(MGM)]1node(s) [email protected](mysql-5.1.44ndb-7.1.3) [mysqld(API)]2node(s) [email protected](mysql-5.1.44ndb-7.1.3) [email protected](mysql-5.1.44ndb-7.1.3) ndb_mgm> 關閉群集的DOS命令: ndb_mgm-eshutdown 或在ndb_mgm環境下執行shutdown命令。 以上命令或關閉管理節點服務和所有的資料節點。隨意、強行關閉群集系統(關機或關閉程序),會導致資料沒有全部寫回磁碟而導致的資料丟失。 關閉SQL節點的mysqld服務: C:\>netstopmysql,或: C:\>mysqladmin-urootshutdown 七、測試 正常執行的MySQL群集系統,透過SQL節點可以對資料節點進行資料庫操作,各資料節點可以自動進行資料同步。某一個數據節點關閉後,不影響SQL節點的使用。某些資料節點出錯後,可以進行恢復。需要注意的是,SQL節點建立資料庫時,必須選擇“ndbcluster”資料庫引擎。如果不選擇“ndbcluster”引擎,建立的資料庫將不會進入MySQL群集系統中,但是可以獨立使用。 另外,每個NDB表必須有一個主鍵。如果在建立表時未定義主鍵,NDBCluster儲存引擎將自動生成隱含的主鍵。該隱含的鍵也將佔用空間,就像任何其他的表索引一樣。由於沒有足夠的記憶體來容納這些自動建立的鍵,出現問題並不罕見。