MySQL Cluster

摘要:
参考:http://www.cnblogs.com/linkstar/p/6510713.html如果没有特殊声明,则所有命令都在node1上执行192.168.1.201node1  1核/448M  管理节点192.168.1.202node2  1核/448M  数据节点和mysql节点在同一台机器上192.168.1.203node3  1核/448M 数据节点和mysql节点在同一台机器

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

如果没有特殊声明,则所有命令都在node1上执行

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

#架构图及说明

MySQL Cluster第1张

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

#在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@node3

#做跳板机
[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

#安装配置管理节点

下载地址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/*****

MySQL Cluster第2张

[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 Cluster第3张

MySQL Cluster第4张

#启动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 Cluster第5张

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

MySQL Cluster第6张

MySQL Cluster第7张

如果把表引擎创建成MyISAM,再次查看数据同步情况

MySQL Cluster第8张

SQL单点故障测试

MySQL Cluster第9张

MySQL Cluster第10张

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

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

MySQL Cluster第11张

测试方法和过程:

先将两个数据节点之一停止,访问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存储引擎,不仅对数据进行了水平切分,还对数据进行了跨节点冗余。
既解决了数据库的扩展问题,同时也在很大程度上提高了数据库整体可用性。

免责声明:文章转载自《MySQL Cluster》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在centos7升级nodejs到最新版本单例模式——java设计模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)错误解决办法

我的电脑是win10,所用的是mysql5.7.14 近期在学习mysql数据库的时候,遇到了这个错误,我的密码错误了。突如其来的问题,很是蒙蔽,因为我没对数据库设置过密码。通过网上查询,可以通过进入mysql命令行的方式,来直接修改数据库的密码。具体步骤如下: 在mysql数据库的my.ini文件中找到mysqld这一项: 用记事本打开,找到mysql...

SSH key生成代码详解

SSH key生成代码详解 -b 4096-t rsassh-keygen-C "邮箱" 转载于知乎 作者:就是这么优秀链接:https://zhuanlan.zhihu.com/p/36098077 ssh-keygen -t rsa -b 4096 -C "邮箱":这条命令的目的是为了让本地机器ssh登录远程机器上的GitHub账户无需输入密码。...

C#连接MYSQL时带中文的查询读不出来

今天在.net项目中连MYSQL数据库时,查询语句 中带中文,一直查不出来数据,字母和数字都可以查出来,想想应该是编码问题, 原来的连接字符串是 server=localhost;database=mysql;uid=root;pwd=111; 改为 server=localhost;database=mysql;uid=root;pwd=111;Cha...

docker运行mysql容器自动停止的问题解救方案如下

在docker中启动的mysql容器会自动停止是因为mysql使用的内存过多; 解决方法如下: 1、先卸载之前的mysql容器,如下: docker ps -a #获取docker中的所有容器   通过docker rm cbb412415aab进行卸载删除 2、重新运行mysql容器: docker run -it -m 300M --memo...

CentOS (6.5|7.4)网卡安装报"Error, some other host already uses address"的解决方案

CentOS 6.5 网卡安装报"Error, some other host already uses address"的解决方案  解决办法: vi /etc/sysconfig/network-scripts/ifup-eth 注解掉下面的几行内容,然后再执行ifup eth0 if ! /sbin/arping -q -c 2 -w 3 -D...

mysql导入千万级数据实操

前言 目标快速模拟数据一亿条, 存储过程效率太低, 找到个load data的方法, 从本地文件读数据插入到库表中, 正文如下 正文 切换引擎 查询引擎类型 SHOW CREATE TABLE igs_sm_interface_access_log; 查询结果 CREATE TABLE `igs_sm_interface_access_log` ( `...