【IT168技术文档】
前言
由于 MySQLCluster 完全使用RAM 来作数据(包含索引)的抄写,所以data-node依照数据库的使用量需有相应足够的
RAM,其两者关系可以参考官方的算法。
这个Cluster除了可以做到redundancy,还能透过多个datanode做到load balance。
实做环境介绍
架构示意图如下,图片引用自官方网站的数据,图标内的IP请以上述表格所列的为主,而且本篇实作将Management
node和 SQLnode装在同一台,与下图有些不同。

各个不同组件的连接关系,请参考下图:

mgmnode-用来启动/关闭Cluster,及其他管理作业,实际DB运作不需要此程序。
SQLnode-用来连结WebAP与DB,可建置多个以提高多个的AP联机效率,实际DB数据不存放在此,扩充node时,至少需要有一台可正常运作。
data-node-实际数据库的储存位置,并负责彼此抄写的任务,愈多台可提高存取效率
安装设定Management&SQLnode
到官方下载需要的套件文件,请参考上方表格的内容。
MySQL-5.0.67MySQL-6.3.20
rpm -ivh MySQL-client-community-5.0.67-0.rhel5.i386.rpmrpm -ivh MySQL-shared-compat-5.0.67-0.rhel5.i386.rpm
rpm -ivh MySQL-devel-community-5.0.67-0.rhel5.i386.rpm
rpm -ivh MySQL-server-community-5.0.67-0.rhel5.i386.rpm
以上套件是SQLnode会用到的
rpm -ivh perl-HTML-Template-2.9-1.el5.rf.noarch.rpm
rpm -ivh MySQL-clustermanagement-community-5.0.67-0.rhel5.i386.rpm
rpm -ivh MySQL-clustertools-community-5.0.67-0.rhel5.i386.rpm
以上套件是Managementnode会用到,其中perl-HTML-Template不在官方网站的下载连结,请自行用Google搜寻。
新增配置文件:
/etc/my.cnf(SQLnode 会用到)
# Options for mysqld process:
[MYSQLD]
ndbcluster # run NDB engine
ndb-connectstring=10.10.10.131 # location of MGM node
# Options for ndbd process:
[MYSQL_CLUSTER]
ndb-connectstring=10.10.10.131 # location of MGM node
/var/lib/mysql-cluster/config.ini(Managementnode会用到)
# Options affecting ndbd processes on all data nodes:
[NDBD DEFAULT]
NoOfReplicas=2 # Number of replicas
DataMemory=256M # How much memory to allocate for data storage
IndexMemory=18M # How much memory to allocate for index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
# TCP/IP options:
[TCP DEFAULT]
portnumber=2202 # This the default; however, you can use any
# port that is free for all the hosts in cluster
# Note: It is recommended beginning with MySQL 5.0 that
# you do not specify the portnumber at all and simply allow
# the default value to be used instead
# Management process options:
[NDB_MGMD]
hostname=10.10.10.131 # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster # Directory for MGM node logfiles
# Options for data node "A":
[NDBD]
# (one [NDBD] section per data node)
hostname=10.10.10.132 # Hostname or IP address
datadir=/mysql-data # Directory for this data node's datafiles
# Options for data node "B":
[NDBD]
hostname=10.10.10.133 # Hostname or IP address
datadir=/mysql-data # Directory for this data node's datafiles
# SQL node options:
[MYSQLD]
hostname=10.10.10.131 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
安装设定Datanode
到官方下载需要的套件文件,请参考上方表格的内容。
MySQL-5.0.67MySQL-6.3.20
rpm -ivh MySQL-clusterstorage-community-5.0.67-0.rhel5.i386.rpm
新增配置文件
/etc/my.cnf
# Options for mysqld process:
[MYSQLD]
ndbcluster # run NDB engine
ndb-connectstring=10.10.10.131 # location of MGM node
# Options for ndbd process:
[MYSQL_CLUSTER]
ndb-connectstring=10.10.10.131 # location of MGM node
第一次启动作初使化
先启动Managemnetconsole,登入Management& SQLnode,执行
nbd_mgmd -f /var/lib/mysql-cluster/config.ini
在datanode#1及#2,分别执行
ndbd --initial
注意,第一次执行时才需要加上--initial,尔后启动时,就不能在加此参数,除非是要重新作初始化。
在Management&SQLnode启动MySQL
servicemysqlstop servicemysqlstart
在Managementnode可以检查Cluster状态,执行
ndb_mgm
>show
ConnectedtoManagement Serverat:10.10.10.131:1186
ClusterConfiguration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.132 (Version:5.0.67, Nodegroup:0)
id=3 @10.10.10.133 (Version:5.0.67, Nodegroup:0, Master)
[ndb_mgmd(MGM)]1 node(s)
id=1 @10.10.10.131 (Version:5.0.67)
[mysqld(API)] 1 node(s)
id=4 @10.10.10.131 (Version:5.0.67)
>allstatus
Node2:started(Version5.0.67) Node3:started(Version5.0.67)
MyTips:
? data-node状态要显示started才算成功,如果是starting,表示尚未启动完成。
? 由于 config.ini 设定 NoOfReplicas=2,所以要启动两个 data-node才会显示状态为 started。
? 若 mysqld(API)无法连接,请检查 SQLnode的 MySQL服务程序。
维护管理Cluster
启动顺序:mgmnode->data-node->SQLnode
启动指令:
? mgmnode-ndb_mgmd -f/var/lib/mysql-cluster/config.ini
? datanode-ndbd
? SQLnode-servicemysqlstart 在线维护管理方式(Rolling Restart)*DBA必读* 官方手册:http://dev.mysql.com/doc/refman/5.0/...g-restart.html
使用时机:
? 变更Cluster的配置文件
? Cluster软件升级
? Node更换硬件或其他维修时
? Cluster状态异常,需重设 Cluster时。
? 释放有效资源可让 Cluster重复使用。
各node的在线维护方式:
? mgmnode
1. 关闭所有mgmnode(ndb_mgmd程序)
2. 修改配置文件
3. 重启所有的 mgmnode
? datanode
关闭一台,做完这台的维护工作后重新启动,再关闭另一台。
? SQLnode
关闭一台,做完这台的维护工作后重新启动,再关闭另一台。
Cluster关机
要关闭整个Cluster,可以在Managementnode,执行
ndb_mgm -eshutdown
所有的datanode(ndbd)程序会自动停止,且Cluster机制不再运行。
MyTips:
? 在线扩充SQLnode时,除了重启ndb_mgmd 外,还要重启所有的datanode(可分别重启,不会有downtime)。
简单的Cluster验证
官方手册:http://dev.mysql.com/doc/refman/5.0/...a-queries.html
数据库要设为Cluster有些重点必须先知道:
? Table的storageengine须设为NDBCLUSTER。
? Table必须有一个 primarykey,若没有,系统会自动新增一个隐藏的 primarykey。
? 新增数据库时,需在 Cluster的每个 SQLnode手动执行新增该数据库名称。
? 新增 SQLnode时,需在该 node手动新增那些要作同步的数据库名称。
在SQLnode新增一笔测试的数据库mydb。
CREATESCHEMAmydb;
新增一个city的table的汇入档city_table.sql
DROP TABLE IF EXISTS `City`;CREATE TABLE `City` (
`ID` int(11) NOT NULL auto_increment,
`Name` char(35) NOT NULL default '',
`CountryCode` char(3) NOT NULL default '',
`District` char(20) NOT NULL default '',
`Population` int(11) NOT NULL default '0',PRIMARY KEY (`ID`)
) ENGINE=NDBCLUSTER DEFAULT CHARSET=latin1;
INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
将此表汇入数据库mydb
mysql -u root-p mydb< city_table.sql
成果展现
Cluster状态:ndb_mgm ->show
[root@mgm_sql-node ~]# ndb_mgm
-- NDB Cluster -- Management Client --ndb_mgm> show
Connected to Management Server at: 10.10.10.131:1186
Cluster Configuration

状况模拟:
datenode#1-down datanode#2-up mgmnode-up
SQLnode#1 -存取正常
SQLnode#2 -存取正常
datenode#1-down datanode#2-up mgmnode-down
SQLnode#1 -存取正常
SQLnode#2 -存取正常
datenode#1-down datanode#2-up mgmnode-down SQLnode#1 -down
SQLnode#2 -存取正常
