mysql ndb安装_MySQL NDB Cluster 安装文档-基于CentOS7搭建

MySQL Cluster 安装文档

目录

关于本文档 2

1.集群信息简介 2

1.1集群主机信息 2

1.2 MySQL cluster安装包版本 2

1.3 MySQL集群架构 3

2.软件的安装 3

2.1所有节点统一配置 3

2.2配置管理节点 4

2.2.1创建目录和配置文件 4

2.2.2安装管理节点 6

2.3.配置数据节点 6

2.3.1创建mysql用户及用户组 6

2.3.2配置my.cnf配置文件 7

2.3.3创建系统数据库 7

2.3.4设置数据目录 8

2.3.5配置MySQL服务 8

2.4配置SQL结点 8

2.4.1创建mysql用户及用户组 8

2.4.2配置my.cnf配置文件 9

2.4.3创建系统数据库 9

2.4.4设置数据目录 10

2.4.5配置MySQL服务 10

3. root用户初始密码修改 10

4. Cluster环境启动 11

4.1启动管理节点 11

4.2启动数据节点 11

4.3启动SQL节点 12

4.4检查集群是否启动成功 12

5.Cluster环境关闭 13

5.1关闭SQL节点 13

5.2关闭管理节点和数据节点 13

6.测试集群 13

6.1测试数据同步情况 14

6.2单点故障测试 15

6.2.1 SQL节点单点故障测试 15

6.2.2数据节点的单点故障测试 16

7.注意事项 19

关于本文档

本文档将搭建一个最简化的MySQL Cluster系统,配置方法中的所有命令都是以root账户运行。这个MySQL Cluster包含一个管理节点、两个数据节点、两个SQL节点,这五个节点会分别安装在五台虚拟机上。

1.集群信息简介

1.1集群主机信息

CentOS 7.2 x86_64 5台

节点名称

主机IP

主机名

管理节点

192.168.227.129

mysql-mgm

数据节点1

192.168.227.130

mysql-ndbd-1

数据节点2

192.168.227.131

mysql-ndbd-2

SQL节点1

192.168.227.132

mysql-sql-1

SQL节点2

192.168.227.133

mysql-sql-2

1.2 MySQL cluster安装包版本

mysql-cluster-gpl-7.5.14-linux-glibc2.12-x86_64.tar.gz

1.3 MySQL集群架构

可以看到:MySQL集群架构可以简单的分为4个区域,客户机节点、SQL节点、数据节点、管理节点。

MySQL集群中的数据保存在NDB存储引擎的表中(数据节点中),MySQL集群中的表结构保存在MySQL服务器中(SQL节点中)。数据库用户通过客户机节点连接SQL节点访问集群数据,为了保证每个数据节点中的数据均匀分布,在进行数据插入时,SQL节点采用分片的策略将数据均匀分配到不同的数据节点上。管理节点通过管理工具(ndb_mgmd)管理数据节点与SQL节点,MySQL Cluster所有的这些节点构成一个完整的MySQL集群体系。

2.软件的安装

2.1所有节点统一配置

(1)下载MySQL-Cluster安装包,并上传到/root目录

进入/root目录

cd /root

(2)解压mysql-cluster-gpl-7.5.14-linux-glibc2.12-x86_64.tar.gz

tar -xzvf mysql-cluster-gpl-7.5.14-linux-glibc2.12-x86_64.tar.gz

(3)将解压后的mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64移动到/usr/local/下并改名为mysql

mv mysql-cluster-gpl-7.5.14-linux-glibc2.12-x86_64 /usr/local/mysql

(4)关闭安全策略

关闭iptables防火墙(或者打开防火墙的1186、3306端口),运行以下命令:

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service

关闭SELinux,运行以下命令

修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled

2.2配置管理节点

2.2.1创建目录和配置文件

创建目录/var/lib/mysql-cluster

mkdir /var/lib/mysql-cluster

进入/var/lib/mysql-cluster目录

cd /var/lib/mysql-cluster

创建配置文件config.ini

vi config.ini

config.ini配置信息如下:

[NDBD DEFAULT]

NoOfReplicas=2   #备份,副本,这样的话2台数据节点的数据就会同步

DataMemory=80M  #每个数据节点中给数据分配的内存

IndexMemory=18M #每个数据节点中给索引分配的内存

[NDB_MGMD]

#设置管理节点服务器

nodeid=1

HostName=192.168.227.129 #管理节点IP

DataDir=/var/lib/mysql-cluster #管理节点数据目录

[NDBD]

nodeid=2

HostName=192.168.227.130

DataDir=/usr/local/mysql/data

[NDBD]

nodeid=3

HostName=192.168.227.131

DataDir=/usr/local/mysql/data

[MYSQLD]

nodeid=4

HostName=192.168.227.132

[MYSQLD]

nodeid=5

HostName=192.168.227.133

#必须有空的mysqld节点,不然数据节点断开后启动可能会有报错

[MYSQLD]

nodeid=6

[mysqld]

nodeid=7

2.2.2安装管理节点

不需要mysqld二进制文件,只需要MySQL Cluster服务端程序(ndb_mgmd)和监听客户端程序(ndb_mgm)。运行以下命令:

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin

cd /usr/local/bin

chmod +x ndb_mgm*

2.3.配置数据节点

2.3.1创建mysql用户及用户组

groupadd mysql

useradd mysql -g mysql

2.3.2配置my.cnf配置文件

vi /etc/my.cnf

配置文件my.cnf的内容如下:

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/usr/local/mysql/sock/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]

ndb-connectstring=192.168.227.129

2.3.3创建系统数据库

cd /usr/local/mysql

mkdir sock

bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

记住初始化密码,如本例中的G=UG<6-Jq7rE

2.3.4设置数据目录

chown -R root .

chown -R mysql.mysql /usr/local/mysql/data

chown -R mysql.mysql /usr/local/mysql/sock

chgrp -R mysql .

2.3.5配置MySQL服务

cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/

chmod +x /etc/rc.d/init.d/mysql.server

chkconfig --add mysql.server

2.4配置SQL结点

2.4.1创建mysql用户及用户组

groupadd mysql

useradd mysql -g mysql

2.4.2配置my.cnf配置文件

vi  /etc/my.cnf

配置文件my.cnf的内容如下:

[client]

socket=/usr/local/mysql/sock/mysql.sock

[mysqld]

ndbcluster

datadir=/usr/local/mysql/data

socket=/usr/local/mysql/sock/mysql.sock

ndb-connectstring=192.168.227.129

[mysql_cluster]

ndb-connectstring=192.168.227.129

2.4.3创建系统数据库

cd /usr/local/mysql

mkdir sock

bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

记住初始化密码,如本例中的ol55,kQ3kjgZ

2.4.4设置数据目录

chown -R root .

chown -R mysql.mysql /usr/local/mysql/data

chown -R mysql.mysql /usr/local/mysql/sock

chgrp -R mysql .

2.4.5配置MySQL服务

cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/

chmod +x /etc/rc.d/init.d/mysql.server

chkconfig --add mysql.server

3. root用户初始密码修改

这里要用到前面搭建集群时记录的初始密码。在SQL节点上分别进入系统的安全状态,并完成对root用户的密码修改,运行以下指令,进行密码修改:

输入搭建集群时记录的初始密码登录。

选择mysql数据库

use mysql;

对root密码进行修改

flush privileges;  #立即生效

4. Cluster环境启动

启动顺序:首先启动管理节点,然后是数据节点,最后是SQL节点。

SQL节点和数据节点在启动的时候需要连接到管理节点读取MySQL集群的配置信息,SQL节点和数据节点启动完成后,管理节点是可以停止工作的。因此MySQL集群运行过程中,即便管理节点宕机,也不会影响整个集群服务,所以管理节点一般只需要一台主机即可满足应用要求。

4.1启动管理节点

rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1 #不是必须的,如果config.ini有改动则要加上

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

必须用参数“-f”或“--config-file”告诉ndb_mgm配置文件所在位置,默认是在ndb_mgmd相同目录下。

检验是否启动成功

netstat -ntpl |grep ndb

还可以使用ndb_mgm来监听客户端,如下:

4.2启动数据节点

首次启动,则需要添加--initial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。

首次启动数据节点

/usr/local/mysql/bin/ndbd --initial

如果不是首次启动,则执行下面的命令

/usr/local/mysql/bin/ndbd

查看是否启动成功

先查看数据节点的服务进程

ps -elf | grep mysql

然后在管理节点查看各个节点的状态;

ndb_mgm -e show

4.3启动SQL节点

查看mysql服务是否已经运行

ps -elf | grep mysql

可以看到mysql服务已经运行。

若MySQL服务没有运行,则运行以下命令:

/usr/local/mysql/bin/mysqld_safe --user=mysql &

查看mysql服务进程

ps auxww | grep mysql

4.4检查集群是否启动成功

在管理节点执行以下命令

ndb_mgm -e show

返回结果显示集群启动成功

5.Cluster环境关闭

关闭顺序:首先停止SQL节点,然后是数据节点和是管理节点。

5.1关闭SQL节点

/etc/init.d/mysql.server stop

5.2关闭管理节点和数据节点

只需要在管理节点(ClusterMgm)里执行以下命令

ndb_mgm -e shutdown

6.测试集群

6.1测试数据同步情况

现在我们在其中一个SQL结点上进行相关数据库的创建,然后到另外一个SQL结点上看看数据是否同步。

在SQL节点1(mysql-sql-1)上执行:

(1)/usr/local/mysql/bin/mysql -u root -p

输入密码

(2)show databases;#查看数据库列表

(3)create database test; #创建test数据库

查看创建test数据库后的数据库列表

show databases;

(4)use test; #切换到test数据库

创建表aa;

CREATE TABLE aa (i INT) ENGINE=NDB;

注意:这里必须指定数据库表的引擎为NDB,否则同步失败

向aa表中插入一条数据

INSERT INTO aa () VALUES (1);

查看aa表数据

select * from aa;

(5)然后在SQL节点2(mysql-sql-1)上看数据是否已经同步

可以看到,在SQL节点1上创建的数据已经同步到sql节点2上了。

6.2单点故障测试

对于任意一种节点,都存在单点故障的可能性。在Cluster的设置过程中,应该尽量对每一类节点设置冗余,以防止单点故障发生时造成的应用中断。

对于管理节点,一般不需要特殊的配置,只需要将管理工具和配置文件放在多台主机上即可。

下面将测试SQL节点和数据节点的单点故障。

6.2.1 SQL节点单点故障测试

(1)将SQL节点1上的MySQL服务停止

mysqladmin -uroot -p shutdown

(2)查看一下Cluster的状态

在管理节点执行ndb_mgm -e show

可以看到SQL节点1已经断开,但是SQL节点2仍处于正常连接中。

(3)从SQL节点2上查看表

select * from t1;

可以看到,SQL节点的单点故障并没有引起数据的查询故障。对于应用来说,需要改变的就是将以前对故障节点的访问改为对非故障节点的访问。

6.2.2数据节点的单点故障测试

在本次搭建的集群中,数据节点也有两个,它们对数据库的存储是互相镜像还是一份数据分成几块存储取决于管理节点config.ini配置文件中[NDBDDEFAULT]组中的NoOfReplicas参数,如果这个参数等于1,表示只有一份数据,但是分成n块分别存储在n个数据节点上;如果等于2,则表示数据被分成n/2块,每块数据都有两个备份,这样即使有任意一个节点发生故障,只要它的备份节点正常,系统就可以正常运行。

(1)先测试NoOfReplicas=1的情况下,停掉其中一个数据节点

按照前面的步骤重新启动集群

在任意SQL节点查询t1表

将数据节点1上的NDB进程停止

在任意SQL节点查询t1表

结果显示Cluster出现了故障,无法访问。

(2)测试NoOfReplicas=2的情况下,停掉其中一个数据节点

将配置文件中的NoOfReplicas改为2

按照前面的步骤重新启动集群

在任意SQL节点查询t1表

将数据节点1上的NDB进程停止

在任意SQL节点查询t1表

结果显示,NoOfReplicas大于1的情况下,即使有任意一个节点发生故障,只要它的备份节点正常,系统就可以正常运行。在数据节点的冗余同样防止了单点故障的发生。

7.注意事项

(1)创建表必须用ENGINE=NDB或ENGINE=NDBCLUSTER选项,或用ALTER TABLE选项更改,以使用NDB Cluster存储引擎在Cluster内复制它们。如果使用mysqldump的输出从已有数据库导入表,可在文本编辑器中打开SQL脚本,并将该选项添加到任何表创建语句,或 用这类选项之一替换任何已有的ENGINE(或TYPE)选项。

示例:

在SQL节点1创建测试表t1,测试存储引擎为NDB,并插入两条数据:

创建t1表,存储引擎设置为NDB

插入两条数据

在另外的SQL节点2上查看test库的t1表

可以看到,两个SQL节点查询到的数据是一致的。

然后在SQL节点1上将t1表的存储引擎改为MyISAM,再次插入测试记录

查看t1表的存储引擎类型

插入两条记录

在SQL节点2上再次查询t1表

可以看到,表t1已经无法查询。

(2)另外还请记住,每个NDB表必须有一个主键。如果在创建表时用户未定义主键,NDB Cluster存储引擎将自动生成隐含的主键。(注释:该隐含主键也将占用空间,就像任何其他的表索引一样。由于没有足够的内存来容纳这些自动创建的键,可能出现问题)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值