MySQL Cluster是一種技術,該技術容許在無共享的系統中部署「內存中」數據庫的Cluster。經過無共享體系結構,系統可以使用廉價的硬件,並且對軟硬件無特殊要求。此外,因爲每一個組件有本身的內存和磁盤,不存在單點故障。
MySQL Cluster分爲SQL節點、數據節點、管理節點(MySQL Cluster提供了API供內部調用,外部應用程序能夠經過API藉口訪問任意層方法) 。
SQL節點提供用戶SQL指令請求,解析、鏈接管理,query優化和響、cache管理等、數據merge、sort,裁剪等功能,當SQL節點啓動時,將向管理節點同步架構信息,用以數據查詢路由。SQL節點做爲查詢入口,須要消耗大量cpu及內存資源,可以使用分佈式管理節點,並在SQL節點外封裝一層請求分發及HA控制機制可解決單點及性能問題,其提供了線性擴展功能。
數據節點提供數據存取,持久化、API數據存取訪問等功能。數據節點使用分片及多份數據存儲,至少存放2份,數據存放於內存中,根據管理節點的規則進行持久化,做爲數據存取地,須要大量內存支持。
管理節點維護着節點活動信息,以及實施數據的備份和恢復等。管理節點會獲取整個cluster環境中節點的狀態和錯誤信息,並將各個cluster 集羣中各個節點的信息反饋給整個集羣中其餘的全部節點,這對於SQL節點的數據路由規則相當重要,當節擴容時,數據將會被rebuild。管理節點維護着全局規則信息,當節點發生故障時,將會發生故障通告
在整個Cluster體系中,任何一個組建都支持動態擴展,線性擴展,提供了高可用,高性能的解決方案。當新增數據節點時,須要重構存取路徑信息,對管理節點將形成數據重構壓力,該操做建議在非業務高峯時進行
Cluster使用自動鍵值識別數據分片方案,用戶無需關心數據切片方案(在5.1及之後提供了分區鍵規則),透明實現分佈式數據庫,數據分片規則 根據主鍵、惟一索引和自動行標識rowid完成,再集羣個數進行分佈,其訪問數據猶如RAID訪問機制同樣,能並行從各個節點抽取數據,散列數據,當使用非主鍵或分區鍵訪問時,將致使全部簇節點掃描,影響性能,這也是Cluster面對的核心挑戰。
下圖是官方文檔中給出的標準的MySQL Cluster的架構。
操做系統:SUSE11
MySQL版本:MySQL Cluster 7.1.24
SQL Node 主機名 SUSE150 IP地址 192.168.85.150
Data Node 主機名 SUSE151 IP地址 192.168.85.151
Data Node 主機名 SUSE152 IP地址 192.168.85.152
MGM Node 主機名 SUSE153 IP地址192.168.85.153
安裝介質:
MySQL-Cluster-gpl-server-7.1.24-1.sles11.i586.rpm: which supplies the core files needed to run a MySQL Server with NDBCLUSTER storage engine support (that is, as a MySQL Cluster SQL Node)
MySQL-Cluster-gpl-client-7.1.24-1.sles11.i586.rpm: 管理mysql server 的客戶端,安裝了這個RPM包事後才能用mysql命令,進而進行數據庫的管理,寫sql 語句
MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm: which supplies the MySQL Cluster Data Node binary(ndbd).
MySQL-Cluster-gpl-management-7.1.24-1.sles11.i586.rpm: which provides the MySQL Cluster management serverbinary (ndb_mgmd),管理集羣的Data Node 和sql noe
MySQL-Cluster-gpl-tools-7.1.24-1.sles11.i586.rpm: 該軟件包最重要的就是提供了集羣管理的客戶端(ndb_mgm)The most important of these is the MySQL Cluster management client (ndb_mgm)
SQL Node(192.168.85.150):
rpm -Uhv MySQL-Cluster-gpl-server-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-client-7.1.24-1.sles11.i586.rpm
Data Node(192.168.85.151) :
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
Data Node(192.168.85.152) :
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
MGM Node 192.168.85.153):
rpm -Uhv MySQL-Cluster-gpl-management-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-tools-7.1.24-1.sles11.i586.rpm
SQL Node和Data Node若是/etc下沒有my.cnf 就要到/usr/share/mysql下面copy與你係統對應的配置文件並重命名爲my.cnf (注意:/usr/share/mysql目錄下有多個*.cnf文件,分別爲my-huge.cnf,my-large.cnf,my-medium.cnf,my-small.cnf,對於與大中小各類類型的數據設置),本次測試使用my-medium.cnf的配置。
前提:
四臺主機相互之間能夠ping通
SQL Node(192.168.85.150):
rpm -Uhv MySQL-Cluster-gpl-server-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-client-7.1.24-1.sles11.i586.rpm
vi /etc/my.cnf
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.85.153 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.85.153 # location of management server
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
vi /etc/my.cnf
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.85.153 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.85.153 # location of management server
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
vi /etc/my.cnf
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.85.153 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.85.153 # location of management server
rpm -Uhv MySQL-Cluster-gpl-management-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-tools-7.1.24-1.sles11.i586.rpm
在mgm node 的配置步驟以下:
shell> mkdir /var/lib/mysql-cluster
shell> cd /var/lib/mysql-cluster
shell> vi config.ini
配置文件時 config.ini,該文件包括如下相似的內容。
[ndbd default]
NoOfReplicas=2 # Number of replicas
DataMemory=80M # How much memory to allocate for data storage
IndexMemory=18M # How much memory to allocate for index storage
[tcp default]
portnumber=2202 # This the default; however, you can use any port that is free
[ndb_mgmd]
id=1
hostname=192.168.85.153 # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster # Directory for management node log files
[ndbd]
id=2
hostname=192.168.85.151 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's data files
[ndbd]
id=3
hostname=192.168.85.152 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's data files
[mysqld]
id=4
hostname=192.168.85.150 # Hostname or IP address
在配置config.ini時data node 的datadir 能夠在本身定義的路徑下面。
安裝和配置都完成之後,接下來就是啓動mysql 集羣了看是否成功。
CLUSTER啓動的順序依次爲:管理節點—數據節點—SQL節點
管理節點啓動:
登陸到SUSE153,而後執行
shell> /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
數據節點啓動:
登陸到SUSE151和SUSE152,而後執行
第一次啓動使用:shell> /usr/sbin/ndbd -ndb-connectstring=192.168.85.153:1186
非第一次啓動使用:shell> /usr/sbin/ndbd
SQL節點啓動:
登陸到SUSE150,而後執行
shell> /usr/bin/mysqld_safe -user=mysql &
1.推薦通常是先啓動mgm node,所以在SUSE153上執行:
shell> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
2.而後啓動data node ,每一個data node 都用如下的命令啓動,所以在SUSE151和SUSE152上分別執行以下命令
shell> ndbd
3.啓動sql node ,就是啓動mysql server 同樣的方法,最後在SUSE150上執行
shell> service mysql start或者 /etc/rc.d/init.d/mysqld start啓動。
4.全部的節點都啓動事後,就回到mgm node,執行一些ndb_mgm的管理命令,看是否能成功。
[root@SUSE153 mysql]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.85.151 (mysql-5.1.63 ndb-7.1.24, Nodegroup: 0, Master)
id=3 @192.168.85.152 (mysql-5.1.63 ndb-7.1.24, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.85.153 (mysql-5.1.63 ndb-7.1.24)
[mysqld(API)] 1 node(s)
id=4 @192.168.85.150 (mysql-5.1.63 ndb-7.1.24)
若是出現這樣相似的界面,能夠說差很少成功了。