MySQL 5.1参考手册 :: 17. MySQL簇(3)
时间:2008-05-11 来源:sdccf
17.4.4.6. 定义MySQL簇内的SQL节点
在config.ini文件的[MYSQLD]部分中,定义了用于访问簇数据的MySQL服务器(SQL节点)的行为。不需要其中所给出的参数。如果未提供计算机或主机名,那么任何主机均能使用该SQL节点。· [MYSQLD]Id
该值用作节点的地址,供所有的簇内部消息使用,它必须是介于1和63之间的整数。在簇内,每个簇节点必须有唯一的ID。
· [MYSQLD]ExecuteOnComputer
它引用的是在配置文件的[COMPUTER]部分定义的主机(计算机)之一。
· [MYSQLD]ArbitrationRank
该参数用于定义可作为仲裁程序的节点。MGM节点和SQL节点均能成为仲裁程序。如果值为0,表明给定的节点永远不会用作仲裁程序,如果值为1,表明给定的节点在成为仲裁程序方面具有高的优先级,如果值为2,表明给定的节点在成为仲裁程序方面具有低的优先级。对于正常配置,使用管理服务器作为仲裁程序,将它的ArbitrationRank设置为1(默认),并将所有SQL节点的ArbitrationRank设置为0。
· [MYSQLD]ArbitrationDelay
如果将该参数设置为除0(默认值)以外的其他值,表示仲裁程序对仲裁请求的相应将被延迟设定的毫秒数。通常不需要更改该值。
· [MYSQLD]BatchByteSize
对于转换为全表扫描或对索引的范围扫描的查询,要想获得最佳性能,重要的是以恰当的大小获取记录。能够以记录数为单位(BatchSize)和字节为单位(BatchByteSize)设置恰当的大小。实际的批大小由两个参数限定。
查询的执行速度可能会出现40%的变化,具体情况取决于该参数的设置。在未来的版本中,MySQL服务器将根据查询类型恰当地设置与批大小相关的参数。
该参数以字节为单位,默认值是32KB。
· [MYSQLD]BatchSize
该参数以记录数为单位,默认值是64。最大值为992。
· [MYSQLD]MaxScanBatchSize
批大小指的是从各数据节点发送的每批数据的大小。大多数扫描均是以并行方式执行的,目的是为了防止MySQL服务器收到来自众多节点的过多数据,该参数对所有节点上的总的批大小进行了限制。
该参数的默认值为256KB。其最大大小为16MB。
17.4.4.7. MySQL簇TCP/IP连接
在MySQL簇中,TCP/IP是用于建立连接的默认传输协议。正常情况下不需要定义连接,这是因为,簇能自动建立数据节点间、数据节点与所有MySQL服务器节点、以及数据节点与管理服务器之间的连接(关于该规则的例外,,请参见17.4.4.8节,“使用直接连接的MySQL簇TCP/IP连接”)。
如果打算覆盖默认的连接参数,才需要定义连接。在这种情况下,至少需要定义NodeId1、NodeId2、以及打算更改的参数。
通过在[TCP DEFAULT]部分进行设置,也能更改这些参数的默认值。
· [TCP]NodeId1 , [TCP]NodeId2
要想确定两个节点之间的连接,需要在配置文件的[TCP]部分中提供每个节点的ID。
· [TCP]SendBufferMemory
在向操作系统发出调用请求之前,TCP传输器采用缓冲来保存所有的消息。当该缓冲达到64KB时,将发送其内容,执行完一组消息循环后,也将发送这些内容。为了处理临时过载情况,也能定义一个较大的发送缓冲。发送缓冲的默认值是256KB。
· [TCP]SendSignalId
为了能够回扫分布式消息图,需要确定每条消息。将该参数设置为“Y”时,将通过网络传输消息ID。默认情况下禁止该特性。
· [TCP]Checksum
该参数也是一个布尔参数(Y/N或1/0),默认情况下是禁止的。启用了该参数时,在将所有消息置于发送缓冲之前,将为所有参数计算校验和。使用该特性,当消息等候在发送缓冲中时,可以确保消息不会损坏,也能确保消息不会被传输机制破坏。
· [TCP]PortNumber
(已过时)以前,该参数指定了用于监听来自其他节点的连接的端口号。不应再使用嘎参数。
· [TCP]ReceiveBufferMemory
指定了从TCP/IP套接字接收数据时所使用的缓冲大小。几乎不需要更改该参数的默认值,默认值为64KB,但是如果打算节省内存,也能更改它。
17.4.4.8. 使用直接连接的MySQL簇TCP/IP连接
使用数据节点之间的直接连接建立簇时,需要在簇config.ini文件的[TCP]部分中明确指定如此连接的数据节点的交叉IP地址。在下面的示例中,假定簇具有至少4台主机,1台用于管理服务器,一台用于SQL节点,两台用于数据节点。作为整体,簇位于LAN的172.23.72.*子网内。除了通常的网络连接外,两个数据节点使用标准的交叉电缆直接相连,并使用范围在1.1.0.*的IP地址彼此间直接通信,如下所示:
# Management Server
[NDB_MGMD]
Id=1
HostName=172.23.72.20
# SQL Node
[MYSQLD]
Id=2
HostName=172.23.72.21
# Data Nodes
[NDBD]
Id=3
HostName=172.23.72.22
[NDBD]
Id=4
HostName=172.23.72.23
# TCP/IP Connections
[TCP]
NodeId1=3
NodeId2=4
HostName1=1.1.0.1
HostName2=1.1.0.2
使用数据节点间的直接连接能够改善簇的整体效率,使用该方式,数据节点能绕过以太网设备,如交换器、Hub、路由器等,从而减少了簇的等待时间。注意,对于两个以上的数据节点,要想充分利用这类直接连接的优点,需要为各数据节点建立与相同节点组内的其他数据节点间的直接连接。
17.4.4.9. MySQL簇共享内存连接
MySQL簇将尝试使用共享内存传输器,并在可能的情况下自动配置它,尤其是在相同的簇主机上同时运行着1个以上的节点时。在MySQL簇的早期版本中,仅当使用--with-ndb-shm创建了-max二进制版本时,才支持共享内存段。明确地将共享内存定义为连接方法时,至少需要定义NodeId1、NodeId2和ShmKey。对于所有其他参数,应具有在大多数情况下均良好工作的默认值。注释:SHM支持仍应被视为试验性的。
· [SHM]NodeId1, [SHM]NodeId2
要想确定两个节点之间的连接,需要为每个节点提供节点ID,NodeId1和NodeId2。
· [SHM]ShmKey
设置共享内存段时,节点ID用于唯一地确定通信所用的共享内存段。它以整数表示,没有默认值。
· [SHM]ShmSize
每个SHM连接均有一个共享内存段,发送方将节点之间的消息置于该处,读取方从该处读取这类消息。gai 共享内存段的大小由ShmSize定义。默认值是1MB。
· [SHM]SendSignalId
为了回扫分布式消息的路径,需要为每条消息提供唯一性ID。如果将该参数设置为“Y”,也能在网络上传输这类消息ID。默认情况下,该特性是禁止的。
· [SHM]Checksum
该参数也是一种Y/N参数,默认情况下处于禁止状态。如果允许该参数,在将所有消息置于发送缓冲之前,对为所有消息计算校验和。
使用该特性,当消息等候在发送缓冲中时,能防止消息损坏。此外,它还能用于在传输过程中检查损坏的数据。
17.4.4.10. MySQL簇SCI传输连接
仅当使用--with-ndb-sci=/your/path/to/SCI创建了MySQL-Max二进制版本时,在MySQL簇中才支持使用SCI传输器来连接节点。path应指向包含最低库的目录,并应包括含SISCI库和头文件的目录。此外,SCI要求专用硬件。
强烈建议,仅应为ndbd进程之间的通信使用SVI传输器。注意,使用SCI传输器意味着ndbd进程永不停止。因此,仅应在具有至少两块专供ndbd进程使用的CPU的机器上使用SCI传输器。每个ndbd进程至少应有1块CPU,至少还应有1块CPU用于处理操作系统的活动。
· [SCI]NodeId1, [SCI]NodeId2
为了确定两个节点之间的连接,需要为每个节点提供节点ID,NodeId1和NodeId2。
· [SCI]Host1SciId0
它用于确定第1个簇节点上的SCI节点ID(由NodeId1确定)。
· [SCI]Host1SciId1
能够为两块SCI卡间的故障切换设置SCI传输器,这两块卡应使用节点之间的不同网络。它用于确定节点ID,以及在第1个节点上使用的第2块SCI卡。
· [SCI]Host2SciId0
它用于确定第2个簇节点上的SCI节点ID(由NodeId2确定)。
· [SCI]Host2SciId1
使用两块SCI卡来提供故障切换功能时,该参数用于确定将在第2个节点上使用的第2块SCI卡。
· [SCI]SharedBufferSize
每个SCI传输器均有1个用于两节点间通信的共享内存段。可将该共享内存段设置为默认的1 MB,这足以应对大多数应用程序。如果使用较小的值,当执行大量并行插入操作时,会出现问题,如共享缓冲过小,还会导致ndbd进程崩溃。
· [SCI]SendLimit
SCI媒介前面的小缓冲用于保存消息,在通过SCI网络传输这类消息前,会将它们保存在该缓冲内。它的默认值为8kB。按照我们的基准,在64KB时性能最好,但16kB仅有少量提升,即使大于8KB有好处,好处也不大。
· [SCI]SendSignalId
为了跟踪分布式消息,需要唯一地确定每条消息。将该参数设置为“Y”时,就能在网络上传输消息ID。默认情况下禁止该特性。
· [SCI]Checksum
T该参数也是一种布尔值,默认情况下,该参数是被禁止的。启用了Checksum(校验和)时,在将所有消息置于发送缓冲之前,将为所有参数计算校验和。使用该特性,当消息等候在发送缓冲中时,可以确保消息不会损坏。此外,它还能用于在传输过程中检查损坏的数据。
17.5. MySQL簇中的进程管理
17.5.1. 用于MySQL簇的MySQL服务器进程使用 17.5.2. ndbd,存储引擎节点进程 17.5.3. ndb_mgmd,“管理服务器”进程 17.5.4. ndb_mgm,“管理客户端”进程 17.5.5. 用于MySQL簇进程的命令选项 要想掌握管理MySQL簇的方法,需要了解4种基本进程。在本章下面的几节内,介绍了这些进程在簇内的作用,它们的使用方法,以及每种进程可用的启动选项。17.5.1. 用于MySQL簇的MySQL服务器进程使用
mysqld是传统的MySQL服务器进程。要想与MySQL簇一起使用,所创建的mysqld应支持NDB簇存储引擎,就像在预编译的-max二进制版本中那样,http://dev.mysql.com/downloads/。
即使采用该方式创建了mysqld二进制版本,在默认情况下,NDB簇存储引擎仍处于禁止状态。要想启用NDB簇存储引擎,可使用两种可能的选项之一:
· 启动mysqld时,将“—ndbcluster”用作启动选项。
· 在my.cnf文件的[mysqld]部分插入包含ndbcluster的1行内容。
验证运行的服务器是否启用了NDB簇存储引擎的简单方法是,在MySQL监视器(mysql)中发出命令SHOW ENGINES。在列出NDBCLUSTER的行中应能看到值YES,如果在该行上看到NO(或在输出中未显示该行),你所运行的是未启用NDB功能的MySQl版本。如果在该行上看到DISABLED,就需采用上述两种方法之一启用它。
为了读取簇配置数据,MySQL服务器至少需要3种信息:
· MySQL服务器自己的簇节点ID。
· 管理服务器(MGM节点)的主机名或IP地址。
· 与管理服务器相连的端口。
节点ID可动态分配,因此不一定需要明确指定它们。
mysqld参数ndb-connectstring用于指定连接字符串,或是在启动mysqld时在命令行上指定,或是在my.cnf文件中指定。连接字符串包含主机名或IP地址,以及能够发现管理服务器的端口。
在下面的示例中,ndb_mgmd.mysql.com是管理服务器所在的主机,管理服务器在端口1186上监听簇消息。
shell> mysqld --ndb-connectstring=ndb_mgmd.mysql.com:1186
关于连接字符串的更多信息,请参见17.4.4.2节,“MySQL簇连接字符串”。
给定该信息,MySQL服务器将成为簇中的完全参与者。(有时,我们也将运行在该方式下的mysqld进程称为SQL节点)。它能完全了解所有的簇数据节点以及它们的状态,并能建立与所有数据节点的连接。在这种情形下,它能将任何数据节点用作事务协调器,并能访问数据节点以执行读取和更新操作。
17.5.2. ndbd,存储引擎节点进程
ndbd是使用NDB簇存储引擎处理表中所有数据的进程。通过该进程,存储节点能够实现分布式事务处理,节点恢复,对磁盘的检查点操作,在线备份,以及相关的任务。
在MySQL簇中,一组ndbd进程能够共同处理数据。这些进程可以在相同的计算机(主机)上执行,也能在不同的计算机上执行。数据节点和簇主机之间的通信是完全可配置的。
Ndbd将生成一组日志文件,这些文件位于由配置文件中DataDir指定的目录下。下面列出了这些日志文件。注意,node_id代表节点的唯一ID。例如,ndb_2_error.log是由节点ID为2的存储节点生成的错误日志。
· ndb_node_id_error.log是包含所引用ndbd进程所遇到的所有崩溃记录的文件。该文件中的每条记录均包含1个简要的错误字符串,以及对该崩溃跟踪文件的引用。该文件的典型条目与下面给出的类似:
· Date/Time: Saturday 30 July 2004 - 00:20:01
· Type of error: error
· Message: Internal program error (failed ndbrequire)
· Fault ID: 2341
· Problem data: DbtupFixAlloc.cpp
· Object of reference: DBTUP (Line: 173)
· ProgramName: NDB Kernel
· ProcessID: 14909
· TraceFile: ndb_2_trace.log.2
· ***EOM***
注释:请记住,错误日志文件中的最后1个条目并不必然是最新的(也不太可能),这点很重要。错误日志中的条目不是按时间顺序排列的,而是与ndb_node_id_trace.log.next(请参见下面的介绍)中定义的跟踪文件的顺序对应。因此,错误日志条目是按循环方式而不是顺序方式覆盖的。
· ndb_node_id_trace.log.trace_id是准确描述了错误出现之时所发生情况的跟踪文件。该信息在MySQL簇开发团队进行分析时很有帮助。
能够对覆盖旧文件之前创建的跟踪文件的数目进行配置。trace_id是为每个连续的跟踪文件增加的编号。
· ndb_node_id_trace.log.next是记录了要指定的下一个跟踪文件编号的文件。
· ndb_node_id_out.log是包含ndbd进程的任何数据输出的文件。仅当将ndbd启动为端口监督程序时才会创建该文件。
· ndb_node_id.pid是包含启动时作为端口监督程序的ndbd进程的进程ID的文件。它还能起到锁定文件的作用,以防止启动具有相同ID的节点。
· ndb_node_id_signal.log是仅在ndbd调试版下使用的文件,它能跟踪ndbd进程中所有的入站、出站和内部消息。以及它们的数据。
建议不要使用通过NFS安装的目录,这是因为在某些情况下,如果pid-file上的锁定依旧有效,即使当进程中止后也会产生问题。
启动ndbd时,或许需要指定管理服务器的主机名以及监听的端口号。作为可选方式,也可以指定进程将使用的节点ID。
shell> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"
关于这方面的额外信息,请参见17.4.4.2节,“MySQL簇连接字符串”。
启动ndbd时,它实际上将启动两种进程。第1种进程称为“angel process”(天使进程),它的唯一任务是发现执行进程在何时完成,然后重启ndbd进程(如果作了该配置的话)。因此,如果你打算使用Unix的kill命令杀死ndbd进程,就需要杀死这两个进程。中止ndbd进程的更恰当方法是使用管理客户端,并通过该管理客户端停止进程。
执行进程采用了1个线程,用于读取、写入和扫描数据,以及所有其他任务。该线程是异步实施的,以便能方便地处理数以千计的并发活动。此外,看门狗线程负责监督执行线程,以确保执行线程不会陷入无限循环。线程池负责处理文件I/O,每个线程均能处理一个打开的文件。这些线程也能被ndbd进程中的传输器用作传输器连接。在执行包含更新在内的大量操作的系统中,如果允许,ndbd进程能占用2个CPU。对于拥有多CPU的机器,建议使用属于不同节点组的数个ndbd进程。
17.5.3. ndb_mgmd,“管理服务器”进程
管理服务器是这样一种进程,它读取簇配置文件,并将该信息分配给簇中所有请求该信息的节点。它还负责维护簇活动的日志。管理客户端能够连接到管理服务器,并检查簇的状态。
启动管理服务器时,不是一定需要指定连接字符串。但是,如果使用了1个以上的管理服务器,应提供连接字符串,而且簇中的每个节点应明确指定自己的节点ID。
下述文件是由ndb_mgmd在其启动目录下创建或使用的,并会被置于配置文件中指定的DataDir中。在下面的列表中,node_id是唯一性节点ID。
· config.ini是作为整体的簇的配置文件。该文件由用户创建并由管理服务器读取。在17.4节,“MySQL簇的配置”中,讨论了设置该文件的方法。
· ndb_node_id_cluster.log是簇事件日志文件。这类事件的例子包括:检查点操作的启动和完成,节点启动事件,节点故障,以及内存使用水平。关于簇事件的完整列表和描述,请参见17.6节,“MySQL簇的管理”。
当簇日志的大小达到1MB时,文件将被重命名为ndb_node_id_cluster.log.seq_id,其中seq_id是簇日志文件的序列号(例如,如果编号1、2、3已存在,下一个日志文件将用4命名)。
· ndb_node_id_out.log是将管理服务器用作端口监督程序时用于stdout和stderr的文件。
· ndb_node_id.pid是将管理服务器用作端口监督程序时所使用的PID文件。
17.5.4. ndb_mgm,“管理客户端”进程
对于簇的运行,实际上不需要管理客户端的进程。其价值在于它提供了一组命令,这组命令可用于检查簇的状态、启动备份、并执行其他管理功能。管理客户端使用C API来访问管理服务器,高级用户也能使用C API来编制专用的管理进程来执行任务,这类任务与ndb_mgm执行的类似。
启动管理客户端时,需要提供管理服务器的主机名和端口号,如下例所示。默认值是localhost和1186。
shell> ndb_mgm localhost 1186
关于使用ndb_mgm的更多信息,请参见17.5.5.4节,“ndb_mgm的命令选项”和17.6.2节,“管理客户端”中的命令。
17.5.5. 用于MySQL簇进程的命令选项
17.5.5.1. 用于mysqld的与MySQL有关的命令选项 17.5.5.2. ndbd命令选项 17.5.5.3. ndb_mgmd的命令选项 17.5.5.4. ndb_mgm的命令选项所有MySQL簇的可执行文件(除mysqld)均使用下述选项。早期MySQL簇版本的用户应注意,这些选项开关中的一些与MySQL 4.1簇中的相比有所改变,为的是保持它们之间的一致性,以及与mysqld的一致性。可以使用-?开关来查看支持的选项列表。
· -?, --usage, --help
给出简明清单,以及可用命令选项的描述。
· -V, --version
给出ndbd进程的版本号。该版本号是MySQL簇的版本号。版本号有一定的作用,这是因为并非所有的版本均能一起使用,而且在启动时,MySQL簇进程将验证二进制文件的版本是否能在同一簇内共存。执行MySQL簇的在线升级时,它也很重要(请参见MySQL簇的软件升级)。
· -c connect_string, --connect-string
connect_string作为命令选项,用于设置与管理服务器的连接字符串。
shell> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"
· --debug[=options]
该选项仅能用于具有调试功能的版本。使用它,能够以与mysqld进程相同的方式允许来自调试调用的输出。
· -e, --execute
使用它,能够从系统shell将命令发送至簇执行程序,如:
shell> ndb_mgm -e show
或
shell> ndb_mgm --execute="SHOW"
等效于
NDB> SHOW;
它类似于“-e”选项与mysql命令行客户端一起工作的方式。请参见4.3.1节,“在命令行上使用选项”。
17.5.5.1. 用于mysqld的与MySQL有关的命令选项
· --ndbcluster
如果二进制版本包含对NDB簇存储引擎的支持,可使用该选项覆盖对NDB簇存储引擎(简称为NDB存储引擎)的默认禁止设置。使用MySQL簇时,NDB簇存储引擎是必要的。
· --skip-ndbcluster
禁止NDB簇存储引擎。对于包含该功能的二进制版本,在默认情况下,该功能是被禁止的,换句话讲,NDB簇存储引擎处于禁止状态,直至使用“—ndbcluster”选项激活了它为止。仅当所编译的服务器支持NDB簇存储引擎时,才能使用该选项。
· --ndb-connectstring=connect_string
使用NDB存储引擎时,通过设置该选项,能够指定分配簇配置数据的管理服务器。
17.5.5.2. ndbd命令选项
关于某些常见选项的更多信息,请参见17.5.5节,“用于MySQL簇进程的命令选项”。
· -d, --daemon
通知ndbd作为daemon(端口监督程序)进程执行(默认行为)。
· --nodaemon
指明ndbd不得作为daemon(端口监督程序)进程启动。调试ndbd以及希望将输出重定向到屏幕时,它很有用。
· --initial
通知ndbd执行初始化启动。初始化启动将删除以前ndbd实例为恢复目的创建的任何文件。它还能重新创建恢复用日志文件。注意,在某些操作系统上,该进程可能会占用较长的时间。
仅在首次启动ndbd进程时才应使用—initial启动,这是因为它将删除簇文件系统的所有文件,并再次创建所有的REDO日志文件。该规则的例外如下:
o 执行那些会更改文件内容的软件升级时。
o 用新的ndbd版本重启节点时。
o 出于某种原因,节点重启或系统重启不断失败时的最后手段。在这类情形下,请注意,由于数据文件的损坏,不能使用该节点来恢复数据。
该选项不影响那些已被受影响节点创建的备份文件。
· --nostart
指示ndbd不自动启动。使用该选项时,ndbd连接到管理服务器,从管理服务器获取配置数据,并初始化通信对象。但是,在管理服务器特别要求之前,它不会实际启动执行引擎。通过向管理客户端发出恰当的命令,可完成该任务。
17.5.5.3. ndb_mgmd的命令选项
关于某些常见选项的更多信息,请参见17.5.5节,“用于MySQL簇进程的命令选项”。
· -f filename, --config-file=filename, (OBSOLETE): -c filename
通知管理服务器应使用哪个文件作为其配置文件。必须指定该选项。文件名默认为config.ini。注意,“-c”快捷方式已过时,不应在新的安装实例中使用它。
· -d, --daemon
指示ndb_mgmd作为端口监督程序启动。这是默认行为。
· --nodaemon
指示管理服务器不作为端口监督程序启动。
17.5.5.4. ndb_mgm的命令选项
关于某些常见选项的更多信息,请参见17.5.5节,“用于MySQL簇进程的命令选项”。
· [host_name [port_num]]
要想启动管理客户端,需要指定管理服务器所在的位置,即指定主机名和端口。默认的主机名是localhost,默认端口是1186。
· --try-reconnect=number
如果与管理服务器的连接断开,每隔5秒,节点将尝试再次连接到管理服务器,直至成功。使用该选项,能够将尝试的字数限制在number指定的值,超过该限制后,将放弃尝试并通报错误。