原理
MySQL集群是一个无共享的、分布式节点架构的存储方案,其目的是提供容错性和高性能.是MySQL适合于分布式计算环境的高可用、高性能版本,它采用了NDB Cluster存储引擎
MySQL集群主要包括三个组成部分:管理节点、数据节点、SQL节点
管理节点(MGM):管理MySQL Cluster内的其他节点,提供配置数据,启动并停止节点、运行备份等
数据节点:保存Cluster的数据
SQL节点:用来访问Cluster数据的节点
在NDB集群中这些组件的关系如上所示:所有这些程序一起工作来形成一个NDB集群.当数据被NDB存储引擎存储时,表(和表数据)存储在数据节点中.这样的表可以直接从集群中的所有MySQL服务器(SQL节点)访问.因此,在一个将数据存储在集群中的工资单应用程序中,如果一个应用程序更新了雇员的工资,那么查询这些数据的所有其他MySQL服务器都可以立即看到这个变化.
NDB集群核心概念
NDB CLUSTER(也称为NDB)是一个内存存储引擎,提供高可用的数据持久化功能.
NDB CLUSTER存储引擎可以配置一系列故障转移和负载平衡.
集群节点
集群节点有三种类型,在最小的NDB集群配置中,至少会有三个节点.
1. Management node
这种类型节点的作用是管理NDB集群中的其他节点,执行诸如提供配置数据、启动和停止节点以及运行备份等功能.因为这个节点类型管理其他节点的配置,所以应该首先启动这种类型的节点,在任何其他节点之前.执行ndb_mgmd命令启动该节点.
2. Data node
这种类型节点的作用是存储集群数据.一个副本足以用于数据存储,但不提供冗余;因此,建议使用两个(或更多)副本来提供冗余,从而获得高可用性.执行ndbd或ndbmtd(多线程)命令启动该节点.NDB集群表通常存储在内存中,而不是在磁盘上(这就是为什么我们将NDB集群称为内存中的数据库).然而,一些NDB集群数据可以存储在磁盘上.
3. SQL node
在NDB Cluster中SQL节点是一个使用NDBCLUSTER存储引擎的传统MySQL服务器.期望在生产环境中使用三个节点的设置是不现实的.这样的配置不提供冗余;为了从NDB集群的高可用性特性中获益,您必须使用多个数据和SQL节点.还强烈推荐使用多个管理节点
优点和使用场景
1:N个9的高可用性
2:快速的自动失效切换
3:灵活的分布式体系结构,没有单点故障
4:高吞吐量和低延迟
5:可扩展性强,支持在线扩容
6:适用于具有非常高的并发需求,对可用性要求较高,或者是数据需要分片的遵守SQL标准的传统RDBMS系统
##### (二)实验准备和MySQL软件安装
说明
本次实验模拟MySQL集群架构,其中使用数据库为MySQL集群版本,此外准备了三个Linux服务器,其中一个用作管理节点,另外两个服务器既充当了数据节点角色,又充当了SQL节点的角色
MySQL集群下载和安装
1:下载地址,文件为压缩文件
https://dev.mysql.com/downloads/cluster/
2:检查防火墙,关闭防护墙
service iptables stop # 关闭命令
chkconfig iptables off # 永久关闭防火墙
service iptables status #查看防火墙状态
3:检查是否有已安装MySQL版本,如果有删除,本次安装为集群版本
yum list installed | grep mysql
yum -y remove XXX
4:上传文件并解压到目录 /usr/local/mysql,注意移动压缩包解压后里面文件到mysql目录下,mysql目录直接为数据文件,比如bin等目录
5:安装MySQL集群
scripts/mysql_install_db --user=root
6:注册服务(赋予执行权限)
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
此时已经完成基本配置,另外俩台服务器相同操作
(三)集群配置备注:配置SQL节点和数据节点(俩台服务器相同配置)
配置SQL和NDB节点
1:复制配置文件
cp /usr/local/mysql/my.cnf /etc/my.cnf
vi /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
user=root
log-error=/var/lib/mysql/mysqld.err
ndbcluster
ndb-connectstring=192.168.0.107
[mysql_cluster]
ndb-connectstring=192.168.0.107
配置解释:
1:端口
2:basedir根路径
3:datadir存储数据
4:user用户
5:log-error错误日志
6:如果当前节点为数据节点的话,那么需要添加ndbcluster,如果是SQL节点的话需要添加mysql_cluster,其中的IP指向管理节点,如果当前服务器既是数据节点又是SQL节点的话,那么两个都需要配置.
7:删除配置文件中最后一行vi /etc/my.cnf
配置管理节点
准备目录
1:复制ndb文件到bin目录下
cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
2:添加执行权限
cd /usr/local/bin
chmod +x ndb_mgm*
3:在lib目录下创建目录,用于存放节点配置文件
cd /var/lib/
mkdir mysql-cluster
cd mysql-cluster/
vi config.ini
4:配置文件添加配置内容如下
[NDBD DEFAULT]
NoOFReplicas=1
DataMemory=500M
IndexMemory=300M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]
NodeId=1
hostname=192.168.0.107
datadir=/var/lib/mysql-cluster/
[NDBD]
NodeId=2
hostname=192.168.0.103
datadir=/usr/local/mysql/data/
[NDBD]
NodeId=3
hostname=192.168.0.105
datadir=/usr/local/mysql/data/
[MYSQLD]
NodeId=4
hostname=192.168.0.103
[MYSQLD]
NodeId=5
hostname=192.168.0.105
启动顺序
节点启动顺序为:管理节点,NDB数据节点,Sql节点
启动管理节点
cd /usr/local/bin
指定配置文件启动
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
查看状态
ndb_mgm -e show
查看状态,其中管理节点已经配置成功,而NDB节点和SQL节点未连接
如果后续添加了新增的节点,再次启动使用
ndb_mgmd -f /var/lib/mysql-cluster/config.ini -initial
启动NDB节点
本次实验中配置俩个NDB节点,因此下面操作需要俩台服务器都进行对应配置启动
cp /usr/local/mysql/bin/ndbd /usr/local/bin
cd /usr/local/bin
./ndbd --initial
此时已经启动了NDB节点,需要到管理节点上进行状态查看
ndb_mgm -e show
此时查看管理节点,NDB服务已连接,sql节点还未连接
启动SQL节点
cd /usr/local/bin
service mysqld start
集群测试
选择一台SQL服务器登录MySQL
cd /usr/local/mysql/bin
mysql -u root -p
密码空
注意:所有的表必须使用ndb引擎,否则不会同步,即必须遵守以下建表语句
create table TableName (id primary key ,name varchar(20)) engine=ndb