MySQL Cluster學習筆記-2

 Mon, 27 Feb 2006 16:16:31 +0800

MySQL Cluster文件裡面只提到設定NoOfReplicas,沒有講清楚MySQL Cluster如何將資料表做出partitions。我原先以為,partitions的數目是跟Node Group相關,有四個Data Nodes時,如果將NoOfReplicas設為2,就會產生兩個Node Groups,同時把資料表切割成兩個partitions。

不過今天上去MySQL官方網站的論壇,卻看到了 些資料,也是搞不清楚Data Nodes、Data Groups以及NoOfReplicas的關係,結果MySQL的人員做了很詳細的解答:有多少Data Nodes就會有多少partitions!(出乎意料)

所以有四個data nodes,兩個node groups(定義了四個data nodes,設定NoOfReplicas=2)的狀況下,同樣會把資料表割成四個partitions,只是每個node group負責維護兩個partitions。

其實另外還有一個問題,就是我啟動兩個以上的data nodes以後,網路的交通就極度擁擠,每個data nodes之間似乎會密集地互相聯絡傳送資料的樣子。結果會影響到寫入資料庫的速度,測試結果幾乎跟sql node上面的myisam資料表速度差了六倍。殘念。但是查詢的速度還是很快。

沒有在做查詢時,應該交通量沒那麼大吧?似乎花很大的功夫在做heartbeat上面了,這一點還不知道有沒有解。(只見switch的燈不斷狂閃)

以下是我測試安裝的設定:

硬體:我們公司的網路開店機(Transmeta 5600,256MB RAM,20GB硬碟)x 5

作業系統:Centos / 核心2.6.9-22.0.2.EL

MySQL版本:mysql-max-4.1.16-pc-linux-gnu-i686

架構:

1. SQL Node + Management Node:

IP: 192.168.11.1
config.ini內容如下:

[ndbd default]
NoOfReplicas= 2
MaxNoOfConcurrentOperations= 5000
DataMemory= 40M
IndexMemory= 12M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 256

[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster

[ndb_mgmd]
Id=1
HostName= 192.168.11.1

[ndbd]
Id= 2
HostName= 192.168.11.2

[ndbd]
Id= 3
HostName= 192.168.11.3

[ndbd]
Id= 4
HostName= 192.168.11.4

[ndbd]
Id= 5
HostName= 192.168.11.5
[mysqld]
Id= 6

[mysqld]
Id= 7

my.cnf內容如下:

[mysqld]
ndbcluster
ndb-connectstring=192.168.11.1
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/usr/local/mysql

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[ndb_mgm]
connect-string=192.168.11.1
[ndb-mgmd]
config-file=/var/lib/mysql-cluster/config.ini

2. Data Nodes:

IP: 192.168.11.2 ~ 5

my.cnf內容如下:

[mysql_cluster]
ndb-connectstring=192.168.77.151

____________________________________

啟動順序:

management node (ndb_mgmd) -> data nodes (ndbd) -> sql node (mysqld)

這樣,就可以執行了。在management node裡面執行ndb_mgm,然後打show,可以檢視系統狀態:

[root@localhost mysql-cluster]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.11.1:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=2 @192.168.11.2 (Version: 4.1.16, Nodegroup: 0, Master)
id=3 @192.168.11.3 (Version: 4.1.16, Nodegroup: 0)
id=4 @192.168.11.4 (Version: 4.1.16, Nodegroup: 1)
id=5 @192.168.11.5 (Version: 4.1.16, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.11.1 (Version: 4.1.16)

[mysqld(API)] 2 node(s)
id=6 @192.168.11.1 (Version: 4.1.16)
id=7 (not connected, accepting connect from any host)

以上。