MySQL Cluster 是用于解决高可用和高可靠性的解决方案。
MySQL Cluster 具有故障恢复、节点修复、数据同步、非单点故障等优点。
MySQL Cluster是为提供99.999%以上的高可用性而设计的,采用分布式节点设计技术,不会因为单点故障而使整个Cluster瘫痪。
MySQL Cluster由3类节点组成:管理节点、数据节点、SQL节点。
1:数据节点
数据节点是整个系统中最主要的节点,它负责存储所有的数据以及数据的同步复制,以防单个或者更多的节点故障而使MySQL Cluster瘫痪。
2:管理节点
管理节点用于管理系统的配置信息,只在启动和重新配置MySQL Cluster的时候才起作用。一般情况下只需要1个管理节点,当然也可以运行几个管理节点。
3:SQL节点
SQL节点用于数据节点存取数据,提供统一的标准SQL接口,跟平常的MySQL Serve一样,让应用程序和开发人员不用关心系统内部究竟是如何运行的。
os:centos5/rhel5 mysql version:5.1.22 rc
准备:
mysql-max-5.1.5-alpha-linux-i686-glibc23.tar
环境:
管理节点:
IP:192.168.0.118 主机名:mgm
存偖节点1/sql节点1: 192.168.0.146 主机名: node1
存偖节点2/sql节点2: 192.168.0.221主机名: node2
三台主机的hosts 文件要一样
192.168.0.118 mgm
192.168.0.146 node1
192.168.0.221 node2
这里只有用一台管理节点
存偖节点和SQL节点分别在在两台电脑上,也就是存偖节点同时也当数据节点
========================================================================
安装:分别在三台电脑安装数据库
shell>tar xvf mysql-max-5.1.5-alpha-linux-i686-glibc23.tar
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> mv mysql-max-5.1.5-alpha-linux-i686-glibc23 mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
复制代码
CP启动脚本到/etc/init.d 目录
shell>cp support-files/mysql.server /etc/init.d/mysqld
复制代码
停止mysql 数据库
复制代码
测试三台上面的数据库启动是否正常
二:配置管理节点
MGM:
1,配置/etc/my.cnf文件
在后面添加如下内容
[ndb_mgm]
connect-string=mgm
[ndb_mgmd]
config-file=/etc/config.ini
##connect-string=mgm ##ndb_mgm 管理节点的计算机名
##config-file=/etc/config.ini ##ndb_mgmd的启动所要的配置文件
复制代码
2,ndb_mgmd的配置文件 config.ini配置如下
#
# Default settings for all data nodes
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=644245094
IndexMemory=322122547
#
# COMPUTER DEFINITIONS
#
# Datanode Computer #1
[COMPUTER]
Id=1
HostName=node1
# Datanode Computer #2
[COMPUTER]
Id=2
HostName=node2
# Management Node Computer #1
[COMPUTER]
Id=3
HostName=mgm
#
# NODE DEFINITIONS
#
# Data Nodes
# Node group #1
[NDBD]
Id=1
ExecuteOnComputer=1
[NDBD]
Id=2
ExecuteOnComputer=2
# Management node
[NDB_MGMD]
Id=3
ExecuteOnComputer=3
# Anonymous API nodes ##
[MYSQLD]
[MYSQLD]
[MYSQLD]
复制代码
分另在两点节点配置:在/etc/my.cnf下面添加如下内容
[MYSQLD]
ndbcluster
ndb-connectstring=mgm
#default_table_type=NDBCLUSTER
[MYSQL_CLUSTER]
ndb-connectstring=mgm
# my.cnf
[MYSQL_CLUSTER]
ndb-connectstring=mgm #管理节点的主机名
/////////
mysql cluster实战
////////////////////////////////////////////////////////////////////////////////
192.168.0.118是管理节点,192.168.0.146、192.168.0.221是数据节点和sql节点一体化
复制代码
启动管理节点
复制代码
注意,必须用“-f”或“--config-file”选项,告诉ndb_mgmd到哪里找到配置文件(详情请参见17.5.3节,“ndb_mgmd,“管理服务器”进程”)。
6.启动数据节点
第一次启动
复制代码
注意,仅应在首次启动ndbd时,或在备份/恢复或配置变化后重启ndbd时使用“--initial”参数,这很重要。原因在于,该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括恢复用日志文件。
非第一次启动:
/usr/local/mysql/bin/ndbd
7.启动sql节点
service mysqld start start
8.调用ndb_mgm管理节点客户端,可对其进行测试
#/usr/local/mysql/bin/ndb_mgm
ndb_mgm> show
Connected to Management Server at: mgm:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @192.168.0.146 (Version: 5.1.5, Nodegroup: 0)
id=2 @192.168.0.221 (Version: 5.1.5, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=3 @192.168.0.118 (Version: 5.1.5)
[mysqld(API)] 3 node(s)
id=4 @192.168.0.221 (Version: 5.1.5)
id=5 @192.168.0.146 (Version: 5.1.5)
id=6 (not connected, accepting connect from any host)
复制代码
查看网络连接情况
234管理节点:
[root@mgm local]# netstat -anp | grep mgm
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 10059/ndb_mgmd
tcp 0 0 192.168.0.118:47504 192.168.0.118:1186 ESTABLISHED 10302/ndb_mgm
tcp 0 0 192.168.0.118:47503 192.168.0.118:1186 ESTABLISHED 10302/ndb_mgm
tcp 0 0 192.168.0.118:47502 192.168.0.118:1186 ESTABLISHED 10302/ndb_mgm
tcp 0 0 127.0.0.1:34878 127.0.0.1:1186 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.221:2689 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 127.0.0.1:1186 127.0.0.1:34878 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.146:57511 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.118:47502 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.118:47503 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.118:47504 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.221:2356 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.221:2355 ESTABLISHED 10059/ndb_mgmd
tcp 0 0 192.168.0.118:1186 192.168.0.146:34588 ESTABLISHED 10059/ndb_mgmd
复制代码
数据和SQL节点:
[root@node1 data]# netstat -anp | grep 192.168.0.146
tcp 0 0 192.168.0.221:1284 192.168.0.146:51311 ESTABLISHED 3053/mysqld
tcp 0 0 192.168.0.221:4182 192.168.0.146:42435 ESTABLISHED 2714/ndbd
tcp 0 0 192.168.0.221:1545 192.168.0.146:55286 ESTABLISHED 2714/ndbd
tcp 0 0 192.168.0.221:2356 192.168.0.118:1186 ESTABLISHED 2714/ndbd
tcp 0 0 192.168.0.221:2355 192.168.0.118:1186 ESTABLISHED 2714/ndbd
tcp 0 0 192.168.0.221:1284 192.168.0.146:51311 ESTABLISHED 3053/mysqld
复制代码
10. 测试
严重注意:所有建表语句的TYPE=MyISAM必须替换为ENGINE=NDBCLUSTER,mysql文档说明如下:
对于将成为簇数据库组成部份的每个表,均需要为其定义执行上述操作。完成该任务的最简单方法是,简单地在world.sql文件上执行“查找-替换”,并用ENGINE=NDBCLUSTER替换所有的TYPE=MyISAM实例。
每个NDB表必须有一个主键。如果在创建表时用户未定义主键,NDB簇存储引擎将自动生成隐含的主键
10.1 建库同步测试
146节点
| Database |
+--------------------+
| information_schema |
| mysql |
| ndb_2_fs |
| test |
+--------------------+
4 rows in set (0.00 sec)
复制代码
mysql> create database clustertest;
Query OK, 1 row affected (0.34 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| clustertest |
| mysql |
| ndb_2_fs |
| test |
+--------------------+
5 rows in set (0.00 sec)
221节点验证
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| clustertest |
| mysql |
| ndb_3_fs |
| test |
+--------------------+
5 rows in set (0.00 sec)
复制代码
10.2建表插入数据测试
221节点
mysql> CREATE TABLE test (i INT) ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO test () VALUES (233);
Query OK, 1 row affected (0.02 sec)
mysql> select * from test;
+------+
| i |
+------+
| 233 |
+------+
1 row in set (0.00 sec)
复制代码
146节点验证、建表和插入数据
mysql> INSERT INTO test () VALUES (232);
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+------+
| i |
+------+
| 233 |
| 232 |
+------+
2 rows in set (0.04 sec)
mysql> 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;
Query OK, 0 rows affected (0.93 sec)
mysql> INSERT INTO City VALUES (1,'Kabul','AFG','Kabol',1780000);
Query OK, 1 row affected (0.02 sec)
mysql> SELECT * FROM City;
+----+-------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.05 sec)
复制代码
221节点验证
mysql> SELECT * FROM City;
+----+-------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.02 sec)
复制代码
10.3删除表测试
146节点
mysql> use cluster;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_cluster |
+-------------------+
| huzi |
| test |
+-------------------+
2 rows in set (0.08 sec)
mysql> drop table huzi;
Query OK, 0 rows affected (0.79 sec)
复制代码
221节点验证
mysql> use cluster
Database changed
mysql> show tables;
+-------------------+
| Tables_in_cluster |
+-------------------+
| test |
+-------------------+
1 row in set (0.01 sec)
mysql>
10.4 删除数据库测试
146节点删除clustertest数据库
mysql> drop database isa1;
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cluster |
| huzi |
| isa |
| mysql |
| test |
+--------------------+
6 rows in set (0.00 sec)
复制代码
221节点验证
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cluster |
| huzi |
| isa |
| mysql |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql>
复制代码
重起
停止
管理节点可以控制所有数据节点的停止
/usr/local/mysql/bin/ndb_mgm -e shutdown
Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
11.2启动
管理节点
/usr/local/mysql/bin/ndb_mgmd -f /etc/config.ini
数据节点
/usr/local/mysql/bin/ndbd
sql节点可以不重起
--转自