查看: 583|回复: 0

[Mysql数据库] Mysql Cluster 7.6.4 环境搭建

发表于 2018-4-4 08:00:02

MySQL Cluster 介绍

MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统。不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能。和Oracle Real Cluster Application不太一样的是,MySQL Cluster 是一个Share Nothing的架构,各个MySQL Server之间并不共享任何数据,高度可扩展以及高度可用方面的突出表现是其最大的特色。

简单的说,MySQL Cluster 实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过 NDB Cluster(简称 NDB)存储引擎来实现。MySQL Cluster 刚刚诞生的时候可以说是一个可以对数据进行持久化的内存数据库,所有数据和索引都必须装载在内存中才能够正常运行,但是现在的MySQL Cluster 版本分为内存表和磁盘表,内存表,所有数据加载到内存中运行,磁盘表仅仅将主键,索引字段装载在内存中,其他字段存放在磁上。

一个 MySQL Cluster 的环境主要由以下三部分组成:

(1)负责管理各个节点的 Manage 节点主机;管理节点负责整个Cluster集群中各个节点的管理工作,包括集群的配置,启动关闭各节点,对各个节点进行常规维护,以及实施数据的备份恢复等。管理节点会获取整个Cluster环境中各节点的状态和错误信息,并且将各 Cluster 集群中各个节点的信息反馈给整个集群中其他的所有节点。由于管理节点上保存了整个Cluster 环境的配置,同时担任了集群中各节点的基本沟通工作,所以他必须是最先被启动的节点。

(2)Storage 层的 NDB 数据节点;也就是上面说的NDB Cluster。最初的NDB是一个内存式存储引擎,当然也会将数据持久化到存储设备上。但是最新的NDB Cluster存储引擎已经改进了这一点,可以选择数据是全部加载到内存中还是仅仅加载索引数据。NDB 节点主要是实现底层数据存储功能,来保存Cluster 的数据。每一个Cluster节点保存完整数据的一个fragment,也就是一个数据分片(或者一份完整的数据,视节点数目和配置而定),所以只要配置得当,MySQL Cluster在存储层不会出现单点的问题。一般来说,NDB 节点被组织成一个一个的NDB Group,一个 NDB Group实际上就是一组存有完全相同的物理数据的NDB节点群。

上面提到了NDB 各个节点对数据的组织,可能每个节点都存有全部的数据也可能只保存一部分数据,主要是受节点数目和参数来控制的。首先在 MySQL Cluster主配置文件(在管理节点上面,一般为 config.ini)中,有一个非常重要的参数叫NoOfReplicas,这个参数指定了每一份数据被冗余存储在不同节点上面的份数,该参数一般至少应该被设置成2,也只需要设置成2就可以了。因为正常来说,两个互为冗余的节点同时出现故障的概率还是非常小的,当然如果机器和内存足够多的话,也可以继续增大来更进一步减小出现故障的概率。此外,一个节点上面是保存所有的数据还是一部分数据还受到存储节点数目的限制。NDB 存储引擎首先保证NoOfReplicas参数配置的要求来使用存储节点,对数据进行冗余,然后再根据节点数目将数据分段来继续使用多余的NDB节点。分段的数目为节点总数除以NoOfReplicas 所得。

(3)SQL 层的 SQL 服务器节点(后面简称为 SQL 节点);也就是我们常说的MySQL Server。主要负责实现一个数据库在存储层之上的所有事情,比如连接管理,Query 优化和响应 ,Cache 管理等等,只有存储层的工作交给了NDB 数据节点去处理了。也就是说,在纯粹的MySQL Cluster 环境中的SQL 节点,可以被认为是一个不需要提供任何存储引擎的MySQL服务器,因为他的存储引擎有Cluster 环境中的NDB 节点来担任。所以,SQL 层各MySQL服务器的启动与普通的MySQL Server 启动也有一定的区别,必须要添加ndbcluster参数选项才行。我们可以添加在my.cnf配置文件中,也可以通过启动命令行来指定。

MySQL Cluster 环境搭建

搭建 MySQL Cluster首先需要至少一个管理节点主机来实现管理功能,一个SQL节点主机来实现MySQL server功能和两个ndb节点主机实现NDB Cluster的功能。我在这里测试使用双SQL节点来搭建测试环境,具体信息如下:

1、服务器准备

192.168.1.2 管理节点

192.168.1.3 mysql节点,ndb节点

192.168.1.4 mysql节点,ndb节点

我这儿把mysq节点l和ndb数据节点放在一台机器上面

2、软件安装

测试环境(3台服务器均一样,不是必须的,但ndb节点最好一样,不一样的话,内存要配一样大,服务器均已关闭iptables,生产环境请自行开放相关端口)

安装 MySQL 节点:

sql节点1: 192.168.1.3
sql节点2: 192.168.1.4

下载安装包:mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64.tar.gz ,我这里使用二进制编译好了的,也可以自己下载源码包编译。这里操作一台SQL节点服务器,另外一台SQL节点服务器也是相同的,都执行如下安装步骤。

wget *.*.*/mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64.tar.gz

[root@192.168.1.2 src]# groupadd mysql
[root@192.168.1.2 src]# useradd -r -g mysql mysql
[root@192.168.1.2 src]# tar –zvxf mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64.tar.gz

[root@192.168.1.2 src]# mv mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64 /usr/local/mysql
[root@192.168.1.2 src]# cd /usr/local/mysql
[root@192.168.1.2 mysql]# chown -R mysql .
[root@192.168.1.2 mysql]# mkdir /data/
[root@192.168.1.2 mysql]# chown -R mysql.mysql /data
[root@192.168.1.2 mysql]# /usr/local/mysql/bin/mysqld –initialize --user=mysql --datadir=/data/ --basedir=/usr/local/mysql

  1. [root@192.168.1.2 mysql]# cp support-files/mysql.server /etc/init.d/mysql
复制代码
  1. [root@192.168.1.2]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /root/.bash_profile #添加环境变量
复制代码
  1. [root@192.168.1.2 mysql]# source /root/.bash_profile
复制代码
  1. 修改/etc/my.cnf配置文件,追加如下配置
复制代码

[mysqld]
datadir=/data/
basedir= /usr/local/mysql
ndbcluster # 运行NDB存储引擎
ndb-connectstring=192.168.1.2 # 管理节点
[MYSQL_CLUSTER]
ndb-connectstring=192.168.1.2 #管理节点

NDB节点安装(数据节点)

因为我的数据节点和SQL节点在一起,所以就不需要安装了。如果ndb数据节点和SQL节点是分开的,那安装方法和SQL节点安装方法一样。也是需要配置my.cnf的。

安装管理节点

管理节点所需要的安装更简单,实际上只需要 ndb_mgm 和ndb_mgmd两个程序即可,这两个可执行程序可以在上面的MySQL节点的MySQL安装目录中的bin目录下面找到。将这两个程序copy到管理节点上面合适的位置(自行考虑,我一般会放在/usr/local/mysql/bin下面)并且添加环境变量就可以了。(另外也可以将ndb_config 、ndb_perror 复制过来,ndb_config -q MaxNoOfAttributes #查看变量修改是否生效;ndb_perror --ndb 2308 2308为错误代码)

1.在/usr/local/创建目录mysql-cluster,该目录会存放相关日志文件,以及pid号。并在目录中创建配置文件config.ini

  1. [root@192.168.1.2 ~]# mkdir /usr/local/mysql-cluster
  2. [root@192.168.1.2 ~]# cd /usr/local/mysql-cluster/
  3. [root@192.168.1.2 mysql-cluster]# touch config.ini
复制代码
  1. 2.根据我们上面提供的环境,config.ini文件配置如下
复制代码

[tcp default]
SendBufferMemory=2M
ReceiveBufferMemory=2M


[ndbd default]
NoOfReplicas=2 #每个数据节点的镜像数量,通常最低设置为2,否则就没有意义了
DataMemory=3072M #每个数据节点中给数据分配的内存,
IndexMemory=1024M #每个数据节点中给索引分配的内存 ,7.6版本中的已经改名了


MaxNoOfOrderedIndexes=4000
MaxNoOfUniqueHashIndexes=4000
MaxNoOfAttributes=4000

MaxNoOfConcurrentOperations=1500000
MaxNoOfLocalOperations=2000000
MaxNoOfConcurrentTransactions=16000
TransactionDeadLockDetectionTimeOut=50000 #这是毫秒单位,相当于50秒

#ODirect=1

MaxNoOfTables=1024

#UndoDataBuffer=64M
#RedoBuffer=64M

#FragmentLogFileSize=512M
NoOfFragmentLogFiles=300


[ndb_mgmd]
NodeId=1
HostName=192.168.1.2 #管理节点ip
DataDir=/var/lib/mysql-cluster #管理节点数据目录,存放相关日志,以及pid文件


[ndbd]
NodeId=2
HostName=192.168.1.3 #数据节点ip地址
DataDir=/data/ #NDB点数据存放目录

[ndbd]
NodeId=3
HostName=192.168.1.4 #数据节点ip地址
DataDir=/data #NDB点数据存放目录

  1. <br />
复制代码


[mysqld]
NodeId=4
HostName=192.168.1.3 #SQL节点ip地址

[mysqld]
NodeId=5
HostName=192.168.1.4 #SQL节点ip地址

[mysqld]


在上面的配置文件中,包括很多的组,组名用"[]"括起来,这里我们最关心的是3类节点组的配置,分别定义如下

NDB_MGMD] 表示管理节点的配置,只能有一个。

[NDBD DEFAULT] 表示每个数据节点的默认配置,在每个节点的[NDBD]中不用再写这些选项,只能有一个。

[NDBD] 表示每个数据节点的配置,可以有多个。

[MYSQLD] 表示SQL节点的配置,可以有多个,分别写上不同的SQL节点的ip地址;也可以不用写,只保留一个空节点,表示任意一个ip地址都可以进行访问。此节点的个数表明了可以用来连接数据节点的SQL节点总数。

每个节点都有一个独立的id号,可以填写,比如nodeid=2,(老版本使用id,新版本已经不使用id标识了)也可以不用填写,系统会按照配置文件的填写顺序自动分配。

开始使用Cluster

上面我们都已经配置完毕了,下面说明启动,关闭和使用方法

启动顺序为:管理节点->数据节点->SQL节点(很重要)

(1)启动管理节点:

  1. [root@192.168.1.2 ~]# ndb_mgmd -f /usr/local/mysql-cluster/config.ini --initial #第一次启动加—initial参数,以后修改了config.ini 加—reload
  2. MySQL Cluster Management Server mysql-5.7.20 ndb-7.6.4
  3. [root@192.168.0.30 ~]# netstat -ntlp | grep 1186
  4. tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 1329/ndb_mgmd
复制代码
  1. <strong>(2)启动NDB(数据节点)</strong>
复制代码
  1. <strong></strong>
复制代码
  1. [root@192.168.1.4 ~]# ndbd --initial
  2. 2018-03-30 16:23:46 [ndbd] INFO -- Angel connected to '192.168.1.2:1186'
  3. 2018-03-30 16:23:46 [ndbd] INFO -- Angel allocated nodeid: 3
复制代码

[root@192.168.1.4 /]# ps -ef | grep ndbd
root 2913 1 0 16:23 ? 00:00:00 ndbd
root 2914 2913 27 16:23 ? 00:00:43 ndbd

ndbd进程是使用NDB存储引擎处理表中数据的进程。通过该进程,存储节点能够实现分布式事务管理,节点恢复,在线备份相关任务。

(3)启动SQL节点(启动mysql服务)

[root@192.168.1.4 /]# service mysql start
SUCCESS! MySQL running (2588)

(4)节点全部启动成功后,在管理节点使用ndb_mgm工具的show命令查看集群状态:

[root@192.168.1.2]# /ndb_mgm
-- NDB Cluster -- Management Client --

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.1.3 (mysql-5.7.20 ndb-7.6.4, Nodegroup: 0, *)
id=3 @192.168.1.4 (mysql-5.7.20 ndb-7.6.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.2 (mysql-5.7.20 ndb-7.6.4)

[mysqld(API)] 2 node(s)
id=4 @192.168.1.3 (mysql-5.7.20 ndb-7.6.4)
id=5 @192.168.1.4 (mysql-5.7.20 ndb-7.6.4)

ndb_mgm工具是ndb_mgmd(MySQL Cluster Server)的客户端管理工具,通过该工具可以方便的检查Cluster的状态,启动备份,关闭等功能。更详细的方法可以通过ndb_mgm --help命令来进行查看。

到这里MySQL Cluster就已经搭建完成了。下一篇介绍动态加节点。



回复

使用道具 举报