技术开发 频道

MySQL Cluster 实作

  【IT168技术文档】

        前言

  由于 MySQLCluster 完全使用RAM 来作数据(包含索引)的抄写,所以data-node依照数据库的使用量需有相应足够的

  RAM,其两者关系可以参考官方的算法。

  这个Cluster除了可以做到redundancy,还能透过多个datanode做到load balance。

        实做环境介绍   

  

  架构示意图如下,图片引用自官方网站的数据,图标内的IP请以上述表格所列的为主,而且本篇实作将Management

  node和 SQLnode装在同一台,与下图有些不同。

  各个不同组件的连接关系,请参考下图:

  mgmnode-用来启动/关闭Cluster,及其他管理作业,实际DB运作不需要此程序。

  SQLnode-用来连结WebAP与DB,可建置多个以提高多个的AP联机效率,实际DB数据不存放在此,扩充node时,至少需要有一台可正常运作。

  data-node-实际数据库的储存位置,并负责彼此抄写的任务,愈多台可提高存取效率

  安装设定Management&SQLnode

  到官方下载需要的套件文件,请参考上方表格的内容。

  MySQL-5.0.67MySQL-6.3.20

  rpm -ivh MySQL-client-community-5.0.67-0.rhel5.i386.rpmrpm -ivh MySQL-shared-compat-5.0.67-0.rhel5.i386.rpm

  rpm -ivh MySQL-devel-community-5.0.67-0.rhel5.i386.rpm

  rpm -ivh MySQL-server-community-5.0.67-0.rhel5.i386.rpm

  以上套件是SQLnode会用到的

  rpm -ivh perl-HTML-Template-2.9-1.el5.rf.noarch.rpm

  rpm -ivh MySQL-clustermanagement-community-5.0.67-0.rhel5.i386.rpm

  rpm -ivh MySQL-clustertools-community-5.0.67-0.rhel5.i386.rpm

  以上套件是Managementnode会用到,其中perl-HTML-Template不在官方网站的下载连结,请自行用Google搜寻。

  新增配置文件:

  /etc/my.cnf(SQLnode 会用到)

  # Options for mysqld process:

  [MYSQLD]

  ndbcluster # run NDB engine

  ndb-connectstring=10.10.10.131 # location of MGM node

  # Options for ndbd process:

  [MYSQL_CLUSTER]

  ndb-connectstring=10.10.10.131 # location of MGM node

  /var/lib/mysql-cluster/config.ini(Managementnode会用到)

  # Options affecting ndbd processes on all data nodes:

  [NDBD DEFAULT]

  NoOfReplicas=2 # Number of replicas

  DataMemory=256M # 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=10.10.10.131 # 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=10.10.10.132 # Hostname or IP address

  datadir=/mysql-data # Directory for this data node's datafiles

  # Options for data node "B":

  [NDBD]

  hostname=10.10.10.133 # Hostname or IP address

  datadir=/mysql-data # Directory for this data node's datafiles

  # SQL node options:

  [MYSQLD]

  hostname=10.10.10.131 # Hostname or IP address

  # (additional mysqld connections can be

  # specified for this node for various

  # purposes such as running ndb_restore)

  安装设定Datanode

  到官方下载需要的套件文件,请参考上方表格的内容。

  MySQL-5.0.67MySQL-6.3.20

  rpm -ivh MySQL-clusterstorage-community-5.0.67-0.rhel5.i386.rpm

  新增配置文件

  /etc/my.cnf

  # Options for mysqld process:

  [MYSQLD]

  ndbcluster # run NDB engine

  ndb-connectstring=10.10.10.131 # location of MGM node

  # Options for ndbd process:

  [MYSQL_CLUSTER]

  ndb-connectstring=10.10.10.131 # location of MGM node

  第一次启动作初使化

  先启动Managemnetconsole,登入Management& SQLnode,执行

  nbd_mgmd -f /var/lib/mysql-cluster/config.ini

  在datanode#1及#2,分别执行

  ndbd --initial

  注意,第一次执行时才需要加上--initial,尔后启动时,就不能在加此参数,除非是要重新作初始化。

  在Management&SQLnode启动MySQL

  servicemysqlstop servicemysqlstart

  在Managementnode可以检查Cluster状态,执行

  ndb_mgm

  >show

  ConnectedtoManagement Serverat:10.10.10.131:1186

  ClusterConfiguration

  ---------------------

  [ndbd(NDB)] 2 node(s)

  id=2 @10.10.10.132 (Version:5.0.67, Nodegroup:0)

  id=3 @10.10.10.133 (Version:5.0.67, Nodegroup:0, Master)

  [ndb_mgmd(MGM)]1 node(s)

  id=1 @10.10.10.131 (Version:5.0.67)

  [mysqld(API)] 1 node(s)

  id=4 @10.10.10.131 (Version:5.0.67)

  >allstatus

  Node2:started(Version5.0.67) Node3:started(Version5.0.67)

  MyTips:

  ? data-node状态要显示started才算成功,如果是starting,表示尚未启动完成。

  ? 由于 config.ini 设定 NoOfReplicas=2,所以要启动两个 data-node才会显示状态为 started。

  ? 若 mysqld(API)无法连接,请检查 SQLnode的 MySQL服务程序。

  维护管理Cluster

  启动顺序:mgmnode->data-node->SQLnode

  启动指令:

  ? mgmnode-ndb_mgmd -f/var/lib/mysql-cluster/config.ini

  ? datanode-ndbd

  ? SQLnode-servicemysqlstart 在线维护管理方式(Rolling Restart)*DBA必读* 官方手册:http://dev.mysql.com/doc/refman/5.0/...g-restart.html

  使用时机:

  ? 变更Cluster的配置文件

  ? Cluster软件升级

  ? Node更换硬件或其他维修时

  ? Cluster状态异常,需重设 Cluster时。

  ? 释放有效资源可让 Cluster重复使用。

  各node的在线维护方式:

  ? mgmnode

  1. 关闭所有mgmnode(ndb_mgmd程序)

  2. 修改配置文件

  3. 重启所有的 mgmnode

  ? datanode

  关闭一台,做完这台的维护工作后重新启动,再关闭另一台。

  ? SQLnode

  关闭一台,做完这台的维护工作后重新启动,再关闭另一台。

  Cluster关机

  要关闭整个Cluster,可以在Managementnode,执行

  ndb_mgm -eshutdown

  所有的datanode(ndbd)程序会自动停止,且Cluster机制不再运行。

  MyTips:

  ? 在线扩充SQLnode时,除了重启ndb_mgmd 外,还要重启所有的datanode(可分别重启,不会有downtime)。

  简单的Cluster验证

  官方手册:http://dev.mysql.com/doc/refman/5.0/...a-queries.html

  数据库要设为Cluster有些重点必须先知道:

  ? Table的storageengine须设为NDBCLUSTER。

  ? Table必须有一个 primarykey,若没有,系统会自动新增一个隐藏的 primarykey。

  ? 新增数据库时,需在 Cluster的每个 SQLnode手动执行新增该数据库名称。

  ? 新增 SQLnode时,需在该 node手动新增那些要作同步的数据库名称。

  在SQLnode新增一笔测试的数据库mydb。

  CREATESCHEMAmydb;

  新增一个city的table的汇入档city_table.sql

  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 DEFAULT CHARSET=latin1;

  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);

  将此表汇入数据库mydb

  mysql -u root-p mydb< city_table.sql

  成果展现

  Cluster状态:ndb_mgm ->show

  [root@mgm_sql-node ~]# ndb_mgm

  -- NDB Cluster -- Management Client --ndb_mgm> show

  Connected to Management Server at: 10.10.10.131:1186

  Cluster Configuration  

  状况模拟:

  datenode#1-down datanode#2-up mgmnode-up

  SQLnode#1 -存取正常

  SQLnode#2 -存取正常

  datenode#1-down datanode#2-up mgmnode-down

  SQLnode#1 -存取正常

  SQLnode#2 -存取正常

  datenode#1-down datanode#2-up mgmnode-down SQLnode#1 -down

  SQLnode#2 -存取正常

参考连结
 
 
MySQLCluster 丛集安装环境介绍
http://www.neo.com.tw/archives/869
 
MySQL5.0 FAQ MySQL Cluster
http://dev.mysql.com/doc/refman/5.0/...l-cluster.html
 
MySQLClusterOverview
http://dev.mysql.com/doc/refman/5.0/...-overview.html
 
MySQLClusterMulti-ComputerHow-To
http://dev.mysql.com/doc/refman/5.0/...-computer.html
 
MySQLClusterMulti-ComputerConfiguration
http://dev.mysql.com/doc/refman/5.0/...ti-config.html
 
SafeShutdown andRestartofMySQLCluster
http://dev.mysql.com/doc/refman/5.0/...n-restart.html
 
MySQL丛集
http://twpug.net/docs/mysql-5.1/ndbcluster.html
 
MySQLCluster学习笔记-1
http://www.ithome.com.tw/plog/index....015&blogId=257
 
MySQLCluster学习笔记-2
http://www.ithome.com.tw/plog/index....176&blogId=257
 
MySQLForums ::Cluster::APInotconnectingto ndb_mgm
http://forums.mysql.com/read.php?25,182996,182996
 
MySQLCluster http://techlive.tw/index.php/MySQL_Cluster
0
相关文章