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

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

前提条件

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

能够与任何版本的MySQL簇一起使用SCI套接字。不需要特殊创建,这是因为它采用了MySQL簇中已提供的正常套接字调用。但是,目前仅在Linux 2.42.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.gzSCI_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_releaseX86-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的方法。下面给出了简要讨论。

单环网采用的节点ID4的非0倍数,4812…。

下一个可行的选择是SCI交换器。1SCI交换器有8个端口,每个端口都能支持1个环形网。有必要确保不同的环形网使用了不同的节点ID空间。对于典型的配置,第1个端口使用的节点ID低于64460),接下来的64个节点ID68124)指定给下一个端口,依此类推,节点ID 452508将被指定给第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”指的是适配器068”是节点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套接字,在启动ndbdmysqldndb_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套接字的内核变体。

关注编程学问公众号