MySQL Cluster

参考:http://www.cnblogs.com/linkstar/p/6510713.htmlhtml

 

 

若是没有特殊声明,则全部命令都在node1上执行node

 

192.168.1.201    node1  1核/448M  管理节点
192.168.1.202    node2  1核/448M  数据节点和mysql节点在同一台机器上
192.168.1.203    node3  1核/448M     数据节点和mysql节点在同一台机器上mysql

 

#架构图及说明linux

 

 

 

 

前期准备
#配置主机名和IP对应关系(全部节点上操做该步)
[root@node1 ~]# vim /etc/hosts
192.168.1.201  node1
192.168.1.202  node2
192.168.1.203  node3sql


#在node1上生成秘钥并分发到各节点
[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# cat .ssh/id_rsa.pub >>.ssh/authorized_keys数据库


[root@node1 ~]# ssh-copy-id root@node2
[root@node1 ~]# ssh-copy-id root@node3vim


#作跳板机
[root@node1 ~]# alias a='for a in {1..3};do'
[root@node1 ~]# alias b='for b in {2..3};do'
#测试跳板机
[root@node1 ~]# a ssh node$a 'hostname';done
#注:若是出现解析的出来的IP和主机名不对应的问题,就看下.ssh/known_hosts中的对应关系,将错误的删除便可服务器

 

#关闭各节点防火墙
[root@node1 ~]# a ssh node$a 'systemctl stop firewalld';done
[root@node1 ~]# a ssh node$a 'systemctl disable firewalld';done
[root@node1 ~]# a ssh node$a 'iptables -F';done架构


#安装配置管理节点ssh

下载地址1      

[root@node1 ~]# wget https://cdn.mysql.com//archives/mysql-cluster-gpl-7.5/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz
注:这里的包地址是wget时跟随的新地址,原地址为https://dev.mysql.com/*****

 


[root@node1 ~]# tar -zxvf mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@node1 ~]# cp /usr/local/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64/bin/ndb_mgm* /usr/local/bin/
[root@node1 ~]# mkdir /var/lib/mysql-cluster
[root@node1 ~]# mkdir /usr/local/mysql
[root@node1 ~]# vim /var/lib/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2
DataMemory=512M
IndexMemory=18M
[ndb_mgmd]
HostName=192.168.1.201
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=192.168.1.202
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=192.168.1.203
DataDir=/var/lib/mysql-cluster
[mysqld]
[mysqld]


#使用配置文件初始化管理节点
[root@node1 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

#使用ndb_mgm进行管理
[root@node1 ~]# ndb_mgm
ndb_mgm> show (使用show命令查看管理状况,当数据节点配置完毕以后再用这个命令查看和管理)

 

 


#安装配置数据节点 和 mysql节点
#如下的全部操做须要在全部的集群节点都要进行相同的操做
[root@node1 ~]# scp mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz root@node2:~
[root@node1 ~]# scp mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz root@node3:~
[root@node1 ~]# b ssh node$b 'groupadd mysql';done
[root@node1 ~]# b ssh node$b 'useradd -g mysql -s /bin/false mysql';done
[root@node1 ~]# b ssh node$b 'mkdir /var/lib/mysql-cluster';done
[root@node1 ~]# b ssh node$b 'chown root:mysql /var/lib/mysql-cluster';done

[root@node1 ~]# b ssh node$b 'tar zxvf ~/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/';done
[root@node1 ~]# b ssh node$b 'cp -R /usr/local/mysql-cluster-gpl-7.5.11-linux-glibc2.12-x86_64/ /usr/local/mysql';done

 

[root@node1 ~]# b ssh node$b 'echo '[mysqld]'>>/etc/my.cnf';done
[root@node1 ~]# b ssh node$b 'echo 'ndbcluster'>>/etc/my.cnf';done
[root@node1 ~]# b ssh node$b 'echo 'ndb-connectstring=192.168.1.201'>>/etc/my.cnf';done
[root@node1 ~]# b ssh node$b 'echo ' '>>/etc/my.cnf';done
[root@node1 ~]# b ssh node$b 'echo '[mysql_cluster]'>>/etc/my.cnf';done
[root@node1 ~]# b ssh node$b 'echo 'ndb-connectstring=192.168.1.201'>>/etc/my.cnf';done
注:以上IP为管理节点的IP

 

[root@node1 ~]# b ssh node$b '/usr/local/mysql/bin/mysqld --initialize';done   密码样式1: e,djt*Jre9vC    密码样式2: ew3;bg#B0Il6
[root@node1 ~]# b ssh node$b 'mv /etc/my.cnf{,.bak}';done

 

[root@node1 ~]# b ssh node$b 'chown -R root /usr/local/mysql';done
[root@node1 ~]# b ssh node$b 'chown -R mysql /usr/local/mysql/data';done
[root@node1 ~]# b ssh node$b 'chgrp -R mysql /usr/local/mysql';done
[root@node1 ~]# b ssh node$b 'cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/';done
[root@node1 ~]# b ssh node$b 'chmod +x /etc/rc.d/init.d/mysql.server';done
[root@node1 ~]# b ssh node$b 'chkconfig --add mysql.server';done


#启动ndbd
[root@node1 ~]# b ssh node$b '/usr/local/mysql/bin/ndbd --initial';done

 

 

 

 

#启动MySQL
[root@node1 ~]# b ssh node$b '/etc/init.d/mysql.server start';done
Starting MySQL... SUCCESS!
Starting MySQL.. SUCCESS!


#登陆MySQL(除管理节点之外的全部节点上执行)
[root@node2 ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password:

mysql> set password=password('123456');
注:不执行该步会提示You must reset your password using ALTER USER statement before executing this statement.这样的提示
mysql> alter user 'root'@'localhost' password expire never;
mysql> flush privileges;


#修改MySQL登陆密码及受权
mysql> use mysql;
mysql> update user set host='%' where user='root';
mysql> update user set host='localhost' where user='root';
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> update user set host='%' where user='root';

 

 

 

测试:
修改mysql密码统一,修改mysql的访问权限,使外部ip能远程访问mysql
而后在一台上面建立数据库,看另外一台是否被同步,而后建立表,而后新增删除等等
惟一须要注意的是,建立表的时候必须选择表的引擎为NDBCLUSTER,不然表不会进行同步

 

 

 

 

若是把表引擎建立成MyISAM,再次查看数据同步状况

 

 

 

SQL单点故障测试

 

 

 

 NDB(数据节点)的单点故障

在这个测试环境中,数据节点是两个,那么他们对数据的存储是互相镜像仍是一份数据分红几块存储呢?(相似磁盘阵列RAID1仍是RAID0)
这个答案关键在于配置文件中 [NDBD DEFAULT] 组中的NoOfReplicas参数,
若是这个参数等于1,表示只有一份数据,可是分红N块分别存储在N个数据节点上,
若是该值等于2,则表示数据被分红N/2,每块数据都有两个备份,这样即便有任意一个节点发生故障,只要它的备份节点正常,数据就能够正常查询。

 

测试方法和过程:

先将两个数据节点之一中止,访问zhangsan表,看可否正常访问;

而后将NoOfReplicas配置改成2,这时数据节点实际上已经互为镜像,保存了两份。
这时再中止任意一个数据节点,将不能再次访问表zhangsan,反之

 会报:

 Error data: Illegal configuration change. Initial start needs to be performed  when changing no of replicas (1 != 2)   的错误。

看来NoOfReplicas参数没法临时更改因此一开始就须要设置好,不要到后面才想到更改,那时就悲剧了。
若是从新ndbd --initial,将会丢失全部数据,记住这个坑.....

 

 

 

SQL节点关闭
/etc/init.d/mysqld stop
数据节点(NDB)关闭
ndbd stop
管理节点关闭
ndb_mgm> shutdown

总结:学习中踩了很多坑:好比参数NoOfReplicas没法临时更改,管理节点配置文件中若是很少预留一个[MySQLD],在中止NDB节点时会报错,配置文件中的[NDBD]段落中的datadir指定的目录在数据节点的服务器上面要存在。selinux,iptables等相关问题。后续的文章中将会介绍mysql cluster的平常维护,包括数据备份,数据恢复,日志管理等。MySQL Cluster的核心在于NDB Cluster存储引擎,不只对数据进行了水平切分,还对数据进行了跨节点冗余。既解决了数据库的扩展问题,同时也在很大程度上提升了数据库总体可用性。

相关文章
相关标签/搜索