mysql cluste 5.6.29 ndb-7.4.11搭建实战
基于CentOS 7安装MySQL-Cluster
(mysql-5.6.29 ndb-7.4.11)
环境
系统:centos7.3
Mysql版本:mysql-5.6.29 ndb-7.4.11
集群各节点的配置规划
表1 集群节点规划表
节点类型 |
IP地址 |
主机名 |
管理节点 |
10.200.48.231 |
mgmhostname |
数据节点 |
10.200.48.232 |
data1hostname |
数据节点 |
10.200.48.233 |
data2hostname |
SQL节点 |
10.200.48.234 |
sql1hostname |
SQL节点 |
10.200.48.235 |
Sql2hostname |
1.建虚拟机
点击“启动虚拟机”,开始安装系统。
2.安装操作系统
(1)进入安装初始化界面
(2)自动进入到图形化安装界面
选择语言:
配置分区:
配置主机名和ip:
设置root用户的密码:
3.主机名、IP、防火墙的设置
(1)设置ip
Nameserver 118.118.118.9
进入网络配置文件目录: cd /etc/sysconfig/network-scripts
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 #编辑配置文件,添加修改以下内容:
vi /etc/hosts
修改为以下内容:
127.0.0.1localhost mgmhostname localhost4 localhost4.localdomain4
::1localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.81 mgmhostname
192.168.0.82 data1hostname
192.168.0.83 data2hostname
192.168.0.84 sql1hostname
192.168.0.85 sql2hostname
(2)主机名的设置
执行命令:hostname mgmhostname
vi /etc/hostname
Ip及主机名设置完成,检查一下:
cat /etc/hosts
cat /etc/hostname
hostname
重启网络:service network restart
查看ip 地址:ip addr
(3)防火墙的设置
禁用防火墙:systemctl disable firewalld.service
(或者停止防火墙:systemctl stop firewalld.service)
(4)重启操作系统:shutdown –r now
4.配置本地yum源并安装需要的包
将操作系统安装盘上传到操作系统中 /usr/local目录下。(可以使用上传软件来传,我使用的xmanage中的xftp来上传的)
新建/media/cdrom目录(用于挂载光盘):mkdir /media/cdrom
将光盘挂载到/media/cdrom目录下:
cd/usr/local
mount CentOS-7-x86_64-DVD-1511.iso /media/cdrom
df -h
配置本地yum源:
cd/etc/yum.repos.d/
将CentOS-Base.repo原文件复制为CentOS-Base.repo.bak,以防改错。
cp CentOS-Base.repo CentOS-Base.repo.bak
vi CentOS-Base.repo
将全文替换为以下内容:
[yumtest]
name=centos7yumtest
baseurl=file:///media/cdrom
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
执行:yum clean all
执行:yum makecache
安装perl包(为了后续安装系统数据库做准备):
cd /media/cdrom
cd Packages/
yum -y install perl*
5.安装mysql集群
将mysql-cluster集群安装包上传到操作系统的/data/目录下。
[[email protected] /]# mkdir /data
[[email protected] /]# cd /data/
[[email protected] ~]# cd /data/
解压集群安装包:
[[email protected] data]# tar -xzvf mysql-cluster-gpl-7.4.11-linux-glibc2.5-x86_64.tar.gz
给解压后的目录重命名为mysql:
[[email protected] data]# mv mysql-cluster-gpl-7.4.11-linux-glibc2.5-x86_64 /data/mysql
(1)新建mysql组和用户
groupadd mysql
useradd -g mysql mysql
(2)由mgm克隆一个名为data1的虚拟机
关闭虚拟机:shutdown –h now
选择虚拟机,右键“快照”->“拍摄快照”:
选择虚拟机,右键“管理”->“克隆”:
(3)配置管理节点
启动mgm虚拟机。
1) 创建目录
mkdir /data/mysql-cluster
2) 配置config.ini配置文件
注意:不要直接复制我的。若直接从windows复制到linux中,很有可能会出现莫名的报错。
cd /data/mysql-cluster
vi config.ini
添加以下内容:
[ndbd default]
NoOfReplicas=2
DataMemory=1000M
IndexMemory=18M
[ndb_mgmd]
NodeId=1
hostname=10.200.48.231
datadir=/data/mysql-cluster
[ndbd]
NodeId=2
hostname=10.200.48.232
datadir=/data/mysql/data
[ndbd]
NodeId=3
hostname=10.200.48.233
datadir=/data/mysql/data
[mysqld]
NodeId=4
hostname=10.200.48.234
[mysqld]
NodeId=5
hostname=10.200.48.235
配置结果为:
(4)安装管理节点
移除my.cnf配置文件:
[[email protected] ~]# mv /etc/my.cnf my.cnf.bak
将ndb_mgm*移动到/data/bin目录下:
[[email protected] ~]# cp /data/mysql/bin/ndb_mgm* /usr/local/bin
添加可执行权限:
[[email protected] bin]# chmod +x ndb_mgm*
(5)配置data1节点
修改data1的主机ip及主机名。其配置与第3节类似。data1的ip配置为192.168.0.82,hostname配置为data1hostname。
1)修改配置文件/etc/my.cnf
[[email protected] local]# vi /etc/my.cnf
修改为以下内容:
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
socket=/data/mysql/sock/mysql.sock
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=10.200.48.231
附加说明:mysql.sock是mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体,它比tcp快。Linux下安装mysql连接的时候常提示说找不到mysql.sock文件,解决办法:
如果是新安装的mysql,提示找不到文件,就搜索下,制定正确的位置。如果mysql.sock文件误删的话,就需要重启mysql服务,如果重启成功的话会在datadir目录下生产mysql.sock,到时候指定即可。如果还不行就选择用tcp连接方式就行了,其实windows下还支持管道连接方式。
配置结果如下:
2)创建系统数据库
[[email protected] ~]# cd /data/mysql
[[email protected] mysql]# mkdir sock
[[email protected] mysql]# /data/mysql/scripts/mysql_install_db --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
3)设置相关目录权限
[[email protected] mysql]# chown -R root .
[[email protected] mysql]# chown -R mysql:mysql /data/mysql/data
[[email protected] mysql]# chown -R mysql:mysql /data/mysql/sock
[[email protected] mysql]# chgrp -R mysql .
4) 配置MySQL服务
[[email protected] mysql]# cp support-files/mysql.server /etc/rc.d/init.d/
[[email protected] mysql]# chmod +x /etc/rc.d/init.d/mysql.server
[[email protected] mysql]# chkconfig --add mysql.server
(6)由data1节点克隆data2和sql1节点
先关闭data1节点:[[email protected] mysql]# shutdown -h now
克隆步骤见第5节的(3)小点。
(7)配置data2节点
启动data2节点:
1)修改Ip
2)修改主机名
3)service network restart
4)shutdown –r now
(8)配置sql1节点
启动sql1节点:
1)修改IP
2)修改主机名
3)service network restart
4)shutdown –r now
5)配置my.cnf配置文件
vi /etc/my.cnf
[[email protected] ~]# vi /etc/my.cnf
修改为以下内容:
[client]
socket=/data/mysql/sock/mysql.sock
[mysqld]
ndbcluster
basedir=/data/mysql
datadir=/data/mysql/data
socket=/data/mysql/sock/mysql.sock
ndb-connectstring=10.200.48.231
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=10.200.48.231
配置结果如下:
(9)由sql1节点克隆出sql2节点
启动sql2节点:
1)修改ip
2)修改主机名
3)service network restart
4)shutdown –r now
6.Cluster集群启动
注意启动顺序:首先是管理节点,然后是数据节点,最后是sql节点。
(1)启动管理节点:
[[email protected] mysql-cluster]# ndb_mgmd -f /data/mysql-cluster/config.ini
还可以使用ndb_mgm来监听客户端,如下:
[[email protected] mysql-cluster]# ndb_mgm
(2)启动两个数据节点
首次启动,则需要添加—inittial参数,以便进行NDB节点的初始化工作。在以后的启动过程中,则是不能添加该参数的,否则ndbd程序会清除在之前建立的所有用于恢复的数据文件和日志文件。
在数据节点data1:
[[email protected] ~]# /data/mysql/bin/ndbd --initial
在数据节点data2:
[[email protected] ~]# /data/mysql/bin/ndbd --initial
(3)启动两个SQL节点
若mysql服务没有运行,则在shell中运行以下命令:
/data/mysql/bin/mysqld_safe --user=mysql &
可以通过ps –ef | grep mysql命令来判断mysql服务是否启动。
[[email protected] ~]# ps -ef | grep mysql
在我的环境下,mysql服务已经启动,如下图所示:
sql1节点的mysql服务启动情况如下:
sql2节点的mysql服务启动情况如下:
(4)查看启动结果
查看管理节点:
如下图所示,一个管理节点,两个数据节点,2个sql节点全部启动成功。
7. MySQL集群测试
现在我们在其中一个SQL节点(sql1节点)上进行相关数据库的创建,然后到另外一个SQL节点上查看数据是否同步。
在sql1节点(192.168.0.84)上执行:
[[email protected] ~]# /data/mysql/bin/mysql
mysql> show databases;
mysql> create database aa;
mysql> use aa
注意:下面的创建表的语句中,一定要制定数据库表的引擎为NDB,否则同步失败。
mysql> create table ctest2(i int) engine=ndb;
mysql> insert into ctest2 values(1);
mysql> select * from ctest2;
在sql2节点上查看数据是否同步
[[email protected] ~]# /data/mysql/bin/mysql
mysql> show databases;
mysql> use aa;
mysql> select * from ctest2;
如上图所示,数据同步过来了。
附加:查看通过以下语句查看表的引擎是否为NDB:
mysql> show create table 表名;
如:
mysql> show create table ctest2;
8. 关闭MySQL集群
(1)关闭管理节点和数据节点,只需要在管理节点(mgm)里执行:
[[email protected] mysql-cluster]# /data/mysql/bin/ndb_mgm -e shutdown
(5)分别在SQL节点执行: /etc/init.d/mysql.server stop
SQL节点1:
SQL节点2:
9.更改用户权限
mysql> update user set Password=PASSWORD("rootpwd") where Host="%";
mysql> flush privileges;
10.环境变量设置(sql节点)
vim /etc/profile
export MYSQL_HOME=/data/mysql
export PATH=${MYSQL_HOME}/bin:$PATH
# 保存后,使环境变量生效
source /etc/profile