MySQL Cluster是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的Cluster。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
MySQL Cluster分为SQL节点、数据节点、管理节点(MySQL Cluster提供了API供内部调用,外部应用程序可以通过API借口访问任意层方法) 。
SQL节点提供用户SQL指令请求,解析、连接管理,query优化和响、cache管理等、数据merge、sort,裁剪等功能,当SQL节点启动时,将向管理节点同步架构信息,用以数据查询路由。SQL节点作为查询入口,需要消耗大量cpu及内存资源,可使用分布式管理节点,并在SQL节点外封装一层请求分发及HA控制机制可解决单点及性能问题,其提供了线性扩展功能。
数据节点提供数据存取,持久化、API数据存取访问等功能。数据节点使用分片及多份数据存储,至少存放2份,数据存放于内存中,根据管理节点的规则进行持久化,作为数据存取地,需要大量内存支持。
管理节点维护着节点活动信息,以及实施数据的备份和恢复等。管理节点会获取整个cluster环境中节点的状态和错误信息,并将各个cluster 集群中各个节点的信息反馈给整个集群中其他的所有节点,这对于SQL节点的数据路由规则至关重要,当节扩容时,数据将会被rebuild。管理节点维护着全局规则信息,当节点发生故障时,将会发生故障通告
在整个Cluster体系中,任何一个组建都支持动态扩展,线性扩展,提供了高可用,高性能的解决方案。当新增数据节点时,需要重构存取路径信息,对管理节点将造成数据重构压力,该操作建议在非业务高峰时进行
Cluster使用自动键值识别数据分片方案,用户无需关心数据切片方案(在5.1及以后提供了分区键规则),透明实现分布式数据库,数据分片规则 根据主键、唯一索引和自动行标识rowid完成,再集群个数进行分布,其访问数据犹如RAID访问机制一样,能并行从各个节点抽取数据,散列数据,当使用非主键或分区键访问时,将导致所有簇节点扫描,影响性能,这也是Cluster面对的核心挑战。
下图是官方文档中给出的标准的MySQL Cluster的架构。
2.1 搭建环境
操作系统:SUSE11
MySQL版本:MySQL Cluster 7.1.24
SQL Node 主机名 SUSE150 IP地址 192.168.85.150
Data Node 主机名 SUSE151 IP地址 192.168.85.151
Data Node 主机名 SUSE152 IP地址 192.168.85.152
MGM Node 主机名 SUSE153 IP地址192.168.85.153
安装介质:
MySQL-Cluster-gpl-server-7.1.24-1.sles11.i586.rpm: which supplies the core files needed to run a MySQL Server with NDBCLUSTER storage engine support (that is, as a MySQL Cluster SQL Node)
MySQL-Cluster-gpl-client-7.1.24-1.sles11.i586.rpm: 管理mysql server 的客户端,安装了这个RPM包过后才能用mysql命令,进而进行数据库的管理,写sql 语句
MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm: which supplies the MySQL Cluster Data Node binary(ndbd).
MySQL-Cluster-gpl-management-7.1.24-1.sles11.i586.rpm: which provides the MySQL Cluster management serverbinary (ndb_mgmd),管理集群的Data Node 和sql noe
MySQL-Cluster-gpl-tools-7.1.24-1.sles11.i586.rpm: 该软件包最重要的就是提供了集群管理的客户端(ndb_mgm)The most important of these is the MySQL Cluster management client (ndb_mgm)
2.2 安装介质
SQL Node(192.168.85.150):
rpm -Uhv MySQL-Cluster-gpl-server-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-client-7.1.24-1.sles11.i586.rpm
Data Node(192.168.85.151) :
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
Data Node(192.168.85.152) :
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
MGM Node 192.168.85.153):
rpm -Uhv MySQL-Cluster-gpl-management-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-tools-7.1.24-1.sles11.i586.rpm
SQL Node和Data Node如果/etc下没有my.cnf 就要到/usr/share/mysql下面copy与你系统对应的配置文件并重命名为my.cnf (注意:/usr/share/mysql目录下有多个*.cnf文件,分别为my-huge.cnf,my-large.cnf,my-medium.cnf,my-small.cnf,对于与大中小各种类型的数据设置),本次测试使用my-medium.cnf的配置。
2.3 安装步骤
前提:
四台主机相互之间可以ping通
2.3.1 SQL Node(192.168.85.150)安装
SQL Node(192.168.85.150):
rpm -Uhv MySQL-Cluster-gpl-server-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-client-7.1.24-1.sles11.i586.rpm
vi /etc/my.cnf
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.85.153 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.85.153 # location of management server
2.3.2 Data Node(192.168.85.151)安装
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
vi /etc/my.cnf
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.85.153 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.85.153 # location of management server
2.3.3 Data Node(192.168.85.152)安装
rpm -Uhv MySQL-Cluster-gpl-storage-7.1.24-1.sles11.i586.rpm
vi /etc/my.cnf
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.85.153 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.85.153 # location of management server
2.3.4 MGM Node 192.168.85.153)安装
rpm -Uhv MySQL-Cluster-gpl-management-7.1.24-1.sles11.i586.rpm
rpm -Uhv MySQL-Cluster-gpl-tools-7.1.24-1.sles11.i586.rpm
在mgm node 的配置步骤如下:
shell> mkdir /var/lib/mysql-cluster
shell> cd /var/lib/mysql-cluster
shell> vi config.ini
配置文件时 config.ini,该文件包括以下类似的内容。
[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
[tcp default]
portnumber=2202 # This the default; however, you can use any port that is free
[ndb_mgmd]
id=1
hostname=192.168.85.153 # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster # Directory for management node log files
[ndbd]
id=2
hostname=192.168.85.151 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's data files
[ndbd]
id=3
hostname=192.168.85.152 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's data files
[mysqld]
id=4
hostname=192.168.85.150 # Hostname or IP address
在配置config.ini时data node 的datadir 可以在自己定义的路径下面。
安装和配置都完成以后,接下来就是启动mysql 集群了看是否成功。
2.4 启动Cluster
CLUSTER启动的顺序依次为:管理节点—数据节点—SQL节点
2.4.1 启动方式一
管理节点启动:
登录到SUSE153,然后执行
shell> /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
数据节点启动:
登录到SUSE151和SUSE152,然后执行
第一次启动使用:shell> /usr/sbin/ndbd -ndb-connectstring=192.168.85.153:1186
非第一次启动使用:shell> /usr/sbin/ndbd
SQL节点启动:
登录到SUSE150,然后执行
shell> /usr/bin/mysqld_safe -user=mysql &
2.4.2 启动方式二
1.推荐一般是先启动mgm node,因此在SUSE153上执行:
shell> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
2.然后启动data node ,每个data node 都用以下的命令启动,因此在SUSE151和SUSE152上分别执行如下命令
shell> ndbd
3.启动sql node ,就是启动mysql server 一样的方法,最后在SUSE150上执行
shell> service mysql start或者 /etc/rc.d/init.d/mysqld start启动。
4.所有的节点都启动过后,就回到mgm node,执行一些ndb_mgm的管理命令,看是否能成功。
2.4.3 验证是否启动成功
[root@SUSE153 mysql]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.85.151 (mysql-5.1.63 ndb-7.1.24, Nodegroup: 0, Master)
id=3 @192.168.85.152 (mysql-5.1.63 ndb-7.1.24, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.85.153 (mysql-5.1.63 ndb-7.1.24)
[mysqld(API)] 1 node(s)
id=4 @192.168.85.150 (mysql-5.1.63 ndb-7.1.24)
如果出现这样类似的界面,可以说差不多成功了。