MySQL Cluster學習筆記-2
Mon, 27 Feb 2006 16:16:31 +0800MySQL 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)
以上。