文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MySQL 5.1参考手册 :: 17. MySQL簇(5)

MySQL 5.1参考手册 :: 17. MySQL簇(5)

时间:2008-05-11  来源:sdccf

17.6.5.5. 备份故障诊断与排除

如果在发出备份请求时返回了错误代码,最可能的原因是内存不足,或磁盘空间不足。应检查是否为备份分配了足够的内存。此外,还应检查在备份目标的硬盘分区上是否有足够的空间。

NDB不支持重复的读取操作,对于恢复进程,这类操作会导致问题。尽管备份进程“hot”,但从备份恢复MySQL簇并不是100%“hot”的进程。其原因在于,在恢复进程执行期间,正在运行的事务会从已恢复的数据中获取不可重复的读。这意味着,当恢复正在进行时,数据的状态是不一致的。

17.7. 使用与MySQL簇的高速互连

17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互连的影响

即使在1996年开始NDB簇的设计之前,在创建并行数据库的过程中遇到的一个主要问题显然是网络中节点之间的通信问题。正因为如此,从开始设计时,NDB簇就允许使用多种不同的数据传输机制。在本手册中,我们使用了术语传输器。

目前,MySQL簇代码库包含对四种不同传输器的支持。目前的大多数用户采用的是以太网上的TCP/IP,这是因为它无处不在。它也是迄今为止在MySQL簇中经过最佳测试的传输器。

我们正在努力,以确保与ndbd进程的通信是尽可能大的“组块”,这是因为,它有利于所有的数据传输类型。

对于需要它的用户,也能使用簇互联以进一步增强性能。实现它的方式有两种:或使用能处理该情况的定制传输器,或使用能绕过TCP/IP堆栈的套接字实施方案。我们使用由Dolphin开发的SCI(规模可扩展的计算机连接接口)技术,对这两类技术进行了试验。

17.7.1. 配置MySQL簇以使用SCI套接字

在本节中,我们将介绍如何改编为常规TCP/IP通信配置的簇,以使用SCI套接字。本文档基于2004年10月1日发布的SCI套接字2.3.0版。

前提条件

对于任何打算使用SCI套接字的机器,都必须配备SCI卡。

能够与任何版本的MySQL簇一起使用SCI套接字。不需要特殊创建,这是因为它采用了MySQL簇中已提供的正常套接字调用。但是,目前仅在Linux 2.4和2.6内核上才支持SCI套接字。尽管到目前为止我们仅在Linux 2.4上核实了这点,在一些其他操作系统上也成功测试了SCI传输器。

对于SCI套接字,有四种基本要求:

1.    创建SCI套接字库。

2.    安装SCI套接字内核库。

3.    安装1个或2个配置文件。

4.    必须为整个机器或启动MySQL簇进程的shell启用SCI套接字库。

对于打算将SCI套接字用于节点间的通信的簇,需要为簇中的每台机器重复该进程。

要想使SCI套接字工作,需要获得两个软件包:

1.    包含用于SCI套接字库的DIS支持库的源码软件包。

2.    用于SCI套接字库本身的源码软件包。

目前,仅以源码格式提供了它们。编写本文档时可用的最新版本的软件包分别是DIS_GPL_2_5_0_SEP_10_2004.tar.gz和SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz。在下述站点,可找到它们(也可能找到更新的版本):http://www.dolphinics.no/support/downloads.html。

软件包安装

获得库软件包后,接下来应将它们解包到恰当的目录下,将SCI套接字库解包到DIS代码下的目录中。然后,需要创建库。在下面的示例中,给出了在Linux/x86平台上执行该任务所需的命令:

shell> tar xzf DIS_GPL_2_5_0_SEP_10_2004.tar.gz
shell> cd DIS_GPL_2_5_0_SEP_10_2004/src/
shell> tar xzf ../../SCI_SOCKET_2_3_0_OKT_01_2004.tar.gz
shell> cd ../adm/bin/Linux_pkgs
shell> ./make_PSB_66_release

能够为64位处理器创建这些库。要想为使用64位扩展的Opteron CPU创建这些库,请运行make_PSB_66_X86_64_release而不是make_PSB_66_release。如果创建工作是在Itanium机器上进行的,应使用make_PSB_66_IA64_release。X86-64变体应能与Intel EM64T体系结构一起工作,但这点尚未测试(就我们所知)。

完成创建进程后,在zipped tar文件中可发现已编译好的库,文件的名称符合DIS-<operating-system>-time-date。现在,可将软件包安装到恰当位置。在本例中,我们使用的安装目录是/opt/DIS(注释:你很可能需要以系统根用户的身份运行下述命令):

shell> cp DIS_Linux_2.4.20-8_181004.tar.gz /opt/
shell> cd /opt
shell> tar xzf DIS_Linux_2.4.20-8_181004.tar.gz
shell> mv DIS_Linux_2.4.20-8_181004 DIS

网络配置

至此,所有的库和二进制文件均已安装到了恰当的位置,还需确保SCI卡在SCI的地址空间范围内拥有恰当的节点ID。

进行后面的操作前,还需确定网络结构。对于该情形,有三种可使用的网络结构:

·         一维单环网络。

·         1个或多个SCI交换器,每个交换器端口有1个环形网。

·         2维或3维环面网。

每类拓扑结构均有自己的、用于提供节点ID的方法。下面给出了简要讨论。

单环网采用的节点ID是4的非0倍数,4,8,12…。

下一个可行的选择是SCI交换器。1个SCI交换器有8个端口,每个端口都能支持1个环形网。有必要确保不同的环形网使用了不同的节点ID空间。对于典型的配置,第1个端口使用的节点ID低于64(4~60),接下来的64个节点ID(68~124)指定给下一个端口,依此类推,节点ID 452~508将被指定给第8个端口。

对于2维或3维环面网结构,每个节点位于各维中,在第1维中,各节点的增量为4,在第2维中,增量为64,在第3维中(如果适用的话),增量为1024。关于更详尽的文档,请参见Dolphin的网站

在我们的测试中,采用了交换器方式,但大多数大型簇安装应用使用的是2维或3维环面网结构。采用交换器方式具有的优点是:使用双SCI卡和双交换器,能够相对容易地创建冗余网络,SCI网络上的平均故障切换时间在100毫秒量级。对于SCI套接字实施,MySQl簇中的SCI传输器支持该结构,而且它也处于发展当中。

对于2D/3D环面网,故障切换也是可能的,但需要向所有节点发送发出新的路由索引。然而,这仅需要100毫秒左右就能完成,对于大多数高可用性情形,这是可接受的。

通过将簇数据节点恰当地置于交换式体系结构中,能够使用2个交换器来构建结构,将16台计算机互联在一起,任何单点故障均不会妨碍1台以上的计算机。对于32台计算机和2台交换器,也能以这样的方式配置簇,任何单点故障均不会导致2个以上的节点丢失,在此情况下,也能知道那一对节点收到影响。因此,通过将两个节点置于不同的节点组,就能创建“安全的”MySQL簇。

要想为SCI卡设置节点ID,可使用/opt/DIS/sbin目录中的下述命令。在本例中,“-c 1”指的是SCI卡的编号(如果在机器上只有1块卡,它总为1),“-a 0”指的是适配器0,“68”是节点ID:

shell> ./sciconfig -c 1 -a 0 -n 68

如果在同一台机器上有多块SCI卡,使用下述命令(假定当前的工作目录是/opt/DIS/sbin),可确定哪块卡使用哪个插槽:

shell> ./sciconfig -c 1 -gsn

它将给出SCI卡的序列号。然后用“-c 2”重复该步骤,依此类推(对机器上的每块卡)。一旦将每块卡与1个插槽匹配后,可为所有卡设置节点ID。

安装了必要的库和二进制文件,并设置了SCI节点ID后,下一步是设置从主机名(或IP地址)到SCI节点ID的映射。该任务可在SCI套接字配置文件中完成,该文件应被保存为/etc/sci/scisock.conf。在该文件中,通过恰当的SCI卡将SCI节点映射到与之通信的主机名或IP地址。这里给出了一个很简单的配置文件示例:

#host           #nodeId
alpha           8
beta            12
192.168.10.20   16

也能对配置进行限制,使其仅应用在这些主机的可用端口子集上。也能使用额外的配置文件/etc/sci/scisock_opt.conf完成该设置,如下所示:

#-key                        -type        -values
EnablePortsByDefault                yes
EnablePort                  tcp           2200
DisablePort                 tcp           2201
EnablePortRange             tcp           2202 2219
DisablePortRange            tcp           2220 2231

驱动程序安装

创建好了配置文件后,可安装驱动程序。

首先应安装底层驱动,然后安装SCI套接字驱动:

shell> cd DIS/sbin/
shell> ./drv-install add PSB66
shell> ./scisocket-install add

如果愿意,可调用脚本来核实SCI套接字配置文件中的所有节点是否均能访问,通过该方式检查安装:

shell> cd /opt/DIS/sbin/
shell> ./status.sh

如果发现错误并需要更改SCI套接字配置,需要使用ksocketconfig来完成该任务:

shell> cd /opt/DIS/util
shell> ./ksocketconfig -f

测试设置

为了确保SCI套接字已实际使用,可使用latency_bench测试程序。使用该实用工具的服务器组件,客户端能够连接服务器以测试连接的等待时间,通过观察等待时间,可方便地判定是否启用了SCI。(注释:使用latency_bench之前,需要设置环境变量LD_PRELOAD,请参见本节后面的介绍)。

要想设置服务器,可使用下述命令:

shell> cd /opt/DIS/bin/socket
shell> ./latency_bench -server

要想运行客户端,再次使用latency_bench,但此时采用“-client”选项:

shell> cd /opt/DIS/bin/socket
shell> ./latency_bench -client server_hostname

到目前为止,应完成了SCI套接字配置,而且MySQL簇已做好了使用SCI套接字和SCI传输器的准备(请参见17.4.4.10节,“MySQL簇SCI传输连接”)。

启动簇

该进程接下来的步骤是启动MySQL簇。要想启用SCI套接字,在启动ndbd、mysqld和ndb_mgmd之前,需要设置环境变量LD_PRELOAD。该变量应指向用于SCI套接字的内核库。

要想在bash shell下启动ndbd,可执行下述命令:

bash-shell> export LD_PRELOAD=/opt/DIS/lib/libkscisock.so
bash-shell> ndbd

在tcsh环境下,可使用下述命令完成相同的任务:

tcsh-shell> setenv LD_PRELOAD=/opt/DIS/lib/libkscisock.so
tcsh-shell> ndbd

注释:MySQL簇可以仅使用SCI套接字的内核变体。

17.7.2. 理解簇互连的影响

ndbd进程有很多简单的结构,它们可用于访问MySQL簇中的数据。我们创建了一个十分简单的基准测试来检查它们的性能,以及各种互联方式对其性能的影响。

有四种访问方法:

·         主键访问

通过其主键简单地访问记录。在最简单的情况下,一次仅访问一条记录,这意味着该单一请求需负担设置众多TCP/IP消息的全部开销以及众多的场景切换开销。对于在一批中发出多个主键访问请求的情况,这些访问请求将分担设置必要TCP/IP消息和场景切换的开销。如果TCP/IP消息是面向不同目标的,还须设置额外的TCP/IP消息。

·         唯一键访问

唯一键访问与主键访问类似,差别在于,唯一键访问是作为在索引表上的读取操作执行的,然后是作用在表上的主键访问。但是,MySQL服务器仅发送一条请求,而且对索引表的读取是由ndbd负责处理的。这类请求也受益于批处理法。

·         全表扫描

对于表查询,当不存在索引时,将执行全表扫描。这将作为单一请求被发送至ndbd进程,该进程随后将表扫描分为在所有簇ndbd进程上进行的一组并行扫描。在未来的MySQL簇版本中,SQL节点能够过滤某些扫描。

·         使用有序索引的范围扫描

使用有序索引时,它将使用与全表扫描相同的方式执行扫描,不同之处在于,它仅扫描位于MySQL服务器(SQL节点)所传输查询使用的范围内的记录。当所有绑定的索引属性包含分区 键中的所有属性时,将以并行方式扫描所有分区。

为了检查这些访问方法的基本性能,我们开发了一组基准。作为这类基准之一,testReadPerf能够测试简单的和批处理式主键和唯一键访问。通过发出返回单一记录的扫描请求,该基准还能测量范围扫描的设置开销。此外,还有1个该基准的变体,它采用了范围扫描来获取批量记录。

这样,我们就能确定单键访问的开销,以及单记录扫描访问的开销,并能根据基本访问方法测量通信媒介的影响。

在我们进行的测试中,为采用TCP/IP套接字的正常传输器和使用SCI套接字的类似设置进行了基本设置。下面给出的数字是关于少量访问的,每次访问20条记录。使用2KB的记录时,串行访问和批式访问之间的差异将降低3~4倍。对于2KB的记录,未测试SCI套接字。测试是在下述簇上进行的,该簇有两个数据节点,这两个数据节点运行在2台双CPU机器上,处理器为AMD MP1900+。

Access type:         TCP/IP sockets           SCI Socket
Serial pk access:    400 microseconds         160 microseconds
Batched pk access:    28 microseconds          22 microseconds
Serial uk access:    500 microseconds         250 microseconds
Batched uk access:    70 microseconds          36 microseconds
Indexed eq-bound:   1250 microseconds         750 microseconds
Index range:          24 microseconds          12 microseconds

我们还执行了另一组测试,以检查SCI套接字的性能以及SCI传输器的性能,并将这两者与TCP/IP传输器的性能进行了比较。所有测试均采用了主键访问方法,或采用串行多线程方式,或采用多线程批方式。

测试结果表明,SCI套接字比TCP/IP约快100%。与SCI套接字相比,在大多数情况下,SCI传输器的速度更快。在具有很多线程的测试程序中出现了1个值得关注的情况,它表明,与mysqld进程一起使用时,SCI传输器的执行性能并不很好。

我们得出的总体结论是,对于大多数基准,与TCP/IP相比,除了罕见的通信性能不成其为关注事宜的情况外,使用SCI套接字能将性能提升约100%。当扫描过滤器占用大多数处理时间,或当执行大量的主键访问,就会出现该情况。在这类情况下,ndbd进程中的CPU处理操作将占用开销的相当大部分。

对于使用SCI传输器来取代SCI套接字,它仅对ndbd进程之间的通信有意义。如果CPU能专门用于ndbd进程,使用SCI传输器也也很有意义,这是因为SCI传输器能确保该进程永不休息。另一个重要特性是,它能确保对ndbd进程的优先级进行特定的设置,即使运行了很长的时间,其优先级也不会丧失,就像在Linux 2.6中通过将进程锁定到CPU而能实现的那样。如果这类配置是可能的,与使用SCI套接字相比,ndbd进程将获得10~70%的性能提升(执行更新以及可能的并行扫描操作时,性能提升较大)。。

对于计算机簇,还有数种其他的优化套接字实施方案,包括Myrinet、吉比特以太网、Infiniband(无限带宽)和VIA接口。迄今为止,我们仅与SCI套接字一起测试了MySQL簇。我们还提供了上述文档,其中,介绍了如何使用针对MySQL簇的常规TCP/IP来设置SCI套接字的方法。

17.8. MySQL簇的已知限制

在本节中,我们列出了5.1.x系列中对MySQL簇的一些已知限制,并与使用MyISAM和InnoDB存储引擎时可用的特性进行了比较。目前,尚不打算在即将推出的MySQL 5.1版本中处理这些问题,但是,我们将在后续的版本系列中,提供这方面的补丁和修正。如果你检查了MySQL缺陷数据库(http://bugs.mysql.com)中的“簇”类别,可发现我们打算在即将推出的MyAQL 5.1版中更正的已知缺陷(如果标记为“5.1”的话)。

(注释:在本节末尾,列出了在当前版本中已解决的MySQL 5.0簇中的一些事宜)。

·         语法中的不兼容性(运行已有的应用程序时导致错误):

o        不支持文本索引。

o        不支持Geometry数据类型(WKT和WKB)。

·         限制或行为中的不兼容性(运行已有的应用程序时可能导致错误):

o        没有事务的部分回滚功能。重复键或类似错误会导致整个事务的回滚。

o        存在很多可配置的硬限制,但能使用簇中的可用主内存设置限制。关于配置参数的完整清单,请参见17.4.4节,“配置文件”。大多数配置参数可在线升级。这些硬限制包括:

§         数据库内存大小和索引内存大小(分别是DataMemory和IndexMemory)。

§         对于能够执行的最大事务数,可使用配置参数MaxNoOfConcurrentOperations进行设置。注意批量加载,TRUNCATE TABLE和ALTER TABLE是通过运行多个事务作为特殊情况进行处理的,因而不受该限制的约束。

§         与表和索引有关的不同限制。例如,每表的最大有序索引数是由MaxNoOfOrderedIndexes确定的。

o        在NDB表中,数据库名称、表名称和属性名称不能与其他表处理程序中的一样长。属性名称将被截短至31个字符,截短后如果不是唯一的,将导致错误。数据库名称和表名的总最大长度为122个字符(也就是说,NDB簇表名的最大长度为122个字符减去该表所属的数据库的名称中的字符数)。

o        所有的簇表行具有固定长度。这意味着(例如),如果表中有仅包含相对较小值的1个或多个VARCHAR字段,与使用MyISAM引擎的相同表和数据相比,使用NDB存储引擎时需要更多的内存和磁盘空间。换句话讲,对于VARCHAR列,它所需的存储空间与具有相同大小的CHAR列所需的相同。

o        簇数据库中的最大表数目限制为1792。

o        每表的最大属性数限制为128。

o        任一行的最大允许大小为8K,不包括保存在BLOB列中的数据。

o        每键的最大属性数为32。

·         不支持的特性(不会导致错误,但不被支持或强制):

o        外键结构将被忽略,就像在MyISAM表中那样。

o        保存点以及对保存点的回滚将被忽略,就像在MyISAM中那样。

·         性能以及与限制有关的事宜

o        由于对NDB存储引擎的连续访问,存在查询性能问题,与MyISAM或InnoDB的情形相比,执行很多范围扫描时,开销相对昂贵。

o        不支持范围统计中的记录,在某些情况下,这会造成非最优查询计划。可采用USE INDEX或FORCE INDEX规避该问题。

o        对于使用USING HASH创建的唯一性哈希索引,如果NULL是键的一部分,不能使用这类索引访问表。

o        MySQL簇不支持磁盘上的持续提交。提交将被复制,但不保证在提交时会将日志写入磁盘。

·         丢失特性:

o        唯一支持的隔离级别是READ_COMMITTED(InnoDB支持READ_COMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE)。关于其如何影响簇数据库备份和恢复的更多信息,请参见17.6.5.5节,“备份故障诊断与排除”。

o        不支持磁盘上的持续提交。提交将被复制,但不保证在提交时会将日志写入磁盘。

·         与多MySQL服务器有关的问题(与MyISAM或InnoDB无关):

o        运行多个MySQL服务器时,ALTER TABLE未完全锁定(无分布式表锁定)。

o        如果在多个MySQL服务器上进行了更新,MySQL复制功能不能正确处理。但是,如果数据库分区方案是在应用级别上完成的,而且在这些分区上非发生事务,那么可使复制功能正确工作。

o        对于访问相同MySQL簇的多MySQL服务器,不支持数据库的自动发现(autodiscovery)功能。但是,在情况下,支持对表的自动发现(autodiscovery)功能。这意味着,创建了名为db_name的数据库后,或使用1个MySQL服务器导入了该数据库后,应在访问相同MySQL簇的每个额外MySQL服务器上发出CREATE DATABASE db_name语句(从MySQL 5.0.2开始,你还能使用CREATE SCHEMA db_name;)。一旦对给定MySQL服务器完成了该操作,服务器应能检测到数据库表,而不产生错误。

·         仅与MySQL簇有关的事宜(与MyISAM或InnoDB无关):

o        簇中使用的所有机器必须具有相同的体系结构,也就是说,所有承载节点的机器必须是big-endian或little-endian,不能混合使用这两者。例如,不能用运行在PPC上的管理节点指挥运行在x86机器上的数据节点。该限制不适用于简单运行mysql或其他客户端(可能会访问簇的SQL节点)的机器。

o        不能像使用ALTER TABLE或CREATE INDEX完成的那样执行在线方案更改,这是因为NDB簇不支持这类变更的自动检测(但是,能够导入或创建使用不同存储引擎的表,然后使用“ALTER TABLE tbl_name ENGINE=NDBCLUSTER;”将其转换为NDB。在这类情况下,需要发出FLUSH TABLES命令,强制簇发现变化)。

o        不能在线增加或舍弃节点(此时必须重启簇)。

o        使用多个管理服务器时:

§         必须在连接字符串中明确为节点指定ID,这是因为,在多个管理服务器上,自动分配的节点ID不能正常工作。

§         必须十分小心,确保所有的管理服务器具有相同的配置。簇对此方面不进行任何特殊检查,

§         要想使管理节点能发现彼此的存在,创建了簇后必须重启所有的数据节点(详细解释请参见Bug #13070)。

o        不支持用于数据节点的多个网络接口。如果使用了这类接口,很容易导致问题,原因在于,在出现某一数据节点失败的情况下,SQL节点将等待以确认该数据节点是否出现问题,但由于该数据节点的另一路径仍保持打开状态,SQL节点永远不会收到该确认信息。这会导致簇无法工作。

o        数据节点的最大数目为48。

o        MySQL簇中总的最大节点数为63。在该数值中包括所有的MySQL服务器(SQL节点),数据节点和管理服务器。

考虑到本节开始时设定的条件,我们力图使上面列出的信息尽可能完全。你可以将任何遇到的差异通报到MySQL缺陷数据库,http://bugs.mysql.com/。如果我们不打算在MySQL 5.1中更正该问题,我们会将其添加到列表中。

17.9. MySQL簇发展的重要历程

17.9.1. MySQL 5.0中的MySQL簇变化 17.9.2. 关于MySQL簇的MySQL 5.1发展历程

在本节,我们讨论了MySQL 5.1在MySQL簇实施中的一些变化,并与MySQL 5.0进行了比较。我们还将讨论对MySQL簇的进一步重大改进,目前是为MySQL 5.2规划的。

在MySQL 5.0和5.1中,NDB簇存储引擎实施方案之间的变化相对较少,因此其升级相对快捷和简单。

为MySQL簇开发的主要新特性均归入了MySQL 5.1树。在本节中,我们还提供了一些提示,介绍了在MySQL 5.1中簇特性可能包含的方面(请参见17.9.2节,“关于MySQL簇的MySQL 5.1发展历程”)。

17.9.1. MySQL 5.0中的MySQL簇变化

MySQL 5.0.3-beta以及更新的版本包含一些有趣的新特性:

·         下推条件:一种查询,如:

·                SELECT * FROM t1 WHERE non_indexed_attribute = 1;

它将使用全表扫描,并会在簇的数据节点内评估条件。因此,不需要在网络中发送用于评估的记录(也就是说,采用函数传输而不是数据传输)。对于这种查询类型,其速度快5~10倍。请注意,模目前该特性是默认禁止的(有待更彻底的测试),但在某些情况下也能良好工作。使用命令“SET engine-condition-pushdown=On; command”可启用该特性。作为可选方式,你也可以用新的“--engine-condition-pushdown”选项标志启动MySQL服务器,运行启用了该特性的mysqld。

可以使用EXPLAIN来判定在何时使用了下推条件。

该变化的一项主要优点在于,能够以并行方式执行查询。这意味着,与以往相比,对非索引列的查询要快5~10倍,乘以数据节点的数目。原因在于,多个CPU能以并行方式执行查询。

·         降低了IndexMemory使用:在MySQL 5.1中,每条记录约消耗25字节的索引内存,每个唯一索引每记录将使用25字节的索引内存(不含某些数据内存,这是因为它们保存在单独表中)。这是因为在索引内存中,不再需要保存主键。

·         为MySQL簇启用了查询高速缓冲:关于配置和使用查询高速缓冲的更多信息,请参见5.13节,“MySQL查询高速缓冲”。

·         新的优化:有一个需要给予特别关注的优化,即,目前在某些查询中使用了批式读取接口。例如,考虑下述查询:

·                SELECT * FROM t1 WHERE primary_key IN (1,2,3,4,5,6,7,8,9,10);

与以往的MySQL簇版本相比,该查询的执行速度快2~3倍,原因在于,全部10个 键查找是在1个批次中发出的,而不是一次发送一个。

·         限制元数据对象的数目:在MySQL 4.1中,每个簇数据库最多可能包含1600个元数据对象,包括数据库表,系统表,索引和BLOB。在MySQL 5.0中,我们希望将该数值增加到20320。我们打算在2005年年中发布的MySQL 5.0.6 beta版中实现该增强特性。

17.9.2. 关于MySQL簇的MySQL 5.1发展历程

这里所介绍的内容是一份状态报告,它基于最近提交到MySQL 5.1源码树的内容。请注意,所有的5.1开发活动均可能随时变化。

目前,有四种为MySQL 5.1开发的主要新特性:

1.    将MySQL簇集成到了MySQL复制中:这样,就能从簇中的任何MySQL服务器执行更新,并由簇中的1个MySQL服务器处理MySQL复制,并保持了从服务器端安装的一致性。

2.    支持基于磁盘的记录:将支持磁盘上的记录。对于包含主键哈希索引的有索引字段,必须仍保存在RAM中,但可以将所有其他字段保存在磁盘上。

3.    大小可变的记录:定义为VARCHAR(255)的列目前使用260字节的存储空间,与任何特定记录中保存的内容无关。在MySQL 5.1簇表中,只保存被记录实际占用的字段部分。这样,在很多情况下,能够将这类列的空间需求量降低5倍。

4.    用户定义的分区功能:用户能够根据主关键的字段部分定义分区。MySQL服务器能够发现是否能将某些分区从WHERE子句中删除。能够根据KEY、HASH、RANGE和LIST处理程序执行分区操作和子分区操作。对于很多其他处理程序,也应能使用该特性。

此外,对于簇表中包含除BLOB或TEXT外的列类型的行,我们正准备增大8K的大小限制值。这是因为,行目前具有固定的大小,页大小为32768字节(减去用于行标题的128字节)。在目前,这意味着,如果允许每记录占用的大小超过8K,剩余的空间将为空(多达14000字节)。在MySQL 5.1中,我们打算更正该限制,从而使得在给定行中使用8K以上的空间不会导致页剩余部分的浪费。

17.10. MySQL簇常见问题解答

·         使用簇与使用复制的区别是什么?

在复制设置中,主MySQL服务器负责更新1个或多个从服务器。事务按顺序提交,较慢的事务会导致从服务器滞后于主服务器。这意味着,如果主服务器失败,从服务器可能无法记录最近的少数事务。如果使用了事务安全引擎,如InnoDB,要末是在从服务器上完成事务,要末是根本就不记录事务,但复制不保证主服务器和从服务器上的所有数据在任何时候都是一致的。在MySQL簇中,所有的数据节点保持同步,任何一个数据节点提交的事务将被提交给所有的数据节点。当某一数据节点失败时,所有剩余的数据节点仍能保持一致的状态。

简而言之,尽管标准的MySQL复制是异步的,但MySQL簇是同步的。

我们计划在MySQL 5.1中为簇实现(异步)复制功能。包括在两个簇之间,以及MySQL簇和非簇类MySQL服务器之间的复制能力。

·         为了运行簇,我是否需要进行特殊的组网呢?(簇中的计算机是如何通信的?)

MySQL簇是为高带宽环境下的使用而设计的,计算机通过TCP/IP相连。其性能直接取决于簇计算机之间的连接速度。对于簇,最低连接要求包括:典型的100MB以太网网络或等效网络。如果可能,建议使用GB以太网。

也支持更快的SCI 协议,但需要特殊硬件。关于SCI的更多信息,请参见17.7节,“使用与MySQL簇的高速互连”。

·         运行簇需要多少台计算机?为什么?

要想运行可行的簇,最少需要3台计算机。但在MySQL簇中,推荐的最低计算机数目为4:1台负责运行管理节点,1台负责运行SQL节点,2台用作存储节点。使用2个数据节点的目的是为了提供冗余性,管理节点必须运行在单独的机器上,这样,当1个数据节点失败时,仍能保证连续的仲裁服务。

·         簇中不同计算机所负责的任务是什么?

MySQL簇包含物理和逻辑结构,计算机是其物理部件。簇的逻辑或功能部件称为节点,容纳簇节点的计算机有时也称为簇主机。在理想情况下,每台簇主机将有1个节点,但在单个簇主机上可运行多个节点。簇中有三种节点,每一种节点均对应特定的角色。它们是:

1.    管理节点(MGM节点):为整个簇提供管理服务,包括启动、停止、备份、以及为其他节点配置数据。管理节点服务器是作为应用程序ndb_mgmd实现的,用于通过MGM节点控制MySQL簇的管理客户端是ndb_mgm。

2.    数据节点:保存和复制数据。数据节点的功能由NDB数据节点进程ndbd的实例负责处理。

3.    SQL节点:这是用“--ndb-cluster”选项启动的MySQL服务器(mysqld)的一个实例。

·         用什么操作系统才能使用簇呢?

在MySQL 5.1中,在Linux、Mac OS X和Solaris平台上均正式支持MySQL簇。我们正在努力为其他平台增加簇支持,包括Windows,我们的目标是,最终在支持MySQL本身的所有平台上实现MySQL簇。

在其他操作系统上运行簇也是可能的。用户告诉我们,他们在FreeBSD平台上超过运行了簇。但是,除了前面介绍的三种操作系统外,在其他平台上运行的簇应被视为alpha软件(最好情况),不保证在生产环境下的可靠性,而且不被MySQL AB支持。

·         运行MySQL簇的硬件要求是什么?

在簇运行的任何平台上,应具有具备NDB功能的二进制文件。显而易见,更快的CPU和更多的内存能够改善性能,64位CPU的效率很可能高于32位处理器。在用于数据节点的机器上必须有足够的内存,以便容纳各节点共享的数据库部分。(更多信息,请参见我需要多少内存?)。节点能通过标准的TCP/IP网络和硬件进行通信。对于SCI支持,需要特殊的组网硬件。

·         由于MySQL簇使用了TCP/IP,这是否意味着我能在Internet上运行1个或多个节点位于远程位置的簇?

请记住,在MySQL簇中,节点间的通信并不安全,这点极其重要,这类通信未加密,也未采用任何防护机制。对于簇,最安全的配置是位于防火墙后的专用网络,不能从外部直接访问任何簇数据或管理节点(对于SQL节点,应采取相同的防护措施,就像在MySQL服务器的其他实例中那样)。

无论是任何情况,在这类条件下簇的可靠运行十分令人怀疑,这是因为设计和实施MySQL簇时,假定它运行在能保证专用高速连通性的条件下,如使用100MB或GB以太网的LAN中(更倾向于后者)。对于低于该要求的任何环境,我们未作任何测试,也不保证其性能。

·         要想使用簇,我是否不得不学习新的编程语言或查询语言?

不。尽管使用了一些专用命令来管理和配置簇本身,但对于下述操作,仅需要标准的(My)SQL查询和命令:

o        创建、更改和撤销表。

o        插入、更新和删除表数据。

o        创建、更改和撤销主索引和唯一索引。

o        配置和管理SQL节点(MySQL服务器)。

·         使用簇时,如何了解错误或警告消息的含义呢?

有两种完成它的方式:

1.    出现错误或告警状况时,在MySQL监视器内,立刻使用SHOW ERRORS或SHOW WARNINGS。也能在MySQL Query Browser(查询浏览器)中显示它们。

2.    在系统shell提示符下,使用perror --ndb error_code。

·         MySQL簇是事务安全的吗?支持什么隔离级别?

是。对于用NDB存储引擎创建的表,支持事务。在MySQL 5.1中,簇仅支持READ_COMMITTED事务隔离级别。

·         簇支持的表类型是什么?

NDB是仅有的支持簇功能的MySQL存储引擎。

(能够使用其他存储引擎在用于簇的MySQL服务器上创建表,如MyISAM或InnoDB,但这类非NDB表不在簇中)。

·         “NDB”的含义是什么?

它是“Network Database”(网络数据库)的缩写。

·         哪些版本的MySQL软件支持簇?我必须从源码编译吗?

在5.1系列的所有MySQL-max二进制版本中均支持簇,但下面介绍的除外。使用命令SHOW VARIABLES LIKE 'have_%';或SHOW ENGINES;,可检查你的服务器是否支持NDB(更多信息,请参见5.1.2节,“mysqld-max扩展MySQL服务器”)。

Linux用户请注意,NDB未包含在标准的MySQL服务器RPM中。对于NDB存储引擎以及所附的管理工具和其他工具,有单独的RPM软件包。请参见MySQL 5.1下载页上的NDB RPM下载部分(以前,你必须使用以.tar.gz档案方式提供的“-max”二进制文件。目前仍能这样,但却不是必须的,如果愿意,可使用Linux分发版的RPM管理器)。通过从源码编译-max二进制文件,也能获得NDB支持,但使用MySQL簇时,不需要这样。要想只下载最新的MySQL 5.1系列的二进制版本、RPM、或源码分发版,请访问http://dev.mysql.com/downloads/mysql/5.1.html

·         我需要多少RAM?是否能全部使用磁盘内存?

在目前,簇是仅“内存中”的。这意味着所有的表数据(包括索引)均保存在RAM中。因此,如果你的数据占用了1GB的空间,而且打算在簇中将它复制1次,需要2GB的内存。还应加上操作系统以及在簇计算机上运行的应用程序所需的内存。

可以使用下述公司粗略估计簇中每个数据节点所需的RAM量:

(SizeofDatabase * NumberOfReplicas * 1.1 ) / NumberOfDataNodes

要想更准确地计算内存需求量,需要为簇数据库中的每个表确定每行所需的存储空间(详情请参见11.5节,“列类型存储需求”),然后乘以占行数。还必须对列索引进行计算,方式如下:

o        对于为NDB簇表创建的每个主键索引或哈希索引,每记录需要21-25字节。这类索引使用IndexMemory(索引内存)。

o        每个有序索引每记录需要10字节的存储空间,使用DataMemory(数据内存)。

o        创建主键或唯一索引时,还会创建1个有序索引,除非该索引是使用USING HASH创建的。换句话讲,如果未使用USING HASH创建它们,对于簇表上的每个键多因或唯一索引,在MySQL 5.1中,每记录占用31-35字节。

注意,使用USING HASH为所有主键和唯一索引创建MySQL簇表时,通常还能使表的更新速度更快。这是因为,它需要较少的内存(因未创建有序索引),对CPU的占用也较低(仅需读取或更新较少的索引)。

请记住,所有的MySQL簇表必须有主键,这点极其重要。如果未定义,NDB存储引擎将自动创建主键,而且该主键是在未使用USING HASH的条件下创建的。

很难准确确定簇索引在任何给定时间用于存储的内存量,但是,当可用DataMemory和/或IndexMemory的使用率到达80%时,会将警告消息写入簇日志,到达80%、90%等时,也会写入簇日志。

我们经常遇到用户通报的下述问题,当他们视图填充簇数据库时,加载进程提前终止,并显示下述错误消息:

错误1114:表'my_cluster_table'已满。

出现该情况时,很可能是因为在你的设置中未为所有的表数据和索引提供足够的RAM,包括NDB存储引擎所需的主键,以及表定义中不包含主键定义时自动创建的主键。

此外还应注意,所有的数据节点应具有相同的RAM量,这是因为,簇中任何数据节点所能使用的内存均不超过任意单独数据节点的最低可用内存。换句话讲,如果有三台运行簇数据节点的计算机,在其中两台计算机上,有3GB用于保存簇数据的RAM,另一台计算机只有1GB RAM,那么每个数据节点仅能为簇贡献1GB。

·         出现灾难性故障时,例如整个城市断电而且我的UPS也出现故障,我会丢失所有的数据吗?

所有已提交的事务将被记录。因此,在出现灾难的情况下,某些数据可能会丢失,但相当有限。通过减少每事务的操作数,能够进一步减少数据损失(在任何情形下,在每事务上执行大量操作都不是一个好主意)。

·         能够与簇一起使用FULLTEXT索引吗?

FULLTEXT索引功能目前不被NDB存储引擎支持,也不被除MyISAM之外的任何存储引擎支持。我们打算在未来的版本中增加该功能。

·         我能在一台计算机上运行多个节点吗?

可以,但不建议这样。运行簇的主要原因之一是提供冗余,为了获得冗余性的全部优点,每个节点应位于单独的计算机上。如果将多个节点置于同一台机器,当该机器出现故障时,所有节点均将丢失。考虑到MySQL簇能运行在常见的硬件上并利用廉价的操作系统(或不需费用),为了确保任务关键型数据的安全,值得为额外的机器户花费开销。此外还须注意,对运行管理节点的簇主机的要求最低,使用200 MHz Pentium CPU,操作系统所需的足够RAM,以及用于ndb_mgmd和ndb_mgm进程的少量开销,就能完成该任务。

·         我能在不重启的情况下为簇增加节点吗?

目前不行。对于在簇中添加新的MGM或SQL节点来说,简单的重启就是所需的一切。添加数据节点时,进程略微复杂些,需要采取下述步骤:

o        对所有簇数据进行完整备份。

o        彻底关闭簇和所有的簇节点进程。

o        使用“—initial”启动选项重启簇。

o        从备份中恢复所有簇数据。

在未来的MySQL簇版本中,我们希望为MySQL簇实现“热”重配置功能,以便能够将添加新节点时重启簇的要求降至最低(如果不能消除的话)。

·         使用簇时有需要我了解的限制吗?

MySQL中的NDB表服从下述限制:

o        并非所有的字符集和校对均被支持。

o        不支持FULLTEXT索引和前缀索引。只能为完整的列设置索引。不支持第19章:MySQL中的空间扩展中介绍的空间扩展。

o        仅支持对事务的完整回滚。不支持部分回滚以及回滚至保存点。

o        每表允许的最大属性数为128,而且属性名称不得超过31个字符。对于每个表,表和数据库名称的最大组合长度为122个字符。

o        表行的最大大小为8KB,不包括BLOB。对于每表中的行数没有限制,表的大小限制取决于多种因素,尤其是每个数据节点可用的RAM量。

o        NDB引擎不支持外键约束。就像MyISAM表一样,这些约束将被忽略。

o        不支持查询高速缓冲功能。

关于簇限制的更多信息,请参见17.8节,“MySQL簇的已知限制”。

·         怎样将已有的MySQL数据库导入到簇中?

可以将数据库导入到MySQL簇中,就像用其他版本的MySQL那样。除了前一问题所提到的限制外,仅有的特殊要求是,准备包含到簇中的任何表必须使用NDB存储引擎。这意味着,表必须是用ENGINE=NDB或ENGINE=NDBCLUSTER创建的。使用ALTER TABLE,能够将使用其他存储引擎的现有表转换为NDB簇表,但需要采取额外避规措施,详情请参见17.8节,“MySQL簇的已知限制”。

·         簇节点是怎样彼此通信的?

簇节点能够通过下述三种协议中的任何一种进行通信:TCP/IP、SHM(共享内存)和SCI(规模可扩展的计算机连接接口)。在适用的场合,对于位于相同簇主机上的节点间通信,默认协议为SHM。SCI是高速(每秒1GB或更高)、高可用性协议,用于创建可扩展的多处理器系统,它需要特殊硬件和驱动。关于使用SCI作为簇中传输机制的更多信息,请参见17.7节,“使用与MySQL簇的高速互连”。

·         什么是“arbitrator”(仲裁程序)?

如果簇中的1个或多个节点失败,并非所有的簇节点均不能彼此“看到”,这是可能的。事实上,能够在网络分区中将两个节点集合彼此隔离,也称为“分裂大脑”。这类情形并不受欢迎,这是因为,每一个节点集合都试图表现为代表整个簇。

当簇节点出现问题时,有两种可能性。如果剩余节点的50%以上能够彼此通信,那么这就是我们有时称之为的“多数支配”情形,该节点集合将被视为簇。当节点数均等时,仲裁程序将介入:在该情形下,仲裁程序所属的节点集合将被当作簇,不属于该节点集合的节点将被关闭。

上述描述略为简化,更完整的解释需要考虑下面介绍的节点组:

当至少一个节点组中的所有节点均有效时,网络分区不是问题,这是因为,簇中的任一个部分均不能构成1个功能性的簇。当没有一个节点组的所有成员均是有效的时,问题产生,在该情况下,网络分区(“分裂大脑”情形)成为可能。随后就需要仲裁程序。所有的簇节点将相同的节点视为仲裁程序,通常是管理服务器。但是,也能将簇中的任何MySQL服务器配置为仲裁程序。仲裁程序接受第一个与其接触的簇节点集合,并通知剩余的集合关闭。对于MySQL服务器和管理服务器节点,仲裁程序的选择是由ArbitrationRank配置参数控制的(详情请参见17.4.4.4节,“定义MySQL簇管理服务器”)。此外还应注意,仲裁程序不会对指定主机施加过多的要求,因此,仲裁程序主机不需要特别块或拥有用于该目的的额外内存。

·         MySQL簇支持的列类型是什么?

MySQL簇支持所有通常的MySQL列类型,但与MySQL空间扩展有关的例外(请参见第19章:MySQL中的空间扩展)。此外,对于索引,当与NDB表一起使用时存在一些差别。注释:MySQL簇表(即用ENGINE=NDBCLUSTER创建的表)仅有固定宽度列。这意味着(例如)含有VARCHAR(255)列的每一条记录需要256字节来保存列,无论列中保存的数据大小是多少。在未来的MySQL版本中,计划更正它。

关于这些方面的更多信息,请参见17.8节,“MySQL簇的已知限制”。

·         如何启动和停止MySQL簇?

需要按照下述顺序分别启动簇中的每个节点:

1.    用ndb_mgmd命令启动管理节点。

2.    用ndbd命令启动每个数据节点。

3.    使用mysqld_safe --user=mysql &,启动每个MySQL服务器(SQL节点)。

对于这类命令中的每一个,必须在受影响节点所在机器上的系统shell中执行。在容纳MGM节点的机器上启动管理客户端ndb_mgm,可验证簇是否正在运行。

·         当簇关闭时,会对簇数据有什么影响?

由簇数据节点保存在内存中的数据将被写入磁盘,并在下一次启动簇时重新装入内存。

要想关闭簇,请在MGM节点所在的机器上、在shell下输入下述命令:

shell> ndb_mgm -e shutdown

这样就能恰当地中止ndb_mgm、ndb_mgm、以及任何ndbd进程。对于用作簇SQL节点的MySQL服务器,可使用mysqladmin shutdown停止它。

更多信息,请参见17.6.2节,“管理客户端”中的命令和17.3.6节,“安全关闭和重启”。

·         簇中有1个以上的管理节点是否有用?

对于可靠性来说它确有帮助。在任何给定的时间,仅需1个MGM节点来控制簇,但能够将1个MGM配置为主节点,并配置1个或多个额外的管理节点,以便在主MGM节点出现故障时取代它。

·         在簇中能混合使用不同的硬件和操作系统吗?

是。只要所有的机器和操作系统均是相同的endian。也能在不同的节点上使用不同的MySQL簇版本,但是,我们建议仅应将其作为滚动升级的一部分使用。

·         我能在单台主机上运行两个数据节点吗?两个SQL节点?

是,能够这样。在有多个数据节点的情况下,每个节点必须使用不同的数据目录。如果打算在一台机器上运行多个SQL节点,那么每个mysqld实例必须使用不同的TCP/IP端口。

·         我能与MySQL簇一起使用主机名吗?

是,对于簇主机,能够使用DNS和DHCP。但是,如果你的应用程序要求“99.999%”的可用性,建议使用固定的IP地址。这是因为,依赖该服务的簇节点间的通信会引入额外的故障点,故障点越少越好。

17.11. MySQL簇术语表

下面给出的术语对理解MySQL簇有所帮助,而且在与MySQL簇一起使用时有一定的特殊含义。

·         簇:

按照通常的理解,簇是一个计算机集合,其功能相当于1个单位,一起工作以完成单一任务。

NDB簇:

这是MySQL中使用的存储引擎,用于实现数据存储、检索、以及多个计算机间分布式管理。

MySQL簇:

指的是使用NDB存储引擎一起工作的一组计算机,以便在使用“内存中”存储的非共享体系结构中支持分布式MySQL数据库。

·         配置文件:

包含与簇、其主机和节点有关的指令和信息的文本文件。当簇启动时,这类文件由簇的管理节点负责读取。详情请参见17.4.4节,“配置文件”。

·         备份:

所有簇数据、事务和日志的完整拷贝,保存在磁盘上或其他长期存储介质上。

·         恢复:

将簇返回以前的状态,与保存在备份中的相同。

·         检查点:

从广义上讲,将数据保存到磁盘时,即达到了检查点。具体对于簇来说,它是将所有已提交事务保存到磁盘的时间点。对于NDB存储引擎,有两种一起工作的检查点,以确保维护簇数据的一致性:

o        本地检查点(LCP):

这是专门针对单一节点的检查点,但是,LCP也会在簇中的所有节点发生,同步性或强或弱。LCP包括将节点的所有数据保存到磁盘,通常每几分钟出现一次。准确的时间间隔会出现变化,具体情况取决于节点上保存的数据量,簇活动的级别,以及其他因素。

o        全局检查点(GCP):

GCP每数秒出现一次,此时,将对所有节点的事务进行同步化处理,并将redo日志保存到磁盘。

·         簇主机:

构成MySQL簇组成部分的计算机。簇具有物理结构和逻辑结构。从物理意义上讲,簇由多个计算机构成,这些计算机也称为簇主机(或主机)另请参见下面的节点和节点组。

·         节点:

它指的是MySQL簇的逻辑或功能性单元,有时也称为簇节点。对于MySQL簇,我们使用术语“节点”表示进程而不是簇的物理部件。实施有效的MySQL簇需要三种节点。它们是:

o        管理(MGM)节点:

负责管理簇中的其他节点。它为其他节点提供了配置数据,负责启动和停止节点,处理网络分区事宜,创建备份和从备份恢复,等等。

o        SQL(MySQL服务器)节点:

MySQL服务器的实例,用作簇数据节点所保存数据的前端。打算保存、检索或更新数据的客户端可访问SQL节点,就像访问其他MySQL服务器一样,采用通常的鉴定方法和API,节点组之间的基本数据分配对用户和应用程序来说是透明的。SQL节点访问作为整体的簇数据库,而不管数据在不同数据节点或簇主机上的分布情况。

o        数据节点:

这些节点负责保存实际数据。表数据片段保存在节点组集合中,每个节点组保存表数据的不同子集。构成节点组的每个节点均保存了该节点组所负责片段的副本。目前,1个簇能支持总数为48的数据节点。

1个以上的节点能共存于单台机器上(事实上,能够在一台机器上设置完成的簇,但在生产环境下几乎没人会这样做)。请记住,使用MySQL簇时,术语“主机”指的是簇的物理部件,而“节点”指的是逻辑或功能部件(即进程),这很有帮助。

关于过时术语的注释:在MySQL簇文档的早期版本中,数据节点有时也称为“数据库节点”、“DB节点”、或偶尔使用的“存储节点”。此外,SQL节点有时也称为“客户端节点”或“API节点”。为了将混淆降至最低,这类早期术语已被放弃,为此,应避免使用它们。

·         节点组:

数据节点的集合。位于节点组内的所有数据节点包含相同的数据(片段),而且单个组内的所有节点应位于不同的主机上。能够对哪个节点术语哪个节点组进行控制。

·         节点失败:

MySQL簇并不仅取决于构成构成簇的任一节点的功能,如果1个或多个节点失败,簇仍能运行。给定簇能容忍的失败节点的准确数目取决于节点的数目和簇的配置。

·         节点重启:

重启失败簇节点的进程。

·         首次节点重启:

不与其文件系统一起启动簇节点的进程。有时用于软件升级或其他特殊场合。

·         系统崩溃(或系统失败):

当很多簇节点失败并无法保证簇的状态时,就会出现该情况。

·         系统重启:

重启簇并根据磁盘日志和检查点重新初始化簇状态的进程。在簇的计划关闭或非计划关闭后,通常需要执行该进程。

·         片段:

数据库表的一部分,在NDB存储引擎中,将表分为众多片段,并以片段方式保存。片段有时也称为“分区”,但“片段”是更可取的术语。在MySQL簇中,对表进行了片段化处理,从而简化了机器和节点间的负载平衡。

·         副本:

在NDB存储引擎下,每个表片段均有多个副本,这些副本保存在其他数据节点上,以提供冗余性。目前,每片段最多有4个副本。

·         传输器:

提供节点间数据传输的协议。MySQL簇目前提供了四种不同的传输器连接:

o        TCP/IP(本地)

当然,这是广为人知的网络协议,它是Internet上HTTP、FTP等的基础。

o        TCP/IP(远程)

同上,但用于远程通信。

o        SCI

SCI(规模可扩展的计算机连接接口)是一种高速协议,由于构建多处理器系统和并行处理应用程序。与MySQL簇一起使用SCI时,需要专门的硬件,具体讨论请参见17.7.1节,“配置MySQL簇以使用SCI套接字”。关于SCI的基本介绍,请参见dolphinics.com上的文章。

o        SHM

Unix风格共享内存(SHM)段。在任何支持的场合下,将自动使用SHM来连接运行在相同主机上的节点。要想了解这方面的更多信息,请参见关于shmop(2)的Unix手册页。

注释:簇传输器是簇内部的。使用MySQL簇的应用程序与SQL节点进行通信,就像与其他版本的MySQL服务器进行通信一样(通过TCP/IP、或使用Unix套接字、或Windows命名管道)。可以使用标准的MySQL API发出查询并检索结果。

·         NDB:

它是网络数据库(Network Database)的缩写,而且指的是用于启用MySQL簇的存储引擎。NDB存储引擎支持所有通常的MySQL列类型和SQL语句,而且是ACID兼容的。该引擎还提供了对事务的完整支持(提交和回滚)。

·         无共享体系结构:

用于MySQL簇的理想体系结构。在真正的无共享设置下,每个节点运行在单独的主机上。这类安排的优点在于,单个主机或节点不会造成单点故障,也不会成为系统整体的性能瓶颈。

·         内存中存储:

保存在每个数据节点中的数据均保存在节点宿主计算机的内存中。对于簇中的每个数据节点,必须提供足够的RAM,所需的RAM量为:数据库的大小乘以副本数目,然后除以数据节点的数目。因此,如果数据库占用1GB的内存,而且你打算设置具有4个副本和8个数据节点的簇,每节点所需的最小内存为500 MB。注意,还应加上操作系统所需的内存以及运行在主机上的应用程序所需的内存。

·         表:

与关联数据库下的通常情况一样,术语“表”指的是具有等同结构的记录的集合。在MySQL簇中,数据库表以片段集合的方式保存在数据节点中,并将每个片段复制到额外的数据节点上。复制相同片段或片段集合的数据节点集合称为节点组。

·         簇程序:

它们是命令行程序,用于运行、配置和管理MySQL簇。它们包括两种服务器端口监督程序:

o        ndbd:

数据节点端口监督程序(运行数据节点进程)。

o        ndb_mgmd:

管理服务器端口监督程序(运行管理服务器进程)。

以及客户端程序:

o        ndb_mgm:

管理客户端(为执行管理命令提供了1个界面)。

o        ndb_waiter:

用于验证簇中所有节点的状态。

o        ndb_restore:

从备份中恢复簇数据。

关于这些程序及其用法的更多信息,请参见17.5节,“MySQL簇中的进程管理”。

·         事件日志:

MySQL簇按照类别(启动、停止、错误、检查点等)、优先级和严重级别来记录事件。关于所有可通报事件的完整列表,请参见17.6.3节,“MySQL簇中生成的事件报告”。事件日志具有两种类型:

o        簇日志:

为作为整体的簇记录所有所需的、值得记录的事件。

o        节点日志:

为每个单独节点保存的单独日志。

在正常情况下,仅需保存和检查簇日志,这通常已足够。节点日志仅用于应用程序开发和调试目的。

 

这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载