mysql-cluster 环境安装&配置

一、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)

 

 

 

----

 

posted on 2017-10-11 14:13  蒋乐兴的技术随笔  阅读(1077)  评论(0编辑  收藏  举报

导航