实验内容
步骤一:MySQL集群版安装环境配置
注:1、MySQL集群版安装过程的所有操作步骤都需要使用root用户进行;
2、此项步骤需要在集群中所有主机上进行;
1、首先,MySQL相关软件包上传到root用户家目录的新建“setups”目录下。
命令:
#mkdir setups
2、匹配MySQL关键字查询包,列出本机yum方式安装的MySQL软件,并卸载删除已安装的MySQL;
命令:
#rpm -qa | grep mysql
#yum list installed | grep mysql
#rpm -e –nodeps 软件包名
#yum -y remove mysql
3、匹配MariaDB关键字查询包,列出本机yum方式安装的MariaDB软件,并卸载删除已安装的MariaDB;
命令:
#rpm -qa | grep mariadb
#rpm -e –nodeps 软件包名
#rpm -qa | grep libaio
#yum list installed | grep libaio
#rpm -ivh 软件包名
4、检查MySQL用户组是否存在,若不存在则创建MySQL用户组;
命令:
#cat /etc/group | grep mysql
#groupadd mysql
5、检查MySQL用户是否存在,若不存在则创建MySQL用户并加入到MySQL用户组中;
命令:
#cat /etc/passwd | grep mysql
#useradd -r -g mysql mysql
6、查看前系统中SELinux服务的运行状态,需要进行永久关闭;
命令:
#sestatus -v
#vi /etc/selinux/config
找到配置项“SELINUX”所在行,将其改为以下内容:
SELINUX=disable
#reboot //重启主机
步骤二:MySQL集群版基本安装配置;
注:以下步骤需要在集群中所有主机上进行操作;
1、MySQL Cluster软件包“mysql-cluster-gpl-7.5.7- linux-glibc2.12-x86_64.tar.gz”我们一提前上传与用户家目录的“setups”目录下;
命令:
#mkdir /mysql
#cd /mysql
#tar -xzf ~/setups/ mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz
2、进入系统的“/usr/local”目录,在该目录下创建一个名为“MySQL”的连接指向MySQL Cluster所在的目录,MySQL源路径以MySQL Cluster软件包实际解压包的路径为准。
命令:
#cd /usr/local
#ln -s /mysql/ mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64mysql
3、进入连接的MySQL目录,创建存放MySQL数据库数据的目录,更改该数据目录的权限设置
命令:
#cd mysql
#mkdir data
#chmod 770 data
4、更改当前“MySQL”目录的所属用户和所属组
命令:
#chown -R mysql
#chgrp -R mysql
5、配置MySQL相关的环境变量,修改系统的配置文件;
命令:
#vi /etc/profile
在文件末尾添加以下内容:
#mysql-cluster environment
MYSQL_CLUSTER_HOME=/usr/local/mysql
PATH=$MYSQL_CLUSTER_HOME/bin:$PATH
Export MYSQL_CLUSTER_HOME PATH
6、使新配置的环境变量立即生效,并查看环境变量是否生效;
命令:
#source /etc/profile
#echo $MYSQL_CLUSTER_HOME
#echo $PATH
步骤三:配置管理节点Cluster-01;
注:该项的所有操作需要在集群中所有管理节点主机上进行操作。
1、进入MySQL Cluster软件所在目录,创建存放MySQL Cluster数据目录;
命令:
#cd /usr/local/mysql
#mkdir mysql-cluster
2、更改“mysql-cluster”目录的所属用户和所属组;
命令:
#chown -R mysql mysql-cluster
#chgrp -R mysql mysql-cluster
创建用于存放MySQL Cluster管理节点配置文件的目录,创建MySQL Cluster管理节点的配置文件,并对配置文件进行修改;
命令:
#mkdir etc
#cd stc
#touch config.ini
#vi config.ini
在文件中添加如下内容:
[NDB_MGMD DEFAULT]DataDir=/usr/local/mysql/data[NDBD DEFAULT]NoOfReplicas=2DataMemory=512MIndexMemory=32MDataDir=/usr/local/mysql/data[NDB_MGMD]NodeId=1HostName=Cluster-01[NDBD]NodeId=2HostName=Cluster-02[NDBD]NodeId=3HostName=Cluster-03[NDBD]NodeId=4HostName=Cluster-04[NDBD]NodeId=5HostName=Cluster-05
4、更改当前“etc”目录的所属用户和所属组,并启动MySQL Cluster的管理节点;
注:*首次启动或修改之后启动需要添加参数“--initial”,正常启动时不需要添加参数“--initial”;
命令:
#chown -R mysql .
#chgrp -R mysql .
#ndb_mgmd -f /usr/local/mysql/etc/config.ini –initial
5、查看系统进程信息,若存在信息中包含“ndb_mgmd”关键字的进程则表示MySQL Cluster的管理节点启动成功,进入MySQL Cluster管理节点的控制台,查看节点状况;
命令:
#ps -ef | grep ndb_mgmd
#ndb_mgm
>show
>exit
步骤四:配置数据服务节点Cluster-02、Cluster-03;
注:*以下步骤需要在集群中所有数据服务节点主机上进行操作。
1、进入系统配置文件所在目录,创建MySQL Cluster数据服务节点的配置文件,并对配置文件进行修改;
命令:
#cd /etc
#touch my.conf
#vi my.conf
在其中添加如下内容:
[MYSQLD]ndbclusterndb-connectstring=Cluster-01[MYSQL_CLUSTER]ndb-connectstring=Cluster-01
2、启动数据服务节点,查看系统进程信息,若存在信息中包含“ndbd”关键字的进程则表示MySQL Cluster的数据服务节点启动成功,并进入MySQL Cluster管理节点的控制台。
命令:
#ndbd –initial
#ps =ef | grep ndbd
#ndb_mgm
>show
>exit
步骤五:配置SQL服务节点Cluster-04、Cluster-05;
注:*以下步骤需要在集群中所有SQL服务节点主机上进行操作
1、进入系统配置文件所在目录,创建MySQL Cluster数据服务节点的配置文件,并对配置文件进行修改;
命令:
#cd /etc
#touch f
#vi f
在其中添加如下内容:
2、对MySQL数据库的安装进行初始化,执行该命令后会有一些提示信息,特别注意最后一行的“[Note]”相关信息,信息内容如下:
[Note] A temporary password is generated for
root@localhost:XXXXXXXXXXXXXX
信息末尾的 “XXXXXXXXXXXXXX”是安装程序随机生成的初始密码, 在首次以root用户登录数据库时雷要使用,非常重要 一定要记下;
命令:
# mysql-initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
3、将MySQL加入到系统的可控制启动服务目录内,并将服务命名为“MySQL”,启动SQL服务节点,查看系统进程信息,若存在信息中包含“ndbd”关键字的进程则表示MySQL Cluster的数据服务节点启动成功;
命令:
#cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysql
#service mysql start
#ps -ef | grep mysql
4、进入MySQL Cluster管理节点的控制台;
命令:
#ndb_mgm
>show
>sxit
注意:只有本步骤的验证实在集群中管理节点主机上进行操作,之后的操作仍然是在SQL服务节点主机继续操作;
5、登录MySQL数据库,会提示输入密码,该密码为之前进行安装初始化时所显示的初始化密码,然后进入MySQL的控制台;
命令:
#mysql -u root -p
5.1、在控制台使用命令“SET PASSEORD=PASSWORD(‘mysqlabc’);”,重新设置数据库的“root”用户的登录密码,其中“mysqlabc”部分为自定义的新密码。
5.2、在MySQL控制台使用命令“USE mysql;” 切换到 “mysql” 数据库。
5.3、在MySQL控制台使用命令“UPDATE user SET host='%' WHERE user='root'” , 修改数据库的root用户所接收请求来源的范围。 允许远程登录。
5.4、使用命令“select host from user where user=root”查看数据库的host信息6、使新配置的环境变量立即生效,并查看环境变量是否生效;
5.5、在MySQL控制台使用命令“FLUSH PRIVILEGES”,刷新数据库的权限信息使新配置的权限生效。
5.6、在MySQL控制台使用命令 "exit”可以退出,MySQL控制台返回到系统命令行界面。
6、启添加系统防火墙的端口策略, 对外开启MySQL所使用的端口“3306”,并重启系统防火墙服务,使新添加的端口策略生效;
命令:
#firewall-cmd --zone=public --add-port=3306/tep --permanent
#firewall-cmd--reload
步骤六:MySQL集群版验证;
1、在任意一台SQL服务 节点主机 上使用命令“mysql-u root -p” 登录到MySQL数据库,会提示输入密码,正确输入密码成功登录MySQL数据库之后会进入MySQL的控制台;
命令:
# mysql -u root -P
2、在MySQL控制台使用命令“CREATEDATABASE test;"创建数据库“test”;
命令:
>CREATE DATABASE test;
3、在MySQL控制台使用命令“SHOW DATABASES;"显示数据库列表,若存在名为“test”的数据库,则表示集群同步数据成功;
命令:
> SHOW DATABASES
注:可以使用命令"ssh 目标主机名或IP地址”远程登录到集群中其它SQU服务节点主机进行操作,完成所有操作后使用命令"logout"退出当前登录
4、在任意一台集群主机上执行;
命令:
#ndb_mgm -e show
步骤七:MySQL集群测试;
1、测试一:
a)现在我们在其中一个SQL节点上进行相关数据库的创建然后到另外一 个SQL节点上看看数据是否同步。
在SQL节点1.上执行:
shell> /usr/local/mysql/bin/mysql -u root -P
mysql>show databases;mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 Gi INT) ENGINE=NDB;
//这里必须指定数据库表的引擎为NDB,否则同步失败
mysql> INSERT INTO ctest2 O VALUES (1);
mysql> SEL ECT * FROM ctest2;
b)然后在SQL节点2上看数据是否同步过来了
经过测试,在非master.上创建数据,可以同步到master上查看表的引擎是不是NDB,>show create table表名:
2、测试二:
a) 关闭一个数据节点,在另外一个节点写输入,开启关闭的节点,看数据是否同步过来。
首先把数据节点1重启,然后在节点2上添加数据
在SQL节点2上操作如下:
mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 O VALUES (3333);
mysql> SELECT* FROM ctest2;
b) 等数据节点1启动完毕,启动数据节点1的服务
#/usr/local/mysql/bin/ndbd -initial
#service mysqld start
c) 然后登录进去查看数据
# /ustrlocal/mysql/bin/mysql -u root p
可以看到数据已经同步过来了,说明数据可以双向同步了。
出现的问题与解决方案
本实验未遇到错误,介绍几个排错技巧:
1、一般,报错的时候都会有error code。比如ERROR 1504,Error: 2303等等,遇到这些报错,我们可以先用mysql的报错工具perror查看,比如查看报错号为1504的错误,使用命令为:perror --ndb 1504
2、在出现报错以后,查看WARNINGS或ERRORS信息,比如出现Error CODE : 1528 Failed TO CREATE LOGFILE GROUP后输入SHOW WARNINGS;,会显示出具体的报错信息:
Got error 1504 'Out of logbuffer memory' FROM NDB
Failed TO CREATE LOGFILE GROUP
以上报错代码,均可在官网找到解决方案。
知识拓展
1、MySQL集群优缺点;
优点:
a) 99.999%的高可用性
b)快速的自动失效切换
c)灵活的分布式体系结构,没有单点故障
d)高吞吐量和低延迟
e)可扩展性强,支持在线扩容
缺点:
a)存在很多限制,比如:不支持外键
b)部署、管理、配置很复杂
c)占用磁盘空间大,内存大
d)备份和恢复不方便
e)重启的时候,数据节点将数据load到内存需要很长时间
2、MySQL集群如何存储数据;
a)Master执行提交语句时,事务被发送到slave,slave开始准备事务的提交。
b)每个slave都要准备事务,然后向master发送OK(或ABORT)消息,表明事务已经准备好(或者无法准备该事务)。
c)Master等待所有Slave发送OK或ABORT消息
如果Master收到所有 Slave的OK消息,它就会向所有Slave发送提交消息,告诉Slave提交该事务;如果Master收到来自任何一个Slave的ABORT消息,它就向所有 Slave发送ABORT消息,告诉Slave去中止事务。
e)每个Slave等待来自Master的OK或ABORT消息。
如果Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;如果Slave收到取消请求,它们就会撤销所有改变并释放所占有的资源,从而中止事务,然后向Masterv送事务已中止的确认。
f)当Master收到来自所有Slave的确认后,就会报告该事务被提交(或中止),然后继续进行下一个事务处理。