MySQL Cluster 是一种技术,其主要功能是在无共享的相关系统中部署内存中数据库 的 Cluster 。在通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。 此外,由于每个组件有自己的内存和磁盘,不存在单点故障。 MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster 的数据节点,管理服务器,以及(可能)专门的数据访问程序。关于 Cluster 中这些组件的 关系,请参见下图:

所有的这些节点构成一个完成的MySQL集群体系。数据保存在“NDB存储服务器”的存储引擎中,表 (结构)则保存在“MySQL服务器”中。应用程序通过“MySQL服务器”访问这些数据表,集群管理服务 器通过管理工具(ndb_mgmd)来管理“NDB存储服务器”。 通过将MySQL Cluster 引入开放源码世界,MySQL为所有需要它的人员提供了具有高可用性、高性 能和可缩放性的 Cluster 数据管理。 MySQL Cluster 基本概念 “NDB” 是一种“内存中”的存储引擎,它具有可用性高和数据一致性好的 特点。

个节点。

个数据节点。不过没有必要设置多个副本。数据 节点是用命令“ndbd”启动的。

SQL节点:这是用来访问 Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点是使用命令“mysqld –ndbcluster”启动的, 或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动。注释:在很多情况下,术语“节点”用 于指 计算机,但在讨论MySQL Cluster时,它表示的是进程。在单台计算机上可以有任意数目的节点,为 此,我们采用术语“ Cluster主机”。

管理服务器(MGM节点)负责管理 Cluster配置文件和 Cluster日志。 Cluster中的每个节点从管理服务 器检索配置数据,并请求确定管理服务器所在位置的方式。当数据节点内出现新的事件时,节点将关于 这类事件的信息传输 到管理服务器,然后,将这类信息写入 Cluster日志。

此外,可以有任意数目的 Cluster客户端进程或应用程序。它们分为两种类型: 标准MySQL客户端:对于MySQL Cluster,它们与标准的(非 Cluster类)MySQL没有区别。换句 话讲,能够从用PHP、Perl、C、C++、Java、Python、Ruby等编写的现有MySQL应用程序访问 MySQL Cluster。 管理客户端:这类客户端与管理服务器相连,并提供了启动和停止节点、启动和停止消息跟踪(仅调试 版本)、显示节点版本和状态、启动和停止备份等的命令。

系统环境:
rhel6 x86_64 iptables
and selinux disabled

主机:
192.168.122.112 server12.example.com 管理节点

192.168.122.234 server34.example.com 数据节点

192.168.122.205 server5.example.com 数据节点

192.168.122.20 server20.example.com sql节点

192.168.122.77 server77.example.com sql节点

所需的包:
MySQL-Cluster-gpl-client-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-clusterj-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-management-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-server-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-storage-7.1.18-1.el6.x86_64.rpm

相关网址http://www.mysql.com/

官网文档http://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html

#配置管理节点

以下步骤在server12上实施:

[root@server12
~]# rpm -ivh MySQL-Cluster-gpl-management-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-tools-7.1.18-1.el6.x86_64.rpm

[root@server12
~]# mkdir -p /usr/mysql-cluster

[root@server12
~]# cd /usr/mysql-cluster/

[root@server12
mysql-cluster]# vim config.ini

[ndbd
default]

noofreplicas=1
#该全局参数仅能在[NDBD
DEFAULT]中设置,它定义了cluster中每个表保
存的副本数。该参数还指定了节点组的大小。节点组指的是保存相同信息的节点集合

datamemory=30M
#该参数定义了数据节点用于保存数据库记录的空间大小,全部空间均是分配
在内存中的,确保你的数据节点具有足够的物理内存来容纳该值,由于我这是使用虚拟机测试,所以设
置的偏小,你可以依照实际环境来定义此值

indexmemory=10M
#该参数用于控制cluster中哈希(混编)索引所使用的存储量

[ndb_mgmd]

nodeid=1
#cluster的整数表示,
旧版本中直接使用id=1

hostname=192.168.122.112
#定义管理节点ip

datadir=/usr/mysql-cluster
#它用于设置保存管理服务器输出文件的位置。这些文件包括
cluster日志文件、进程输出文件、以及端口监督程序的pid文件

[ndbd]

nodeid=2

hostname=192.168.122.234
#定义数据节点ip

datadir=/usr/mysql-cluster
#该参数指定了存放跟踪文件、日志文件、pid文件以及错
误日志的目录

[mysqld]

nodeid=3

hostname=192.168.122.20
#定义sql节点ip

[root@server12
mysql-cluster]# ndb_mgmd -f /usr/mysql-cluster/config.ini --initial

MySQL
Cluster Management Server mysql-5.1.56 ndb-7.1.18

注:看到类似如上输出说明启动成功.

在管理节点上用ndb_mgm查看,可查看到如下结果:

#配置数据节点

以下步骤在server34上实施:

[root@server34 ~]# rpm -ivh MySQL-Cluster-gpl-storage-7.1.18-1.el6.x86_64.rpm

[root@server34 ~]# vim /etc/my.cnf

[mysqld]

ndbcluster

ndb-connectstring=192.168.122.112

[mysql_cluster]

ndb-connectstring=192.168.122.112

[root@server34
~]# ndbd –initial

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

此时会出现如下错误:

2013-11-24
10:35:32 [ndbd] WARNING -- Cannot change directory to
'/usr/mysql-cluster', error: 2

解决方法如下:

[root@server34
~]# mkdir -p /usr/mysql-cluster

再次执行ndbd
–initial看到类似如下输出说明启动成功

2013-11-24
10:35:54 [ndbd] INFO -- Angel connected to '192.168.122.112:1186'

2013-11-24
10:35:54 [ndbd] INFO -- Angel allocated nodeid: 2

在管理节点上用ndb_mgm查看,可查看到如下结果:

#配置sql节点

以下步骤在server20上实施:

首先,确认sql节点上没有安装mysqlmysql-libs,已安装的将其删除

[root@server20 ~]# /etc/init.d/postfix stop

[root@server20 ~]# rpm -e mysql-libs –nodeps

[root@server20
~]# rpm -ivh MySQL-Cluster-gpl-server-7.1.18-1.el6.x86_64.rpm
MySQL-Cluster-gpl-client-7.1.18-1.el6.x86_64.rpm

如果内存≤64M,则复制/usr/share/mysql/my-small.cnf为/etc/my.cnf

如果内存是128M,则复制/usr/share/mysql/my-medium.cnf为/etc/my.cnf

如果内存是512M,则复制/usr/share/mysql/my-large.cnf为/etc/my.cnf

如果内存是1-2G,则复制/usr/share/mysql/my-huge.cnf为/etc/my.cnf

如果内存是4G,则复制/usr/share/mysql/my-innodb-heavy-4G.cnf为/etc/my.cnf

[root@server20
~]# cd /usr/share/doc/MySQL-Cluster-gpl-server-7.1.18/

[root@server20
MySQL-Cluster-gpl-server-7.1.18]# cp my-small.cnf /etc/my.cnf

[root@server20
MySQL-Cluster-gpl-server-7.1.18]# vim /etc/my.cnf

#server-id
= 1

[mysqld]

ndbcluster
(以下数据添加在[mysqld]区域的最下方
)

ndb-connectstring=192.168.122.112

[mysql_cluster]

ndb-connectstring=192.168.122.112

[root@server20
MySQL-Cluster-gpl-server-7.1.18]# /etc/init.d/mysql start

Starting
MySQL.... SUCCESS!

注:看上类似输出说明启动成功.

在管理节点上用ndb_mgm查看,可查看到如下结果:

:首先启动管理节点,然后启动存储节点,最后启动SQL节点

#如何安全关闭和重启mysql cluster

在MGM节点所在的机器上,在Shell中简单地输入下述命令:

ndb_mgm -e shutdown

该命令将恰当地中止ndb_mgm、ndb_mgmd以及任何ndbd进程。

使用mysqladmin shutdown或 其他方法,可中止SQL节点

重启时,可简单地运行下述命令:

在管理节点上:

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

在每台数据节点上:

ndbd

:正常重启NDBD节点时,不要用“--initial”选项调用该命令。

在SQL节点上:

service mysql start

#如何在线添加节点

新增节点:

数据节点:192.168.122.205
(
配置与数据节点192.168.122.234相同)

sql节点:192.168.122.77
(
配置与sql节点192.168.122.20相同)

以下步骤在server12上实施:

[root@server12
~]# ndb_mgm -e shutdown #中止ndb_mgm、ndb_mgmd以及任何ndbd进程

[root@server12
~]# vim /usr/mysql-cluster/config.ini

[ndbd default]

noofreplicas=2#定义两个节点为一个节点组,这里指的是id
2为一个数据组,同组存储
的数据是相同,数据节点分布在不同的主机,避免了单点故障。

datamemory=30M

indexmemory=10M

[ndb_mgmd]

nodeid=1

hostname=192.168.122.112

datadir=/usr/mysql-cluster

[ndbd]

nodeid=2

hostname=192.168.122.234

datadir=/usr/mysql-cluster

[mysqld]

nodeid=3

hostname=192.168.122.20

[ndbd]
#加入新增数据节点

nodeid=4

hostname=192.168.122.205

datadir=/usr/mysql-cluster

[mysqld]
#加入新增sql节点

nodeid=5

hostname=192.168.122.77

[mysqld]
#加了个空闲连接,为以后的数据恢复所准备,需要时再加也可以

管理节点重新加载配置:

[root@server12
~]# ndb_mgmd -f /usr/mysql-cluster/config.ini –initial

各数据节点重新初始化:

[root@server34
~]# ndbd –initial

[root@server5
~]# ndbd –initial

sql节点重启mysql:

[root@server20
~]# /etc/init.d/mysql restart

[root@server77
~]# /etc/init.d/mysql restart

在管理节点上用ndb_mgm查看,可查看到如下结果:

#建立集群数据

以下步骤在任意一个sql节点上实施:

[root@server20 ~]# mysqladmin create koen

[root@server20 ~]# vim test.sql

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; #指定MySQL为该表使用了NDB存储引擎,数据存储于各数据节点,不 然 mysql使用默认的MyISAM存储引擎,所有的数据将会存储于本机,和单机一样

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

INSERT
INTO City VALUES (4,'Kabul2','AFG','Kabol',1780000);

INSERT
INTO City VALUES (5,'Qandahar2','AFG','Qandahar',237500);

INSERT
INTO City VALUES (6,'Herat2','AFG','Herat',186800);

[root@server20
~]# mysql koen < test.sql

导入成功后你可以在各sql节点上查看数据.

#如何备份数据

以下步骤在管理节点上实施:

[root@server12
~]# ndb_mgm

ndb_mgm>
start backup

Waiting
for completed, this may take several minutes

Node
2: Backup 1 started from node 1

Node
2: Backup 1 started from node 1 completed

StartGCP: 490 StopGCP: 493

#Records: 2063 #LogRecords: 0

Data: 51616 bytes Log: 0 bytes

注:出现类似如上输出说明备份成功,默认备份的数据在各数据节点的/usr/mysql-cluster/BACKUP目录下保存着

#如何恢复数据

测试:将刚才导入的City表中的数据全部删除,只要在一个sql节点上操作即可

[root@server20
~]# mysql

mysql>
use koen;

mysql>
delect from City;

mysql>
quit

由于数据分散在两个数据节点,因此需要分别在各数据节点执行恢复:(由于使用的是rpm包方式安装,各数
据节点没有
ndb_restore命令,可以直接从管理节点scp)

以下步骤在server34上实施:

[root@server34
BACKUP-1]# ndb_restore -n 2 -b 1 -r
/usr/mysql-cluster/BACKUP/BACKUP-1/

Nodeid
= 2

Backup
Id = 1

backup
path = /usr/mysql-cluster/BACKUP/BACKUP-1/

Opening
file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.2.ctl'

File
size 10448 bytes

Backup
version in files: ndb-6.3.11 ndb version: mysql-5.1.56 ndb-7.1.18

Stop
GCP of Backup: 492

Connected
to ndb!!

Opening
file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1-0.2.Data'

File
size 26152 bytes

_____________________________________________________

Processing
data in table: sys/def/NDB$EVENTS_0(3) fragment 0

_____________________________________________________

Processing
data in table: mysql/def/ndb_apply_status(6) fragment 0

_____________________________________________________

Processing
data in table: koen/def/City(7) fragment 0

_____________________________________________________

Processing
data in table: mysql/def/NDB$BLOB_4_3(5) fragment 0

_____________________________________________________

Processing
data in table: sys/def/SYSTAB_0(2) fragment 0

_____________________________________________________

Processing
data in table: mysql/def/ndb_schema(4) fragment 0

Opening
file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.2.log'

File
size 52 bytes

Restored
2 tuples and 0 log entries

NDBT_ProgramExit:
0 – OK

以下步骤在server5上实施:

-n指节点id
-b
指备份id
-r
指备份目录

[root@server5
BACKUP-1]# ndb_restore -n 4 -b 1 -r
/usr/mysql-cluster/BACKUP/BACKUP-1/

Nodeid
= 4

Backup
Id = 1

backup
path = /usr/mysql-cluster/BACKUP/BACKUP-1/

Opening
file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.4.ctl'

File
size 10448 bytes

Backup
version in files: ndb-6.3.11 ndb version: mysql-5.1.56 ndb- 7.1.18

Stop
GCP of Backup: 492

Connected
to ndb!!

Opening
file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1-0.4.Data'

File
size 25896 bytes

_____________________________________________________

Processing
data in table: sys/def/NDB$EVENTS_0(3) fragment 1

_____________________________________________________

Processing
data in table: mysql/def/ndb_apply_status(6) fragment 1

_____________________________________________________

Processing
data in table: koen/def/City(7) fragment 1

_____________________________________________________

Processing
data in table: mysql/def/NDB$BLOB_4_3(5) fragment 1

_____________________________________________________

Processing
data in table: sys/def/SYSTAB_0(2) fragment 1

_____________________________________________________

Processing
data in table: mysql/def/ndb_schema(4) fragment 1

Opening
file '/usr/mysql-cluster/BACKUP/BACKUP-1/BACKUP-1.4.log'

File
size 52 bytes

Restored
4 tuples and 0 log entries

NDBT_ProgramExit:
0 – OK

官方强烈建议在single
user mode
下进行恢复操作,以保证数据库的一致性,但问题是这种模式要
求断开其他
sql节点,线上业务的sql节点不是轻易可以断的。

Rhel6-mysql_cluster配置文档的更多相关文章

  1. MYSQL服务器my.cnf配置文档详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  2. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  3. Hibernate配置文档详解

    Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...

  4. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  5. Spring Hibernate4 整合配置文档

    1 applicationContext.xml配置文档 <?xml version="1.0" encoding="UTF-8"?><bea ...

  6. Kerberos主从配置文档

    Kerberos主从配置文档   1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...

  7. python常用模块-配置文档模块(configparser)

    python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...

  8. azkaban编译安装配置文档

    azkaban编译安装配置文档 参考官方文档: http://azkaban.github.io/azkaban/docs/latest/ azkaban的配置文件说明:http://azkaban. ...

  9. Python学习 :常用模块(四)----- 配置文档

    常用模块(四) 八.configparser 模块 官方介绍:A configuration file consists of sections, lead by a "[section]& ...

  10. configparser模块——配置文档

    configparser模块用于生成和修改常见配置文档. 预制配置文件:conf.ini [DEFAULT] ServerAliveInterval = 45 Compression = yes Co ...

随机推荐

  1. python :HTML+CSS (Position)

    position_fixed固定在某一个页面上 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. Eclipse默认标签TODO,XXX,FIXME和自定义标签[转]

    http://www.blogjava.net/Guides/archive/2011/11/14/363686.html   Eclipse中的一些特殊的注释技术包括:    1.    // TO ...

  3. Uva 10917

    题目链接:http://vjudge.net/contest/143062#problem/A 题意:一个人要从点1去到点2,中间还有很多点和很多条边.问你如果他每次走的边(a,b)都满足:a点到目标 ...

  4. ado.net C#如何实现数据库增删改查

    ado.net数据库访问技术将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术也就是说是最麻烦但是是最不可缺少的 ...

  5. tar等

    tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包-x //解压-f //指定文件-t //查看 tar ...

  6. Giving Data Backup Option in Oracle Forms 6i

    Suppose you want to give the data backup option in Oracle Forms application to some client users, wh ...

  7. VB6中的引用传递 与 VB.NET中的引用传递的区别

    首先注意一点,在VB6中缺省参数传递的方式是:引用传递,而在VB.NET中缺省参数传递的方式是:值传递. 然后我们看下面VB6中的引用传递与VB.NET中的引用传递的对比. VB6中的引用传递 Pri ...

  8. Windows Internals学习笔记(八)IO系统

    参考资料: 1. <Windows Internals> 知识点: ● 当一个进

  9. 02-编写第一个C语言程序

    本文目录 1.打开Xcode,新建Xcode项目 2.选择最简单的命令行项目 3.输入项目信息 4.选择一个用来存放C程序代码的文件夹 5.运行项目 说明:这个C语言专题,是学习iOS开发的前奏.也为 ...

  10. hdu4987A simple probability problem.(凸包)

    链接 多校的最后一场,当时没看懂题意,看题目还以为是概率问题就没深看. 官方题解 对于他说的第一种,考虑长为L的线段 概率为2L/(pi*d), 可以理解,下面的就不知道在说啥了.. 按我初始的想法想 ...