MySQL Cluster 实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过NDB Cluster(简称NDB)存储引擎来实现。也就是数据库集群,最开始的版本是将数据放在内存,新的版本是只将索引放入内存。内存和网络影响 MySQL Cluster 性能。
一安装
1.方法有多种,RPM包,源码包,甚至有个直接解压的无安装版本。注意,源码安装下载时不要选择社区版,要下载MySQL Cluster,否则安装完成没有NDB存储引擎。
目前最新版本为7.2,稳定版本为7.1 ,官方下载链接
http://dev.mysql.com/downloads/cluster/#downloads
MySQL Cluster由管理节点(MGM),存储节点(NDB), SQL节点构成。
硬件信息:使用三台虚拟机作测试。NDB和SQL共用一台机器。
1.MGM ,IP:192.168.234.133
2.NDB 1,IP:192.168.234.130
3.NDB 2 ,IP:192.168.234.129
4:SQL 1,IP192.168.234.130
5 SQL 2,IP 192.168.234.129
2.SQL节点安装
采用源码安装
cmake 增加参数-DWITH_NDBCLUSTER_STORAGE_ENGINE=1
其它步骤参考源码安装步骤, 安装完成后修改my,cnf配置文件
增加
[mysqld]
ndbcluster #启用ndb存储引擎
[MySQL_cluster]
ndb-connectstring = 192.168.234.133 #管理节点IP
3.NDB节点安装
可以采用sql节点一样源码安装,也可以下载对应rpm包只安装NDB存储引擎
4.MGM节点安装
复制ndb_mgm和ndb_mgmd到自建目录就行。
mkdir /usr/local/mysql-cluster && chmod 755 /usr/local/mysql-cluster
mkdir /home/mysql && chmod 755 /home/mysql
scp [email protected]:/usr/local/mysql/bin/ndb_* /usr/local/mysql-cluster
修改配置文件config.ini
[NDBD DEFAULT]
NoOfReplicas: 2
DataMemory: 64M
IndexMemory: 10M
BackupMemory: 64M
[MGM DEFAULT]
PortNumber: 1186
DataDir=/home/mysql
[NDB_MGMD]
Id: 1
HostName: 192.168.234.133
ArbitrationRank: 1
[NDBD]
Id: 2
HostName: 192.168.234.130
DataDir=/home/mysql
[NDBD]
Id: 3
HostName: 192.168.234.129
DataDir=/home/mysql
[API]
Id: 4
HostName: 192.168.234.130
[API]
Id: 5
HostName: 192.168.234.129
二启动.
建议的各节点启动顺序是 mgm-ndb-sql
1.mgm 节点
ndb_mgmd -f ./config.ini --initial--configdir=/usr/local/mysql-cluster/
第一次需要加--initial
2.ndb节点
ndbd --initial
第一次需要加--initial,后面运行就不用了,否则会初始化数据,造成数据丢失。
3.sql 节点
service mysqld start
三。测试
最开始,我误解为MySQL Cluster和SQL Server Cluster 一样,外面应用连接一个虚拟IP,由MySQL Cluster做数据冗余和负载均衡。
但其实MySQL Cluster只有数据冗余,没有负载均衡,连接只能连SQL节点。如SQL节点crash,只能应用切换到另一个SQL节点。
和mysql-proxy配合使用倒是可以实现负载均衡,数据冗余 和故障转移。
连接到sql 节点
mysql -h 192.168.234.129 -u root -p
mysql>create database cluster_test;
mysql> use cluster_test;
mysql>create table t1 (id int not null auto_increment, s1 int null,primary key (id) )engine=ndb;
mysql> insert into t1 (s1) select 1;
mysql> select * from t1;
+----+------+
| id | s1 |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.00 sec)
连接另一个sql节点
mysql -h 192.168.234.130 -u root -p
mysql> select * from cluster_test. t1;
+----+------+
| id | s1 |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.11 sec)
可见数据成功冗余。
kill掉一个NDB节点ndbd进程,查询依然正常。