mysql 集群

博客已经搬家,请访问如下地址:http://www.czhphp.com

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节点分别在在两台电脑上,也就是存偖节点同时也当数据节点
========================================================================
安装:分别在三台电脑安装数据库
  1. shell>tar xvf mysql-max-5.1.5-alpha-linux-i686-glibc23.tar
  2. shell> groupadd mysql
  3. shell> useradd -g mysql mysql
  4. shell> cd /usr/local
  5. shell> mv mysql-max-5.1.5-alpha-linux-i686-glibc23 mysql
  6. shell> cd mysql
  7. shell> chown -R mysql .
  8. shell> chgrp -R mysql .
  9. shell> scripts/mysql_install_db --user=mysql
  10. shell> chown -R root .
  11. shell> chown -R mysql data
  12. shell> bin/mysqld_safe --user=mysql &
复制代码
CP启动脚本到/etc/init.d 目录
  1. shell>cp support-files/mysql.server /etc/init.d/mysqld
复制代码
停止mysql 数据库
  1. shell>/etc/init.d/mysqld stop
复制代码
加入systemV服务
  1. shell>chkconfig --add mysqld
复制代码
cp MYSQL配置文件到/etc/目录
  1. shell>cp support-files/my-small.cnf /etc/my.cnf
复制代码
测试三台上面的数据库启动是否正常

二:配置管理节点
MGM:
1,配置/etc/my.cnf文件
在后面添加如下内容
  1. [ndb_mgm]
  2. connect-string=mgm
  3. [ndb_mgmd]
  4. config-file=/etc/config.ini
  5. ##connect-string=mgm  ##ndb_mgm 管理节点的计算机名
  6. ##config-file=/etc/config.ini ##ndb_mgmd的启动所要的配置文件
复制代码
2,ndb_mgmd的配置文件 config.ini配置如下
  1. #
  2. # DEFAULT SETTINGS
  3. #

  4. # Default settings for all data nodes
  5. [NDBD DEFAULT]
  6. NoOfReplicas=2
  7. DataMemory=644245094
  8. IndexMemory=322122547

  9. #
  10. # COMPUTER DEFINITIONS
  11. #

  12. # Datanode Computer #1
  13. [COMPUTER]
  14. Id=1
  15. HostName=node1

  16. # Datanode Computer #2
  17. [COMPUTER]
  18. Id=2
  19. HostName=node2

  20. # Management Node Computer #1
  21. [COMPUTER]
  22. Id=3
  23. HostName=mgm

  24. #
  25. # NODE DEFINITIONS
  26. #

  27. # Data Nodes

  28. # Node group #1

  29. [NDBD]
  30. Id=1
  31. ExecuteOnComputer=1

  32. [NDBD]
  33. Id=2
  34. ExecuteOnComputer=2

  35. # Management node

  36. [NDB_MGMD]
  37. Id=3
  38. ExecuteOnComputer=3

  39. # Anonymous API nodes  ##
  40. [MYSQLD]
  41. [MYSQLD]
  42. [MYSQLD]
复制代码
分另在两点节点配置:在/etc/my.cnf下面添加如下内容
  1. [MYSQLD]
  2. ndbcluster
  3. ndb-connectstring=mgm
  4. #default_table_type=NDBCLUSTER

  5. [MYSQL_CLUSTER]
  6. ndb-connectstring=mgm

  7. # my.cnf
  8. [MYSQL_CLUSTER]
  9. ndb-connectstring=mgm #管理节点的主机名


  10. /////////
  11. mysql cluster实战
  12. ////////////////////////////////////////////////////////////////////////////////
  13. 192.168.0.118是管理节点,192.168.0.146、192.168.0.221是数据节点和sql节点一体化
复制代码
启动管理节点
  1. /usr/local/mysql/bin/ndb_mgmd -f /etc/config.ini
复制代码
注意,必须用“-f”或“--config-file”选项,告诉ndb_mgmd到哪里找到配置文件(详情请参见17.5.3节,“ndb_mgmd,“管理服务器”进程”)。

6.启动数据节点

第一次启动
  1. /usr/local/mysql/bin/ndbd --initial
复制代码
注意,仅应在首次启动ndbd时,或在备份/恢复或配置变化后重启ndbd时使用“--initial”参数,这很重要。原因在于,该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括恢复用日志文件。

非第一次启动:
/usr/local/mysql/bin/ndbd

7.启动sql节点
service mysqld start  start

8.调用ndb_mgm管理节点客户端,可对其进行测试
  1. #/usr/local/mysql/bin/ndb_mgm
  2. ndb_mgm> show
  3. Connected to Management Server at: mgm:1186
  4. Cluster Configuration
  5. ---------------------
  6. [ndbd(NDB)]     2 node(s)
  7. id=1    @192.168.0.146  (Version: 5.1.5, Nodegroup: 0)
  8. id=2    @192.168.0.221  (Version: 5.1.5, Nodegroup: 0, Master)

  9. [ndb_mgmd(MGM)] 1 node(s)
  10. id=3    @192.168.0.118  (Version: 5.1.5)

  11. [mysqld(API)]   3 node(s)
  12. id=4    @192.168.0.221  (Version: 5.1.5)
  13. id=5    @192.168.0.146  (Version: 5.1.5)
  14. id=6 (not connected, accepting connect from any host)
复制代码
查看网络连接情况

234管理节点:
  1. [root@mgm local]# netstat -anp | grep mgm
  2. tcp        0      0 0.0.0.0:1186                0.0.0.0:*                   LISTEN      10059/ndb_mgmd      
  3. tcp        0      0 192.168.0.118:47504         192.168.0.118:1186          ESTABLISHED 10302/ndb_mgm      
  4. tcp        0      0 192.168.0.118:47503         192.168.0.118:1186          ESTABLISHED 10302/ndb_mgm      
  5. tcp        0      0 192.168.0.118:47502         192.168.0.118:1186          ESTABLISHED 10302/ndb_mgm      
  6. tcp        0      0 127.0.0.1:34878             127.0.0.1:1186              ESTABLISHED 10059/ndb_mgmd      
  7. tcp        0      0 192.168.0.118:1186          192.168.0.221:2689          ESTABLISHED 10059/ndb_mgmd      
  8. tcp        0      0 127.0.0.1:1186              127.0.0.1:34878             ESTABLISHED 10059/ndb_mgmd      
  9. tcp        0      0 192.168.0.118:1186          192.168.0.146:57511         ESTABLISHED 10059/ndb_mgmd      
  10. tcp        0      0 192.168.0.118:1186          192.168.0.118:47502         ESTABLISHED 10059/ndb_mgmd      
  11. tcp        0      0 192.168.0.118:1186          192.168.0.118:47503         ESTABLISHED 10059/ndb_mgmd      
  12. tcp        0      0 192.168.0.118:1186          192.168.0.118:47504         ESTABLISHED 10059/ndb_mgmd      
  13. tcp        0      0 192.168.0.118:1186          192.168.0.221:2356          ESTABLISHED 10059/ndb_mgmd      
  14. tcp        0      0 192.168.0.118:1186          192.168.0.221:2355          ESTABLISHED 10059/ndb_mgmd      
  15. tcp        0      0 192.168.0.118:1186          192.168.0.146:34588         ESTABLISHED 10059/ndb_mgmd
复制代码
数据和SQL节点:
  1. [root@node1 data]# netstat -anp | grep 192.168.0.146
  2. tcp        0      0 192.168.0.221:1284          192.168.0.146:51311         ESTABLISHED 3053/mysqld         
  3. tcp        0      0 192.168.0.221:4182          192.168.0.146:42435         ESTABLISHED 2714/ndbd           
  4. tcp        0      0 192.168.0.221:1545          192.168.0.146:55286         ESTABLISHED 2714/ndbd  



  5. tcp        0      0 192.168.0.221:2356          192.168.0.118:1186          ESTABLISHED 2714/ndbd           
  6. tcp        0      0 192.168.0.221:2355          192.168.0.118:1186          ESTABLISHED 2714/ndbd           
  7. 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节点
  1. mysql> show databases;


  2. +--------------------+


  3. | Database           |


  4. +--------------------+


  5. | information_schema |


  6. | mysql              |


  7. | ndb_2_fs           |


  8. | test               |


  9. +--------------------+


  10. 4 rows in set (0.00 sec)
复制代码
  1. mysql> create database clustertest;


  2. Query OK, 1 row affected (0.34 sec)





  3. mysql> show databases;


  4. +--------------------+


  5. | Database           |


  6. +--------------------+


  7. | information_schema |


  8. | clustertest        |


  9. | mysql              |


  10. | ndb_2_fs           |


  11. | test               |


  12. +--------------------+


  13. 5 rows in set (0.00 sec)

  14. 221节点验证

  15. mysql> show databases;


  16. +--------------------+


  17. | Database           |


  18. +--------------------+


  19. | information_schema |


  20. | clustertest        |


  21. | mysql              |


  22. | ndb_3_fs           |


  23. | test               |


  24. +--------------------+


  25. 5 rows in set (0.00 sec)
复制代码
10.2建表插入数据测试

221节点
  1. mysql> use clustertest;


  2. Database changed


  3. mysql> CREATE TABLE test (i INT) ENGINE=NDBCLUSTER;


  4. Query OK, 0 rows affected (0.69 sec)





  5. mysql> INSERT INTO test () VALUES (233);


  6. Query OK, 1 row affected (0.02 sec)





  7. mysql> select * from test;


  8. +------+


  9. | i    |


  10. +------+


  11. |  233 |


  12. +------+


  13. 1 row in set (0.00 sec)
复制代码
146节点验证、建表和插入数据
  1. mysql> use clustertest;


  2. Database changed


  3. mysql> select * from test;


  4. +------+


  5. | i    |


  6. +------+


  7. |  233 |


  8. +------+


  9. 1 row in set (0.03 sec)





  10. mysql> INSERT INTO test () VALUES (232);


  11. Query OK, 1 row affected (0.01 sec)





  12. mysql> select * from test;


  13. +------+


  14. | i    |


  15. +------+


  16. |  233 |


  17. |  232 |


  18. +------+


  19. 2 rows in set (0.04 sec)





  20. mysql> CREATE TABLE City (


  21.     -> ID int(11) NOT NULL auto_increment,


  22.     -> Name char(35) NOT NULL default '',


  23.     -> CountryCode char(3) NOT NULL default '',


  24.     -> District char(20) NOT NULL default '',


  25.     -> Population int(11) NOT NULL default '0',


  26.     -> PRIMARY KEY  (ID)


  27.     -> ) ENGINE=NDBCLUSTER;


  28. Query OK, 0 rows affected (0.93 sec)





  29. mysql> INSERT INTO City VALUES (1,'Kabul','AFG','Kabol',1780000);


  30. Query OK, 1 row affected (0.02 sec)





  31. mysql> SELECT * FROM City;


  32. +----+-------+-------------+----------+------------+


  33. | ID | Name  | CountryCode | District | Population |


  34. +----+-------+-------------+----------+------------+


  35. |  1 | Kabul | AFG         | Kabol    |    1780000 |


  36. +----+-------+-------------+----------+------------+


  37. 1 row in set (0.05 sec)
复制代码
221节点验证
  1. mysql> select * from test;


  2. +------+


  3. | i    |


  4. +------+


  5. |  232 |


  6. |  233 |


  7. +------+


  8. 2 rows in set (0.00 sec)





  9. mysql>  SELECT * FROM City;


  10. +----+-------+-------------+----------+------------+


  11. | ID | Name  | CountryCode | District | Population |


  12. +----+-------+-------------+----------+------------+


  13. |  1 | Kabul | AFG         | Kabol    |    1780000 |


  14. +----+-------+-------------+----------+------------+


  15. 1 row in set (0.02 sec)
复制代码
10.3删除表测试

146节点
  1. mysql> use cluster;
  2. Database changed
  3. mysql> show tables;
  4. +-------------------+
  5. | Tables_in_cluster |
  6. +-------------------+
  7. | huzi              |
  8. | test              |
  9. +-------------------+
  10. 2 rows in set (0.08 sec)

  11. mysql> drop table huzi;
  12. Query OK, 0 rows affected (0.79 sec)
复制代码
221节点验证
  1. mysql> use cluster
  2. Database changed
  3. mysql> show tables;
  4. +-------------------+
  5. | Tables_in_cluster |
  6. +-------------------+
  7. | test              |
  8. +-------------------+
  9. 1 row in set (0.01 sec)

  10. mysql>





  11. 10.4 删除数据库测试

  12. 146节点删除clustertest数据库

  13. mysql> drop database isa1;
  14. Query OK, 0 rows affected (0.01 sec)

  15. mysql> show databases;
  16. +--------------------+
  17. | Database           |
  18. +--------------------+
  19. | information_schema |
  20. | cluster            |
  21. | huzi               |
  22. | isa                |
  23. | mysql              |
  24. | test               |
  25. +--------------------+
  26. 6 rows in set (0.00 sec)
复制代码
221节点验证
  1. mysql> show databases;
  2. +--------------------+
  3. | Database           |
  4. +--------------------+
  5. | information_schema |
  6. | cluster            |
  7. | huzi               |
  8. | isa                |
  9. | mysql              |
  10. | test               |
  11. +--------------------+
  12. 6 rows in set (0.00 sec)

  13. 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节点可以不重起

参考:http://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html

 

博客已经搬家,请访问如下地址:http://www.czhphp.com

posted @ 2009-03-10 16:45  曹振华  阅读(1207)  评论(0编辑  收藏  举报