- 論壇徽章:
- 1
|
這里不再做更新了,原文更新見我的blog吧.
http://blog.sysv.cn/?action=show&id=70
因幫朋友忙,實現(xiàn)mysql的雙機復制。于是到官方去看文檔,看到關(guān)于MySQL簇這塊內(nèi)容,發(fā)現(xiàn)其中提及在FreeBSD上可以實現(xiàn)。但除了給個編譯參數(shù)外就沒有其他說明手工編譯實現(xiàn)mysql NDB的內(nèi)容。加之,GG上搜了下沒發(fā)現(xiàn)FreeBSD下實現(xiàn)NDB文檔。于是乎,萌發(fā)了搭建個基于FreeBSD的MySQL簇的想法。
經(jīng)過幾天的抓摸,最終實現(xiàn)MySQL簇。本文文檔是MySQL簇實現(xiàn)過程中的編碼安裝筆記,且主體思路只是實現(xiàn)MySQL簇在FreeBSD的運行,不對性能和穩(wěn)定性進行測試。因此,在此算是拋磚引玉,希望大家指正。
準備工作:
硬件裝備:
4-5臺 pc server
1臺 100Mb交換機
系統(tǒng)裝備:
FreeBSD 7.2 release, Mini方式安裝完成后, 通過csup獲取ports源和src源.
軟件裝備:
通過ports來獲取,本次實驗NDB cluster的方案用的是mysql-server-5.1.40版本
預規(guī)劃:
預留地址: 10.10.10.1 - 10.10.10.7
管理(MGM)節(jié)點: 10.10.10.8 - 10.10.10.10
管理客戶端: 10.10.10.11 - 10.10.10.15
MySQL客戶端: 10.10.10.16 - 10.10.10.63
SQL節(jié)點(NDB): 10.10.10.64 - 10.10.10.127
數(shù)據(jù)節(jié)點(Data Node): 10.10.10.128 - 10.10.10.254
現(xiàn)網(wǎng)規(guī)劃:
MGM節(jié)點: 10.10.10.10
SQL節(jié)點: 10.10.10.18
數(shù)據(jù)節(jié)點: 10.10.10.129 / 10.10.10.130
拓撲結(jié)構(gòu):
NDB_Cluster.png (43.12 KB, 下載次數(shù): 112)
下載附件
2009-12-11 15:36 上傳
實施步驟:
在各節(jié)點系統(tǒng)/etc/hosts填加:
10.10.10.10 DB_MGM //管理節(jié)點
10.10.10.18 DB_SQL_1 //SQL節(jié)點
10.10.10.129 DB_DataNode_1 //Node節(jié)點1
10.10.10.130 DB_DataNode_2 //Node節(jié)點2
PORTS編譯安裝:
# cd /usr/ports/database/mysql51-client
# make WITH_CHARSET=utf8 WITH_XCHARSET=complex install clean
# cd /usr/ports/database/mysql51-server
# make WITH_CHARSET=utf8 WITH_XCHARSET=complex BUILD_STATIC=yes WITHOUT_INNODB=yes BUILD_OPTIMIZED=yes WITH_NDB=yes install clean
#說明: 各節(jié)點編譯方式都是一樣的,但需求不同,MGM節(jié)點的運行進程序為ndb_mgmd,SQL節(jié)點運行程序為mysqld,Node節(jié)點為ndbd。
#編譯完成后,SQL節(jié)點和Node節(jié)點需要使用mysql_install_db命令來初使化一次哈。
pkg_info得到的安裝包
gettext-0.17_1 GNU gettext package
gmake-3.81_3 GNU version of 'make' utility
libiconv-1.11_1 A character set conversion library
libtool-1.5.26 Generic shared library support script
mysql-client-5.1.40 Multithreaded SQL database (client)
mysql-server-5.1.40 Multithreaded SQL database (server)
配置SQL節(jié)點 && Node節(jié)點:
配置my.cnf(由于默認安裝,我的my.cnf放在/var/db/mysql/data/)
在對應位置增加以下項后保存退出
# Options for mysqld process:
[MYSQLD]
ndbcluster
ndb-connectstring=DB_MGM
# Options for ndbd process:
[MYSQL_CLUSTER]
ndb-connectstring=DB_MGM
配置MGM節(jié)點:
# mkdir /usr/local/etc/mysql-cluster
# cd /usr/local/etc/mysql-cluster
# cat > config.ini << EOF
# Options affecting ndbd processes on all data nodes:
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
# TCP/IP options:
[TCP DEFAULT]
portnumber=2202
# Management process options:
[NDB_MGMD]
id=1
hostname=DB_MGM
datadir=/usr/local/etc/mysql-cluster
# Options for data node "A":
[NDBD]
id=2
hostname=DB_DataNode_1
datadir=/var/db/mysql
# Options for data node "B":
[NDBD]
id=3
hostname=DB_DataNode_2
datadir=/var/db/mysql
# SQL node options:
[MYSQLD]
id=4
hostname=DB_SQL_1
EOF
架構(gòu)各節(jié)點的初始化以及啟動:
啟動順序:
管理服務(wù)器(ndb_mgmd) -> 存儲引擎節(jié)點(ndbd) -> MySQL服務(wù)器進程(mysqld)
關(guān)閉順序:
MySQL服務(wù)器進程(mysqld) -> 存儲引擎節(jié)點(ndbd) -> 管理服務(wù)器(ndb_mgmd)
MGM節(jié)點的啟動:
/usr/local/libexec/ndb_mgmd -f /usr/local/etc/mysql-cluster/config.ini
SQL節(jié)點的啟動:
/usr/local/etc/rc.d/mysql-server start
DataNode的啟動:
初始化啟動:
su -l mysql -c "/usr/local/libexec/ndbd --initial --ndb-mgmd-host=DB_MGM"
#注意,僅應在首次啟動ndbd時,或在備份/恢復或配置變化后重啟ndbd時使用“--initial”參數(shù)
日常啟動:
su -l mysql -c "/usr/local/libexec/ndbd --ndb-mgmd-host=DB_MGM"
啟動后進程狀態(tài):
MGM節(jié)點:
# sockstat -4l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root ndb_mgmd 94443 3 tcp4 *:1186 *:*
root sendmail 623 4 tcp4 127.0.0.1:25 *:*
root sshd 608 4 tcp4 *:22 *:*
root syslogd 482 7 udp4 *:514 *:*
SQL節(jié)點:
# sockstat -4l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql mysqld 13635 14 tcp4 *:3306 *:*
root sshd 14530 4 tcp4 *:22 *:*
root syslogd 13911 7 udp4 *:514 *:*
root sendmail 599 4 tcp4 127.0.0.1:25 *:*
DataNode節(jié)點:
# sockstat -4l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql ndbd 5780 7 tcp4 10.10.10.129:2202 *:*
root sshd 885 4 tcp4 *:22 *:*
root sendmail 633 4 tcp4 127.0.0.1:25 *:*
root syslogd 495 7 udp4 *:514 *:*
查看連接、狀態(tài)等情況:
MGM節(jié)點:
MGM_Node# sockstat -4c
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root ndb_mgmd 94443 5 tcp4 127.0.0.1:58765 127.0.0.1:1186
root ndb_mgmd 94443 8 tcp4 127.0.0.1:1186 127.0.0.1:58765
root ndb_mgmd 94443 9 tcp4 10.10.10.10:1186 10.10.10.130:51676
root ndb_mgmd 94443 10 tcp4 10.10.10.10:1186 10.10.10.129:60067
root ndb_mgmd 94443 11 tcp4 10.10.10.10:1186 10.10.10.18:49390
MGM_Node# pwd
/usr/local/etc/mysql-cluster
MGM_Node# ll -G
total 140
-rw-r--r-- 1 root wheel - 486B Nov 19 23:18 config.ini
-rw-r--r-- 1 root wheel - 6B Nov 20 00:12 ndb_1.pid
-rw-r--r-- 1 root wheel - 133K Dec 11 11:24 ndb_1_cluster.log
-rw-r--r-- 1 root wheel - 264B Nov 20 01:02 ndb_1_out.log
SQL節(jié)點:
SQL_Node_1# sockstat -4c
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql mysqld 13635 10 tcp4 10.10.10.18:49390 10.10.10.10:1186
mysql mysqld 13635 12 tcp4 10.10.10.18:65336 10.10.10.129:2202
mysql mysqld 13635 13 tcp4 10.10.10.18:56529 10.10.10.130:2202
SQL_Node_1# pwd
/var/db/mysql
SQL_Node_1# ll -G
total 20544
-rw-rw---- 1 mysql mysql - 7.3K Nov 19 22:44 SQL_Node_1.err
-rw-rw---- 1 mysql mysql - 6B Nov 19 22:44 SQL_Node_1.pid
-rw-rw---- 1 mysql mysql - 5.0M Nov 19 22:49 ib_logfile0
-rw-rw---- 1 mysql mysql - 5.0M Nov 19 20:27 ib_logfile1
-rw-rw---- 1 mysql mysql - 10M Nov 19 22:49 ibdata1
-rw-r--r-- 1 mysql mysql - 144B Nov 19 20:34 my.cnf
drwx------ 2 mysql mysql - 2.0K Nov 19 20:36 mysql
drwx------ 2 mysql mysql - 512B Nov 19 23:17 world
DataNode1節(jié)點:
Data_Node_1# sockstat -4c
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql ndbd 5780 3 tcp4 10.10.10.129:60067 10.10.10.10:1186
mysql ndbd 5780 8 tcp4 10.10.10.129:2202 10.10.10.130:63398
mysql ndbd 5780 20 tcp4 10.10.10.129:2202 10.10.10.18:65336
Data_Node_1# pwd
/var/db/mysql
chunk2# ll -G
total 1120
drwxr-x--- 3 mysql mysql 512 Nov 19 23:23 BACKUP
-r-------- 1 mysql mysql 144 Nov 19 20:59 my.cnf
drwx------ 2 mysql mysql 2048 Nov 19 20:32 mysql
-rw-r--r-- 1 mysql mysql 5 Nov 19 23:08 ndb_2.pid
-rw-r--r-- 1 mysql mysql 568 Nov 19 21:36 ndb_2_error.log
drwxr-x--- 9 mysql mysql 512 Nov 19 21:00 ndb_2_fs
-rw-r--r-- 1 mysql mysql 14042 Nov 19 23:58 ndb_2_out.log
-rw-r--r-- 1 mysql mysql 1085744 Nov 19 21:36 ndb_2_trace.log.1
-rw-r--r-- 1 mysql mysql 1 Nov 19 21:36 ndb_2_trace.log.next
DataNode2節(jié)點:
Data_Node_2# sockstat -4c
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql ndbd 5601 3 tcp4 10.10.10.130:51676 10.10.10.10:1186
mysql ndbd 5601 9 tcp4 10.10.10.130:63398 10.10.10.129:2202
mysql ndbd 5601 17 tcp4 10.10.10.130:2202 10.10.10.18:56529
DataNode2# pwd
/var/db/mysql
DataNode2# ll -G
total 30
drwxr-x--- 3 mysql mysql 512 Nov 19 23:24 BACKUP
-r-------- 1 mysql mysql 144 Nov 19 21:00 my.cnf
drwx------ 2 mysql mysql 2048 Nov 19 20:33 mysql
-rw-r--r-- 1 mysql mysql 5 Nov 19 23:09 ndb_3.pid
drwxr-x--- 9 mysql mysql 512 Nov 19 21:01 ndb_3_fs
-rw-r--r-- 1 mysql mysql 18734 Nov 19 23:59 ndb_3_out.log
建立和導入測試數(shù)據(jù):
注意: 數(shù)據(jù)的操作只能SQL節(jié)點上完成,建庫時須在涉及的每個SQL節(jié)點重復輸入一次命令,測試數(shù)據(jù)為官方下的world庫,下載地址見參考文獻章節(jié)
建立數(shù)據(jù)庫:
# mysql mysql> CREATE DATABASE world DEFAULT CHARACTER SET = utf8 COLLATE utf8_general_ci; //5.02之前版本須使用命令
# mysql> CREATE SCHEMA world DEFAULT CHARACTER SET = utf8 COLLATE utf8_general_ci; //#5.02之后版可使用命令:
# mysql> FLUSH TABLES;
導入數(shù)據(jù):
//world數(shù)據(jù)樣本默認存儲引擎為MyISAM,因此注意在導入每個表數(shù)據(jù)工作前需將原表的存儲引擎的內(nèi)容改為NDBCLUSTER,更改完成后再導入。
# mysql world < world.sql.ndbcluster
官方文檔中摘抄的一些注意事項
注意:
1. 僅管能夠按任何順序啟動節(jié)點,但官方建議,應首先啟動管理節(jié)點,然后啟動存儲節(jié)點,最后啟動SQL節(jié)點
2. 簇管理節(jié)點的默認端口是1186,數(shù)據(jù)節(jié)點的默認端口2202。從MySQL 5.0.3開始,該限制已被放寬,簇能夠根據(jù)空閑的端口自動地為數(shù)據(jù)節(jié)點分配端口。
3. 數(shù)據(jù)節(jié)點的最大數(shù)目為48(mysql 5.1版本)
4. 所有的MySQL簇表必須有主鍵,這點極其重要
5. 所有的數(shù)據(jù)節(jié)點應具有相同的RAM量,這是因為,簇中任何數(shù)據(jù)節(jié)點所能使用的內(nèi)存均不超過任意單獨數(shù)據(jù)節(jié)點的最低可用內(nèi)存。換句話講,如果有三臺運行簇數(shù)據(jù)節(jié)點的計算機,在其中兩臺計算機上,有3GB用于保存簇數(shù)據(jù)的RAM,另一臺計算機只有1GB RAM,那么每個數(shù)據(jù)節(jié)點僅能為簇貢獻1GB。
6. 簇節(jié)點能夠通過下述三種協(xié)議中的任何一種進行通信:TCP/IP、SHM(共享內(nèi)存)和SCI(規(guī)模可擴展的計算機連接接口)。
7. 表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項創(chuàng)建,或用ALTER TABLE選項更改,以使用NDB簇存儲引擎在簇內(nèi)復制它們。
8. 對于IndexMemory和DataMemory,重要的是,總的數(shù)據(jù)庫大小是各節(jié)點組的所有數(shù)據(jù)內(nèi)存和所有索引內(nèi)存之和。每個節(jié)點組用于保存復制信息,因此,如果有4個節(jié)點和2個副本,將有2個節(jié)點組。對于每個數(shù)據(jù)節(jié)點,可用的總數(shù)據(jù)內(nèi)存是2*DataMemory。
9. 強烈建議為所有的節(jié)點設(shè)置相同的DataMemory值和IndexMemory值。由于數(shù)據(jù)是平均分布在簇中的所有節(jié)點上,任何節(jié)點可用的最大空間不超過簇中最小節(jié)點的可用空間。
10. 啟動ndbd時,它實際上將啟動兩種進程。第1種進程稱為“angel process”(天使進程),它的唯一任務(wù)是發(fā)現(xiàn)執(zhí)行進程在何時完成,然后重啟ndbd進程(如果作了該配置的話)。因此,如果你打算使用Unix的kill命令殺死ndbd進程,就需要殺死這兩個進程。中止ndbd進程的更恰當方法是使用管理客戶端,并通過該管理客戶端停止進程。
11. 注意,在MySQL 5.1中,NDB簇不支持自動發(fā)現(xiàn)數(shù)據(jù)庫的功能,這點很重要(請參見17.8節(jié),“MySQL簇的已知限制”)。這意味著,一旦在一個數(shù)據(jù)節(jié)點上創(chuàng)建了世界(world)數(shù)據(jù)庫和它的表,在簇中的每個SQL節(jié)點上還需要發(fā)出命令CREATE DATABASE world(從MySQL 5.0.2開始,可以使用CREATE SCHEMA world取而代之),后跟FLUSH TABLES。這樣,節(jié)點就能識別數(shù)據(jù)庫并讀取其表定義。
參考文獻:
MySQL 5.1參考手冊 :: 17. MySQL簇
http://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html
MySQL集群配置
http://bbs3.chinaunix.net/viewthread.php?tid=640588&extra=page%3D1%26amp%3Bfilter%3Ddigest
相關(guān)軟件:
mysql 下載
http://dev.mysql.com/downloads/
樣本數(shù)據(jù)
http://dev.mysql.com/doc/ //在此頁面可找個world的樣本庫
[ 本帖最后由 5sky 于 2009-12-18 22:56 編輯 ] |
|