通过将数据节点文件系统与撤消日志文件和表空间数据文件分开并将它们放在不同的磁盘上,可以大大提高使用磁盘数据存储的 NDB Cluster 的性能。在 NDB Cluster 的早期版本中,NDB Cluster 对此没有直接支持,并且有必要使用符号链接来实现这种分离,如本节后面所述。NDB Cluster 7.3 及更高版本支持数据节点配置参数
FileSystemPathDD
、
FileSystemPathDataFiles
和
FileSystemPathUndoFiles
,这使得无需为此目的使用符号链接。有关这些参数的更多信息,请参阅
磁盘数据文件系统参数。
本节其余部分描述的过程仅供参考。
集群中的每个数据节点都在文件中定义
的数据节点
目录下创建一个文件系统
。在此示例中,我们假设每个数据节点主机有 3 个磁盘,别名为
、和
,并且集群的
包括以下内容:
ndb_
node_id
_fsDataDir
config.ini
/data0
/data1
/data2
config.ini
[ndbd default]
DataDir= /data0
我们的目标是将所有磁盘数据日志文件
放在每个数据节点主机上/data1
,并将所有磁盘数据数据文件
/data2
放在每个数据节点主机上。
在这个例子中,我们假设集群的数据节点主机都使用 Linux 操作系统。对于其他平台,您可能需要用操作系统的命令替换此处显示的命令。
为此,请执行以下步骤:
在数据节点文件系统下创建指向其他驱动器的符号链接:
$> cd /data0/ndb_2_fs $> ls D1 D10 D11 D2 D8 D9 LCP $> ln -s /data0 dnlogs $> ln -s /data1 dndata
您现在应该有两个符号链接:
$> ls -l --hide=D* lrwxrwxrwx 1 user group 30 2007-03-19 13:58 dndata -> /data1 lrwxrwxrwx 1 user group 30 2007-03-19 13:59 dnlogs -> /data2
我们仅针对节点 ID 为 2 的数据节点显示此信息;但是,您必须为每个数据节点执行此操作。
现在,在mysql客户端中,使用符号链接创建一个日志文件组和表空间,如下所示:
mysql> CREATE LOGFILE GROUP lg1 -> ADD UNDOFILE 'dnlogs/undo1.log' -> INITIAL_SIZE 150M -> UNDO_BUFFER_SIZE = 1M -> ENGINE=NDBCLUSTER; mysql> CREATE TABLESPACE ts1 -> ADD DATAFILE 'dndata/data1.log' -> USE LOGFILE GROUP lg1 -> INITIAL_SIZE 1G -> ENGINE=NDBCLUSTER;
验证文件是否已创建并正确放置,如下所示:
$> cd /data1 $> ls -l total 2099304 -rw-rw-r-- 1 user group 157286400 2007-03-19 14:02 undo1.dat $> cd /data2 $> ls -l total 2099304 -rw-rw-r-- 1 user group 1073741824 2007-03-19 14:02 data1.dat
如果您在一台主机上运行多个数据节点,则必须注意避免让它们尝试为磁盘数据文件使用相同的空间。您可以通过在每个数据节点文件系统中创建符号链接来简化此过程。假设您正在使用
/data0
两个数据节点文件系统,但您希望两个节点的磁盘数据文件都位于/data1
. 在这种情况下,您可以执行类似于此处所示的操作:$> cd /data0 $> ln -s /data1/dn2 ndb_2_fs/dd $> ln -s /data1/dn3 ndb_3_fs/dd $> ls -l --hide=D* ndb_2_fs lrwxrwxrwx 1 user group 30 2007-03-19 14:22 dd -> /data1/dn2 $> ls -l --hide=D* ndb_3_fs lrwxrwxrwx 1 user group 30 2007-03-19 14:22 dd -> /data1/dn3
现在您可以使用符号链接创建日志文件组和表空间,如下所示:
mysql> CREATE LOGFILE GROUP lg1 -> ADD UNDOFILE 'dd/undo1.log' -> INITIAL_SIZE 150M -> UNDO_BUFFER_SIZE = 1M -> ENGINE=NDBCLUSTER; mysql> CREATE TABLESPACE ts1 -> ADD DATAFILE 'dd/data1.log' -> USE LOGFILE GROUP lg1 -> INITIAL_SIZE 1G -> ENGINE=NDBCLUSTER;
验证文件是否已创建并正确放置,如下所示:
$> cd /data1 $> ls dn2 dn3 $> ls dn2 undo1.log data1.log $> ls dn3 undo1.log data1.log