MySQL Cluster是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的簇。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
MySQL Cluster将标准的MySQL服务器与名为NDB的“内存中”簇式存储引擎集成了起来。在我们的文档中,术语NDB指的是与存储引擎相关的设置部分,而术语“MySQL Cluster”指的是MySQL和NDB存储引擎的组合。
MySQL Cluster由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB簇的数据节点,管理服务器,以及(可能)专门的数据访问程序。关于簇中这些组件的关系,请参见下图:
NDB:是一种“内存中”存储引擎,它具有可用性高和数据一致性好的特点。
管理(MGM)节点:这类节点的作用是管理MySQL簇内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令ndb_mgmd启动的。
数据节点:这类节点用于保存簇的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。没有必要有一个以上的副本。数据节点是用命令ndbd启动的。
SQL节点:这是用来访问簇数据的节点。对于MySQL簇,客户端节点是使用NDB簇存储引擎的传统MySQL服务器。典型情况下,SQL节点是使用命令mysqld –ndbcluster启动的,或将ndbcluster添加到my.cnf后使用mysqld启动。
标准MySQL客户端:对于MySQL簇,它们与标准的(非簇类)MySQL没有区别。换句话讲,能够从用PHP、Perl、C、C++、Java、Python、Ruby等编写的现有MySQL应用程序访问MySQL簇。
管理客户端:这类客户端与管理服务器相连,并提供了优雅地启动和停止节点、启动和停止消息跟踪(仅对调试版本)、显示节点版本和状态、启动和停止备份等的命令。
节点 |
IP地址 |
管理(MGM)节点 |
192.168.0.207 |
MySQL服务器(SQL)节点1 |
192.168.0.199 |
MySQL服务器(SQL)节点2 |
192.168.0.203 |
数据(NDBD)节点"A" |
192.168.0.204 |
数据(NDBD)节点"B" |
192.168.0.205 |
由一台机器上的vmware提供的5台系统为redhat5 linux的虚拟机(主机环境2003)。
mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz 多数文档都说下载MySQL-max,但是在超过5.1版本中只提供了mysql-cluster 效果应该一样。
安装方法和安装普通的mysql数据库二进制包相同。如果遇到已经安装有数据库的机器进行卸载。方法见mysql的卸载。
1) 检查你的/etc/passwd和/etc/group文件(或使用操作系统提供的用于管理用户和组的工具),查看在系统上是否已存在mysql组和mysql用户,这是因为某些操作系统会将其作为安装进程的一部分予以创建。如果它们不存在,创建新的mysql用户组,然后为该组添加1个mysql用户。
2) groupadd mysql
3) useradd -g mysql mysql
4) 进入包含下载文件的目录,解包档案文件,并创建与mysql-max可执行文件的symlink。注意,根据MySQL的版本号,实际的文件名和目录名会有所不同:
a) cd /var/tmp
b) tar -xzvf -C /usr/local/bin mysql-max-5.1.2-alpha-pc-linux-gnu-i686.tar.gz
c) ln -s /usr/local/bin/mysql-max-5.1.2-alpha-pc-linux-gnu-i686 mysql
5) 进入mysql目录,运行所提供的用于创建系统数据库的脚本:
a) cd mysql
b) scripts/mysql_install_db --user=mysql
6) 为MySQL服务器和数据目录设置必要的权限:
a) chown -R root . (注意“.”符号)
b) chown -R mysql data (在每台运行数据节点的机器上,数据目录是/usr/local/mysql/data。配置管理节点时将用到这类信息)
c) chgrp -R mysql . (注意“.”符号)
7) 将MySQL启动脚本拷贝到恰当的目录下,使之成为可执行的脚本,并设置它以便在启动操作系统时启动:
a) cp support-files/mysql.server /etc/rc.d/init.d/
b) chmod +x /etc/rc.d/init.d/mysql.server
c) chkconfig --add mysql.server
8) bin/mysqladmin -u root -p password 修改root密码。
9) /usr/local/mysql/bin/mysqld_safe --user=mysql& 启动数据库,重启自动启动(如出现 Starting mysqld daemon with databases from /usr/local/mysql/data代表正常启动mysql服务了, 按Ctrl + C 跳出)
10) /usr/local/mysql/bin/mysql -u root –p 登陆数据库。(测试安装成功否)
11) 在其他存储节点和sql节点上重复上述操作。
对于MGM(管理)节点,不需要安装mysqld可执行文件,仅需安装用于MGM服务器和客户端的二进制文件,这类文件可在下载的-max档案中找到。再次假定你将该文件放在了/var/tmp目录下,引导系统时(也就是说使用sudo, su root或系统的等效命令后,假定具有系统管理员账户的权限),执行下述步骤,在簇管理节点主机上安装ndb_mgmd和ndb_mgm:
1) 即如/var/tmp目录,从档案文件中将ndb_mgm和ndb_mgmd提取到恰当的目录下,如/usr/local/bin。
a) cd /var/tmp
b) tar -zxvf mysql-max-5.1.2-alpha-pc-linux-gnu-i686.tar.gz /usr/local/bin '*/bin/ndb_mgm*'
2) 进入解包文件所在的目录,然后使这两个文件成为可执行的:
a) cd /usr/local/bin
b) chmod +x ndb_mgm*
1) 数据节点所需的my.cnf文件相当简单。配置文件应位于/etc目录下,并能用任何文本编辑器进行编辑(如有必要,创建该文件),例如:
a) vi /etc/my.cnf
2) 对于本示例中的每个数据节点和SQL节点,my.cnf文件类似于:
[MYSQLD]
ndbcluster # run NDB engine
ndb-connectstring=192.168.0.207 # location of MGM node
[MYSQL_CLUSTER]
ndb-connectstring=192.168.0.207 # location of MGM node
3) 在其他存储节点和sql节点上重复上述操作。
1) 配置MGM节点的第一步是创建目录,该目录用于存放配置文件,然后创建配置文件本身。例如(以根用户身份运行):
a) mkdir /var/lib/mysql-cluster
b) cd /var/lib/mysql-cluster
c) vi config.ini
2) 对于我们的典型设置,config.ini文件应类似于:
# Options affecting ndbd processes on all data nodes:
[NDBD DEFAULT]
NoOfReplicas=2 # Number of replicas
DataMemory=80M # 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=192.168.0.207 # 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=192.168.0.204 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's datafiles
# Options for data node "B":
[NDBD]
hostname=192.168.0.205 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's datafiles
# SQL node options:
[MYSQLD]
# (additional mysqld connections can be specified for this node for various
hostname=192.168.0.203 # Hostname or IP address
[MYSQLD]
hostname=192.168.0.199
1) 在管理主机上,从系统shell发出下述命令以启动MGM节点进程:
a) ndb_mgmd -f /var/lib/mysql-cluster/config.ini (如果不能直接使用ndb_mgmd请到安装目录下执行此命令)
2) 在每台数据节点主机上,对于首次启动,运行下述命令启动NDBD进程:
a) ndbd --initial(如果不能直接使用ndb_mgmd请到安装目录下执行此命令)
b) 注意,仅应在首次启动ndbd时,或在备份/恢复或配置变化后重启ndbd时使用“--initial”参数,这很重要。原因在于,该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括恢复用日志文件。
3) ndb_mgm 进入管理节点客户端。
a) SHOW 命令可以显示节点运行情况。
Connected to Management Server at: 192.168.0.207:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.204 (mysql-5.1.30 ndb-6.3.20, Nodegroup: 0, Master)
id=3 @192.168.0.205 (mysql-5.1.30 ndb-6.3.20, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.207 (mysql-5.1.30 ndb-6.3.20)
[mysqld(API)] 2 node(s)
id=4 @192.168.0.203 (mysql-5.1.30 ndb-6.3.20)
id=5 @192.168.0.199 (mysql-5.1.30 ndb-6.3.20)
b) ctrl+c退出管理节点客户端
1) 登陆任意一个sql节点A.
2) 创建一个表:ENGINE必须为NDB或者NDBCLUSTER
Use test
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;
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);
3) 登陆另外一个sql节点B
4) Use test
Show tables;
5) 可以看到刚才创建的表City。代表配置成功。
1) ndb_mgm -e shutdown 该命令将恰当地中止ndb_mgm、ndb_mgmd以及任何ndbd进程。注意,这里的“-e”选项用于将命令从shell传递到ndb_mgm客户端.
2) mysqladmin -u root -p shutdown 可中止SQL节点。
1) ndb_mgmd -f /var/lib/mysql-cluster/config.ini
重启cluster. 在管理主机上(本设置中为192.168.0.207)
2) ndbd 在每台数据节点主机上(192.168.0.204和192.168.0.205)
本文属于参照文档实践总结文章,多数数据来自文档,也包括一些其他文章中参考而来。