一、mysql-cluster 的介绍:
1、说心里话mysql-cluster这货性能上是不行的,之前一个同事测试了来的结果是8个主机组成的mysql-cluster性能
上搞不过一个单机的mysql(innodb引擎);这样的性能表现就尴尬了。
2、在功能上这货也不是一完整的,它有各种各样的不支持。
3、从官方表现上看不管是mysql-5.6 还是mysql-5.7 都有与之对应的mysql-cluster版本,但是在mysql-8这一代
变天了不再提供与之对应的mysql-cluster版本了,这个说明什么?说明mysql-cluster这货要GG啦。
4、好吧! mysql-cluster 是什么,是一个不成熟的解决方案! 它的设计思路是把单机mysql中的SQL层 和 引擎层
分离出来,使它们可以单独运行。想想如果多个用于保存数据的引擎能同时在多台主机上运行,这样数据就有冗余
了,同理SQL层的处理也是一样的,mysql-cluster就是通过冗余来提高整个环境的可用性的。还有为了方便管理
mysql-cluster的这若干的主机,mysql还专门开发了一个管理端程序。
5、现在专业一点 mysql-cluster中把主机按它运行的程序不同,逻辑上分成了三类:
1、sql node :运行mysqld 的主机,逻辑上负责保存元数据,处理连接请求。
2、data node :真正保存数据的主机
3、manger node : 用于管理以上两类(sql node ,data node)结点的结点。
6、再送你一张官方的mysql-clustr架构图
二、安装环境的规划:
主机IP地址 角色 10.186.19.19 manager node 10.186.19.18 data node 10.186.19.17 data node 10.186.19.16 sql node
三、下载安装介质:
为了说明mysql-cluster整体架构、也就是说哪个角色要安装什么就可以了、所以在这里选择把安装包下载到10.186.19.16这台主机上
对于其它角色就采用scp的方式把相关的程序复制过去,这样做的好处是对于各个角色要安装什么包就变得非常明显了。
[root@actionsky17 ~]# cd /tmp/ [root@actionsky17 tmp]# wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz
四、安装sql node :
# 解压安装包并创建相关目录 cd /tmp/ tar -xvf mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ cd /usr/local/ ln -s mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64 mysql mkdir -p /usr/local/mysql/data #增加mysql用户 useradd mysql #初始化sql node ./bin/mysqld --initialize-insecure --user=mysql --datadir=/usr/local/mysql/data/ #初始化完成后数据目录有如下内容 [root@actionsky16 mysql]# ll /usr/local/mysql/data/ total 110636 -rw-r-----. 1 mysql mysql 56 Oct 11 02:52 auto.cnf -rw-r-----. 1 mysql mysql 422 Oct 11 02:52 ib_buffer_pool -rw-r-----. 1 mysql mysql 12582912 Oct 11 02:52 ibdata1 -rw-r-----. 1 mysql mysql 50331648 Oct 11 02:52 ib_logfile0 -rw-r-----. 1 mysql mysql 50331648 Oct 11 02:51 ib_logfile1 drwxr-x---. 2 mysql mysql 4096 Oct 11 02:52 mysql drwxr-x---. 2 mysql mysql 4096 Oct 11 02:52 ndbinfo drwxr-x---. 2 mysql mysql 8192 Oct 11 02:52 performance_schema drwxr-x---. 2 mysql mysql 8192 Oct 11 02:52 sys
五、安装data node:
由于data node 只包涵引擎层相关的程序,所以安装也就是把引擎层相关的程序由10.186.19.16 scp 到对应的主机,并以这些程序有
可执行权限就行了
在10.186.19.16(sql node)上执行
[root@actionsky16 mysql]# scp /usr/local/mysql/bin/ndbd 10.186.19.17:/usr/local/bin/ [root@actionsky16 mysql]# scp /usr/local/mysql/bin/ndbmtd 10.186.19.17:/usr/local/bin/ [root@actionsky16 mysql]# scp /usr/local/mysql/bin/ndbd 10.186.19.18:/usr/local/bin/ [root@actionsky16 mysql]# scp /usr/local/mysql/bin/ndbmtd 10.186.19.18:/usr/local/bin/
六、安装manger node:
[root@actionsky16 mysql]# scp /usr/local/mysql/bin/ndb_mgm* 10.186.19.19:/usr/local/bin/ ndb_mgm 100% 7926KB 7.7MB/s 00:01 ndb_mgmd 100% 17MB 17.2MB/s 00:00
七:配置sql node 与 data node:
首先不管是sql node 还是 data node 他们和普通的单机一样都是读的/etc/my.cnf 这个配置文件中的配置项。
然而与普通单机不同的是它们的配置文件中额外说明两个问题
1、说明结点以mysql-cluster的方式工作 ndbcluster
2、说明结点对应的manger是谁 ndb-connectstring=manger主机的地址
以下是sql node 和 data node的配置文件样例:
[mysqld] basedir=/usr/local/mysql/ #mysql的安装路径 datadir=/usr/local/mysql/data #sql node 的相关数据保存的位置 ndbcluster #以mysql-cluster的方式运行 ndb-connectstring=10.186.19.19 #mysql-cluster manager的运行
八:配置manger node:
官方文档中把manger node 的配置文件保存在/var/lib/mysql-cluster/ 这个目录下了,配置文件名叫config.ini
我个人喜欢根据官方文档中的位置保存文件,这样我配置出来的环境就统一了,方便以后的运维。
1、创建保存配置文件的目录&创建配置文件:
mkdir -p /var/lib/mysql-cluster cd /var/lib/mysql-cluster/ touch config.ini
2、配置文件中的内容如下:
[ndbd default] NoOfReplicas=2 DataMemory=80M IndexMemory=18M ServerPort=2202 [ndb_mgmd] HostName=10.186.19.19 DataDir=/var/lib/mysql-cluster [ndbd] HostName=10.186.19.18 NodeId=2 DataDir=/usr/local/mysql/data [ndbd] HostName=10.186.19.17 NodeId=3 DataDir=/usr/local/mysql/data [mysqld] HostName=10.186.19.16
九:启动mysql-cluster:
mysql-cluster的启动过程是有一个固定的步骤的
第一步:启动manger node
[root@10-186-19-19 mysql-cluster]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
第二步:启动data node
分别在两个data node 结点上执行
[root@actionsky18 local]# ndbd --initial --ndb-connectstring=10.186.19.19 2017-10-11 04:12:56 [ndbd] INFO -- Angel connected to '10.186.19.19:1186' 2017-10-11 04:12:56 [ndbd] INFO -- Angel allocated nodeid: 2
第三步:启动sql node
cd /usr/local/mysql/
./bin/mysqld_safe &
十:检查mysql-cluster的运行情况:
在manger node上执行
[root@10-186-19-19 mysql-cluster]# ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @10.186.19.18 (mysql-5.7.19 ndb-7.5.7, Nodegroup: 0, *) id=3 @10.186.19.17 (mysql-5.7.19 ndb-7.5.7, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @10.186.19.19 (mysql-5.7.19 ndb-7.5.7) [mysqld(API)] 1 node(s) id=4 @10.186.19.16 (mysql-5.7.19 ndb-7.5.7)
十一、mysql-cluster安装&配置的一些注意项:
1、--initial 会去删除ndb文件系统中的数据,并重新初始化一下,这样之前的数据就全没了。如果你不小心执行了这个
那你可以准备好跑路了!
2、目前的环境下有在/etc/my.cnf 中指定ndb-connectstring的值,但是ndbd每次都没有去读,如果我强制--defautls-file
的方式要它去读/etc/my.cnf ndbd 还会起不来。这下就尴尬了。
十二、验证一下环境的可用性:
由于在初始化sql node 的时间root并没有测试密码,测试环境下我又是以root身份登录的linux,所以在环境变量正确
的情况下一句mysql命令就能直接进了
mysql> create table t(id int ,x int) engine=ndbcluster; Query OK, 0 rows affected (0.15 sec) mysql> insert into t(id,x) values(110,119); Query OK, 1 row affected (0.01 sec) mysql> select * from t; +------+------+ | id | x | +------+------+ | 110 | 119 | +------+------+ 1 row in set (0.00 sec) mysql> show create table t; +-------+-----------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-----------------------------------------------------------------------------------------------------------------------+ | t | CREATE TABLE `t` ( `id` int(11) DEFAULT NULL, `x` int(11) DEFAULT NULL ) ENGINE=ndbcluster DEFAULT CHARSET=latin1 | +-------+-----------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
----