2015年07月13日,官方发布了MySQL Cluster 7.4.7版本,趁着十一有空,根据官方文档的指引,基于VBox和Fedora Server,从0到1搭建MySQL Cluster集群的环境,记录搭建过程。
环境信息
- 服务器:Fedora Server 22-x86_64 Under VBox
- MySQL:MySQL Cluster(GPL) 7.4.7 linux glibc2.5 x86_64
- 具体版本:MySQL Cluster Community Server(GPL) 5.6.25-ndb-7.4.7-cluster-gpl
- 配置信息:
- Management :
192.168.1.80
mgmt.dbsvr.com,用以管理集群 - Storage Node:
192.168.1.81
ndb01.dbsvr.com,用作数据存储 - Storage Node:
192.168.1.82
ndb02.dbsvr.com,用作数据存储 - Storage Node:
192.168.1.83
ndb03.dbsvr.com,用作数据存储 - SQL Node :
192.168.1.84
sql01.dbsvr.com,用以执行SQL - SQL Node :
192.168.1.85
sql02.dbsvr.com,用以执行SQL
- Management :
- Hosts配置:
各个MySQL Cluster节点的hosts(/etc/hosts)统一配置为:
192.168.1.80 mgmt.dbsvr.com # NDB Management Server
192.168.1.81 ndb01.dbsvr.com # Data Node 01
192.168.1.82 ndb02.dbsvr.com # Data Node 02
192.168.1.83 ndb03.dbsvr.com # Data Node 03
192.168.1.84 sql01.dbsvr.com # SQL Node 01
192.168.1.85 sql02.dbsvr.com # SQL Node 02
安装过程
由于实验环境在虚拟机中进行,虚拟机网络设置要使用桥接
方式。可先安装好一个结点,然后再克隆虚拟机,修改Mac和IP地址,作为其他结点。如果全部在实体机上安装,可安装完成一台,然后其他机器再按照这台的安装经验来安装,避免出现其他问题。
安装好Fedora之后安装Vim、配置中科大镜像源,安装dnf取代yum,关闭防火墙,修改hosts(/etc/hosts)和hostname(/etc/hostname,修改后将在命令行中显示为[[email protected]]$
)。在/etc/sysconfig/network-scripts
编辑ifcfg-enp0s3
,将ip地址由dhcp动态分配改为static静态分配(注释部分为原内容,这里只列出修改和增加的部分内容):
1 | [[email protected]]$ cd /etc/sysconfig/network-scripts |
这里使用二进制安装方式,MySQL Cluster的安装与普通MySQL Server的安装并没有什么区别,区别只在于Cluster多了一些不一样的配置。
已事先将mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64.tar.gz
下载到~/
目录下(使用虚拟机的情况下可以在服务内使用VSFTP搭建FTP服务器传文件),安装过程参考解压后mysql-cluster-gpl-7.4.7-linux-glibc2.5-x86_64
文件夹下的INSTALL-BINARY
文件。这里是Fedora Server 22,为了避免后面的scripts/mysql_install_db --user=mysql
执行出错,先安装perl
:
1 | $ sudo dnf install -y perl-Module-Install.noarch |
然后创建用户和组,解压,更改权限,开始安装MySQL Cluster(在一个具有Administrator权限的用户admin下):
1 | [[email protected]]$ sudo groupadd mysql |
如果mysql_install_db成功则会提示:
1 | New default config file was created as ./my.cnf and |
然后将当前目录(/usr/local/mysql)文件权限设置给root,但data即数据库文件目录设置给mysql:
1 | [[email protected]]$ chown -R root . |
检验是否安装成功,进入support-files,启动mysql server:
1 | [[email protected]]$ sudo ./mysql.server start |
MySQL本地服务器安装成功,这就说明安装成功了,但是root账户还没设置密码,需要为root账户设置密码:
1 | [[email protected]]$ pwd |
以上是第一次设置root密码的时候,在命令行下设置,提示通过命令行接口设置密码不安全,不管它。另一个方法是进入mysql设置,这样会比较安全:
1 | [[email protected]]$ pwd |
为了便于进入mysql,在用户配置文件中加入别名设置,这样就可以直接通过在任意地方键入mysql来进入mysql:
1 | [[email protected]]$ cd |
然后在.bashrc
中加入这一行alias mysql=/usr/local/bin/mysql
,保存退出。
节点克隆
由于各个MySQL Cluster结点是装在虚拟机中,所以直接使用VBox的虚拟机克隆操作就可以实现,克隆时要选择重新初始化网卡mac地址
,以及选择Full Clone
即完全克隆,这样会实际拷贝一份虚拟机。由于克隆后系统只是直接复制,所以需要根据VBox虚拟机网卡设置中新分配的MAC地址来修改克隆后的结点的MAC地址和IP地址,路径在:
1 | [[email protected]]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-enp0s3 |
通过如下命令来在工作站(我的是Mac,工作站的hosts也同一开始说的各个MySQL Cluster结点的hosts设置)中启动虚拟机结点(即MySQL集群服务器),以及用ssh登陆(虚拟机网卡设置为桥接):
1 | Fury:~ Fury$ VBoxManage startvm mgmt.dbsvr.com -type vrdp |
上面的startvm后的mgmt.dbsvr.com是虚拟机的名称,我这里恰好设置成了同结点的host domain,vrdp
全称为V
irtual box R
emote D
esktop P
rotocol。
结点配置
在各个节点配置好之后首先要启动Management管理结点,然后启动Data Node数据节点和SQL Node查询结点(API结点)。
管理节点(MGM)配置
管理节点即集群的中心,该节点需要记录其下有哪些数据节点和SQL节点,该节点的配置文件有两个,一个是my.cnf本身,一个是config.ini,其中config.ini需要包含入my.cnf当中。管理节点的my.cnf配置文件如下:
1 | # my.cnf |
在[ndb_mgm]
部分通过connect-string
指明管理节点的host,这里由于配置了hosts,所以直接写域名,也可以直接写ip地址,管理节点默认的链接端口为1186
。在[ndb_mgmd]
部分通过config-file
来指明Cluster的全局配置文件,里面指明了该集群包括哪些数据节点和SQL节点。这里新建并放置config.ini
文件于/etc/mysql/
下,该全局配置文件的内容如下(需要自己创建/var/lib/mysql-cluster
和/usr/local/mysql/mysql-cluster
目录,关于NoOfReplicas
请参考官方说明:NoOfReplicas):
1 | # file "config.ini" - 2 data nodes and 2 SQL nodes |
由于mysql会寻找/etc/my.cnf
来读取配置文件,所以可以通过如下命令来为my.cnf
创建一个链接放到/etc/
下:
1 | [[email protected] mysql]$ pwd |
通过在/usr/local/mysql/bin/
下使用ndb_mgmd
(关于ndb_mgmd子程序的参数和作用参见命令$ ndb_mgmd --help
)来启动管理节点:
1 | [[email protected] mysql]$ pwd |
通过如下命令来查看节点的连接情况(关于ndb_mgm子程序的参数和作用参见命令ndb_mgm --help
):
1 | [[email protected] mysql]$ bin/ndb_mgm -e show |
可以看到管理节点已经启动,地址为192.168.1.80
,而三个数据节点和两个SQL节点均未连接过来。
数据节点(NDB)配置
数据节点的配置相对管理节点要简单一些,它不需要config.ini,只需要在my.cnf中声明其本身为数据节点同时指定管理结点即可。同样地,为my.cnf创建一个链接放到/etc/下:
1 | [[email protected] mysql]$ pwd |
在管理节点的config.ini中的[ndbd default]部分,我们通过DataDir来指定了数据节点的数据库文件存放位置为/usr/local/mysql/mysql-cluster,所以这里需要创建/usr/local/mysql/mysql-cluster
目录。如下列出了my.cnf配置文件的内容:
1 | # For advice on how to change settings please see |
在[mysqld]部分使用ndbcluster来指明当前是数据节点,然后指明管理节点的地址,另外还需要[mysql_cluster]部分同时在该部分指明管理节点的地址。
使用ndbd子程序来启动数据节点,关于ndbd的参数请参考命令$ ndbd --help
,使用如下命令来启动该数据节点:
1 | [[email protected] bin]$ pwd |
这说明该节点已经启动成功并且连接到了管理节点,它分配到的节点ID为2。回到管理节点进行查看:
1 | [[email protected] mysql]$ bin/ndb_mgm -e show |
可以发现这个数据节点已经连接上了。使用同样方式配置和启动其他两个数据节点。
SQL节点(API)配置
SQL节点的配置文件内容是同数据节点的是一样的,但是它由于不存储数据而只做查询,所以不需要创建/usr/local/mysql/mysql-cluster目录,只需要在安装好之后在my.cnf中同数据节点一样加入配置内容即可:
1 | [mysqld] |
SQL节点的启动是启动MySQL Server,即:
1 | [[email protected] support-files]$ pwd |
以同样方式配置和启动另外一个SQL节点。
集群状态检查
回到管理节点执行命令查看各个节点的连接情况:
1 | [[email protected] mysql]$ bin/ndb_mgm -e show |
可以发现所有的三个数据节点和两个SQL节点都已经连接上来了。接着就可以进行测试。
参考文档
集群测试
使用集群需要指定引擎为NDBCLUSTER
,这样才能使用集群功能,否则使用的只是节点的本地MySQL服务器。
执行测试
进入sql01
这个SQL节点,在test数据库中创建一个表并插入数据,然后到另外一个查询节点看看情况。分别在sql01和sql02中进入test数据库并查看表,发现为空:
1 | [[email protected] ~]$ mysql |
在sql01结点中创建一个表并插入一条数据,注意一定要指定engine为ndbcluster:
1 | mysql> create table cluster_test(id int) engine=ndbcluster; |
然后切换到sql02节点,重新show tables;看看情况:
1 | mysql> show tables; |
发现在sql02节点当中已经可以看到在sql01当中创建的表了,查询也取出了数据。这说明该集群的基本配置是已经成功了。