mysql cluster
發表於 : 2006-08-03 23:04:31
http://www.ithome.com.tw/plog/index.php ... blogId=257
MySQL Cluster學習筆記-1
fillano | 14 Feb, 2006 09:51
早期的MySQL沒有內建的Cluster機制,通常要建立一個可以redundant的mysql資料庫伺服器,主要是用他的資料複製機制。 mysql可以設定一個master跟數個slave伺服器,然後設定好在master發生資料寫入的時候,同步將資料寫入slave伺服器。
MySQL Cluster的架構,主要是應用一個新的storage engine,叫做NDB。利用這個技術,可以將mysql所需要做的事情分散到三種伺服器節點上,分別是管理節點(Management (MGM) nodes)、查詢節點(SQL (MySQL server) nodes)、與資料節點(Data nodes)。
不同種的節點必須位於不同的主機上,這樣可以保證分享資源所會有的干擾。
management nodes負責存放伺服器設定、啟動/停止節點、管理網路分割、建立與回復備份資料等等。
每個資料表都會被分割成數個部份(fragment),存放在不同的data nodes中,以提供mysql伺服器load balancing的能力。每個fragment,都會在其他data nodes中存放有備份,以提供mysql伺服器 redundancy能力。
實際負責對外的,則是查詢節點。一般的sql查詢都是針對查詢節點來做的。在mysql cluster中,使用者會用到的,只有查詢節點。查詢節點其實就是一般的mysql伺服器,只是使用了 ndb這個storage engine。
在使用management nodes來啟動mysql cluster之後,就不需要使用到management nodes了,這個時候management node可以關掉。所以一個運作中的mysql cluster,至少需要用到兩個主機。但是如果需要能做到load balancing以及reduncancy(or failover),就至少需要用到三台主機。
http://www.ithome.com.tw/plog/index.php ... blogId=257
MySQL Cluster學習筆記-2
fillano | 27 Feb, 2006 16:16
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)
以上。
MySQL Cluster學習筆記-1
fillano | 14 Feb, 2006 09:51
早期的MySQL沒有內建的Cluster機制,通常要建立一個可以redundant的mysql資料庫伺服器,主要是用他的資料複製機制。 mysql可以設定一個master跟數個slave伺服器,然後設定好在master發生資料寫入的時候,同步將資料寫入slave伺服器。
MySQL Cluster的架構,主要是應用一個新的storage engine,叫做NDB。利用這個技術,可以將mysql所需要做的事情分散到三種伺服器節點上,分別是管理節點(Management (MGM) nodes)、查詢節點(SQL (MySQL server) nodes)、與資料節點(Data nodes)。
不同種的節點必須位於不同的主機上,這樣可以保證分享資源所會有的干擾。
management nodes負責存放伺服器設定、啟動/停止節點、管理網路分割、建立與回復備份資料等等。
每個資料表都會被分割成數個部份(fragment),存放在不同的data nodes中,以提供mysql伺服器load balancing的能力。每個fragment,都會在其他data nodes中存放有備份,以提供mysql伺服器 redundancy能力。
實際負責對外的,則是查詢節點。一般的sql查詢都是針對查詢節點來做的。在mysql cluster中,使用者會用到的,只有查詢節點。查詢節點其實就是一般的mysql伺服器,只是使用了 ndb這個storage engine。
在使用management nodes來啟動mysql cluster之後,就不需要使用到management nodes了,這個時候management node可以關掉。所以一個運作中的mysql cluster,至少需要用到兩個主機。但是如果需要能做到load balancing以及reduncancy(or failover),就至少需要用到三台主機。
http://www.ithome.com.tw/plog/index.php ... blogId=257
MySQL Cluster學習筆記-2
fillano | 27 Feb, 2006 16:16
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)
以上。