上次的博文中咱們介紹了一下集羣的相關概念,今天的博文咱們介紹一下MySQL集羣的相關內容。
node
MySQL羣集技術在分佈式系統中爲MySQL數據提供了冗餘特性,加強了安全性,使得單個MySQL服務器故障不會對系統產生巨大的負面效應,系統的穩定性獲得保障。
MySQL羣集須要有一組計算機,每臺計算機的角色多是不同的。MySQL羣集中有三種節點:管理節點、數據節點和SQL節點。羣集中的某計算機多是某一種節點,也多是兩種或三種節點的集合。這三種節點只是在邏輯上的劃分,因此它們不必定和物理計算機是一一對應的關係。
管理節點(也能夠稱管理服務器)主要負責管理數據節點和SQL節點,還有羣集配置文件和羣集日誌文件。它監控其餘節點的工做狀態,可以啓動、關閉或重啓某個節點。其餘節點從管理節點檢索配置數據,當數據節點有新事件時就把事件信息發送給管理節點並寫入羣集日誌。
數據節點用於存儲數據。
SQL節點跟通常的MySQL服務器是同樣的,咱們能夠經過它進行SQL操做。
mysql
下圖中畫出了三種羣集節點及應用程序間的關係:sql
下載MySQL集羣:http://dev.mysql.com/downloads/cluster/數據庫
mysql-cluster-gpl-7.3.5-winx64.zip:
http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.5-winx64.zip
mysql-cluster-gpl-7.3.5-win32.zip:
http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.5-win32.zip
安全
首先找三臺電腦,或者是開三個虛擬機,管理節點部署在一臺機子上,其餘兩臺每臺都部署一個數據節點和一個SQL節點。這裏以兩臺機子舉例,其中一臺(IP爲192.168.24.16)部署管理節點、數據節點和SQL節點,另外一臺(IP爲192.168.24.43)部署數據節點和SQL節點。
實際應用中,不要將管理節點跟數據節點部署到一臺機子上,由於若是數據節點宕機會致使管理節點不可用,同時整個MySQL羣集也就都不可用了。因此一個MySQL羣集理想狀況下至少有三臺服務器,將管理節點單獨放到一臺服務器上。這裏以兩臺舉例,只是爲了說明三種節點的配置啓動方法。
服務器
一、在IP爲192.168.24.16的主機的C盤中新建文件夾mysql,而後在此文件夾下新建子目錄bin和mysql-cluster,再將安裝包中的bin目錄下的ndb_mgm.exe和ndb_mgmd.exe拷貝到C:\mysql\bin下。在目錄C:\mysql\bin下新建cluster-logs目錄、config.ini文件和my.ini文件。
二、config.ini文件內容以下:編輯器
[ndbd default] # Options affecting ndbd processes on all data nodes: # Number of replicas NoOfReplicas=2 DataDir=c:/mysqlcluster/datanode/mysql/bin/cluster-data # Directory for each data node's data files # Memory allocated to data storage DataMemory=80M # Memory allocated to index storage IndexMemory=18M # For DataMemory and IndexMemory, we have used the # default values. [ndb_mgmd] # Management process options: # Hostname or IP address of management node HostName=192.168.24.16 # Directory for management node log files DataDir=C:/mysql/bin/cluster-logs [ndbd] # Options for data node "A": # (one [ndbd] section per data node) # Hostname or IP address HostName=192.168.24.16 [ndbd] # Options for data node "B": # Hostname or IP address HostName=192.168.24.43 [mysqld] # SQL node options: # Hostname or IP address HostName=192.168.24.16 [mysqld] # SQL node options: # Hostname or IP address HostName=192.168.24.43
三、my.ini中的內容以下:分佈式
[mysql_cluster] # Options for management node process config-file=C:/mysql/bin/config.ini
一、在IP爲192.168.24.16的主機中新建文件夾C:\mysqlcluster\datanode\mysql,而後在此文件夾中繼續新建子目錄bin和cluster-data,bin下再建一個子目錄也叫cluster-data。
二、將安裝包data目錄下的全部文件拷貝到C:\mysqlcluster\datanode\mysql\cluster-data下
三、將安裝包中bin目錄下的ndbd.exe拷貝到C:\mysqlcluster\datanode\mysql\bin下,並在C:\mysqlcluster\datanode\mysql中新建my.ini文件,文件內容爲:測試
[mysql_cluster] # Optionsfor data node process: #location of management server ndb-connectstring=192.168.24.16
注:由於數據節點的配置是同樣的,因此咱們能夠直接將192.168.24.16主機中的文件夾C:\mysqlcluster拷貝到192.168.24.43主機的C盤下。
spa
一、在192.168.24.16主機的C:\mysqlcluster下新建子目錄sqlnode,在C:\mysqlcluster\sqlnode下新建子目錄mysql,將安裝包文件解壓到mysql目錄下,而後在C:\mysqlcluster\sqlnode\mysql下新建my.ini文件,文件內容爲:
[mysqld] # Options for mysqld process: # run NDB storage engine ndbcluster # location of management server ndb-connectstring=192.168.24.16
二、將my-default.ini 文件刪除或改名爲my-default.ini.bak
注:由於SQL節點的配置也是同樣的,因此咱們能夠直接將192.168.24.16主機中的文件夾C:\mysqlcluster\sqlnode文件夾整個拷貝到192.168.24.43主機的C盤下。
在啓動MySQL Cluster以前,首先要作的是保證每一個SQL節點上的MySQL服務可以啓動成功,併爲每一個SQL節點進行相關權限的分配以保證可以遠程登陸訪問。而後依次啓動三種節點。三種節點服務啓動時,必定要按照先啓動管理節點,後啓動數據節點,再啓動SQL節點的順序進行。
一、進入C:\mysqlcluster\sqlnode\mysql\bin目錄下,使用mysqld –install安裝MySQL服務
二、使用net start mysql命令啓動MySQL服務
一、進入C:\mysqlcluster\sqlnode\mysql\bin目錄下,使用mysql –uroot –p,而後輸入密碼,設置root用戶密碼。
注:第一次輸入的密碼,即默認設置爲root密碼。
二、切換到mysql數據庫,輸入如下命令,爲root用戶分配遠程鏈接的相關權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
一、在192.168.24.16主機中打開命令行窗口,切到C:\mysql\bin目錄,輸入:
ndb_mgmd -f config.ini --configdir=C:\mysql\mysql-cluster
回車,管理節點服務就啓動了,命令行上可能沒有任何提示信息,能夠打開C:\mysql\bin\cluster-logs\ndb_1_cluster.log日誌文件查看啓動信息。
注意,此命令行窗口不能關閉,除非你想中止服務。
二、也能夠將其作成服務,在命令行中輸入:
ndb_mgmd --install=ndb_mgmd -f config.ini --configdir=C:\mysql\mysql-cluster
一、在192.168.24.16主機中打開新命令行窗口,切到C:\mysqlcluster\datanode\mysql\bin,輸入:
ndbd
二、也能夠將其作成服務,在命令行中輸入:
ndbd --install=ndbd
三、以相同的方法在其餘數據節點,即192.168.24.43中啓動數據節點服務。
四、在192.168.24.16主機中打開新命令行窗口,切到目錄C:\mysql\bin,輸入:
ndb_mgm
回車,而後再輸入:
ALL STATUS
回車,就能夠查看數據節點的鏈接信息了。
一、在192.168.24.16主機中打開新命令行窗口,切到C:\mysqlcluster\sqlnode\mysql\bin,輸入:
mysqld --console
回車,SQL節點啓動。
二、也能夠將其作成服務,輸入:
mysqld -install mysql
三、以相同的方法在其餘SQL節點,即192.168.24.43中啓動SQL節點。
四、想要查看SQL節點的啓動狀況能夠在192.168.1.10主機中一樣打開新命令行,輸入:
ndb_mgm
回車,再輸入:
SHOW
回車,就能夠看到SQL節點的鏈接狀況了。
1)、在任一SQL結點,即192.168.24.16主機上新建立一個數據庫myDB,能夠看到其餘SQL結點,即192.168.24.43均建立了一個MyDB數據庫
2)、在任一SQL結點,即192.168.24.16主機上的myDB中使用
create table student (id int(2)) engine=ndbcluster;
新建一個student表,能夠看到其餘SQL結點,即192.168.24.43均在myDB數據庫中建立了一個student表
3)、在任一SQL結點,即192.168.24.16主機上的myDB中的student表插入幾條數據以後,能夠看到其餘SQL結點,即192.168.24.43均做了相關的變化
注:與沒有使用 Cluster的MySQL相比,在MySQL Cluster內操做數據的方式沒有太大的區別。執行這類操做時應記住兩點:
一、表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項建立,或用ALTER TABLE選項更改,以使用NDB Cluster存儲引擎在 Cluster內複製它們。若是使用mysqldump的輸出從已有數據庫導入表,可在文本編輯器中打開SQL腳本,並將該選項添加到任何表建立語句,或用這類選項之一替換任何已有的ENGINE(或TYPE)選項。
二、另外還請記住,每一個NDB表必須有一個主鍵。若是在建立表時用戶未定義主鍵,NDB Cluster存儲引擎將自動生成隱含的主鍵。(註釋:該隱含 鍵也將佔用空間,就像任何其餘的表索引同樣。因爲沒有足夠的內存來容納這些自動建立的鍵,出現問題並不罕見)。
到此爲止關於MySQL集羣的搭建就講解完畢了,可是單純的按照這樣搭建還有一個缺陷,什麼缺陷呢?我們下次講解,敬請期待!