Mysql集群
高性能、高可用性、冗余和可扩展性都是数据库规划时需要考虑的重要因素,常常采用商用高可用性硬件和均衡负载等方案来录求改善复制拓扑方法。尽管这样常常可以满足大部分需求,但是如果需要无单点故障的方案,而且要求极高的吞吐量,上线时间达到99.999%,那么就可以考虑使用mysql集群技术。
一、mysql集群概述
1、什么是mysql集群
mysql集群是一个无共享的、分布式节点架构的存储方案,其目的是提供容错性和高性能。数据在单个数据节点上存储和复制,每个数据节点运行在独立的服务器上并维护数据的一份拷贝。每个集群还有管理节点。数据更新使用读已提交隔离级别来保证所有节点数据的一致性,使用两阶段提交机制保证所有节点都有相同的数据。
无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。该架构通过多个mysql服务器分配负载,从而最大程度地达到高性能,通过在不同位置存储数据保证高可用性和冗余。
2、mysql集群组件
Mysql集群的典型部署是在某个网络的不同机器上安装集群组件。因此,mysql集群又称网络数据库(network database, NDB)。本文所述的“mysql集群”指的是mysql服务器和NDB组件,而“NDB”或“NDB集群”则特指集群组件。
Mysql集群是一个数据库系统,使用mysql服务器作为前端来支持标准的SQL查询。名为ndbcluster的存储引擎是连接mysql服务器和集群技术的接口,所以,如果没有NDB集群组件,就不能使用ndbcluster存储引擎。
但是,如果没有mysql服务器也可以使用NDB集群技术,不过这样的话,就需要写一些NDB API的底层编程。
NDB API是面向对象的,实现了索引、扫描、事务和事件处理。
3、集群与复制的区别
通常认为集群包含成员、消息、冗余和自动故障转移等功能,而复制仅仅是一个服务器向另一个服务器发送消息的方式。
二、mysql集群安装
1、 mysql集群架构
mysql集群有如下三层:
(a) 应用程序层:负责与mysql服务器通信的各种应用程序。
(b) Mysql服务器层:处理SQL命令,并与NDB存储引擎通信和Mysql服务器。
(c) NDB集群组件层:NDB集群组件有时也称数据节点,负责处理查询,然后将结果返回给mysql服务器。
如下图所示:
由上图可知,应用程序连接到mysql服务器,通过存储引擎层访问NDB集群组件。
2、 安装及配置mysql集群
由前文可知,要搭建一个mysql集群数据库系统,需要建立三类节点。第一类节点是用来查询SQL语句的节点:mysql服务器节点。第二类节点是用来存储数据用的节点:NDB数据节点。第三类节点是用来作为mysql集群的管理节点。如下图所示:
图上图可知,搭建一个mysql集群数据库系统,至少需要三台服务器。其中中一台服务器作为集群的管理节点,另外两台作为NDB数据存储节点并且复用为SQL查询节点(即mysql服务节点)。
本文所举实例即为三台服务器搭建mysql集群。
管理节点:MGM IP地址:192.168.1.105
NDB节点:IP地址:192.168.1.177
NDB节点:IP地址:192.168.1.178
SQL节点:IP地址:192.168.1.177
SQL节点:IP地址:192.168.1.178
(a) 安装配置MGM节点
准备好mysql集群源码包:mysql-cluster-gpl-7.2.8.tar.gz。按下面步骤安装配置mysql集群。
#cp mysql-cluster-gpl-7.2.8.tar.gz /home/software
#mkdir –p /usr/local/mysql
#mkdir –p /service/mysql
# groupadd mysql
# useradd -g mysql mysql
# chown mysql.mysql -R /service/mysql/
#tar zxvf mysql-cluster-gpl-7.2.8.tar.gz
假设服务器上已经安装了cmake。
#cd mysql-cluster-gpl-7.2.8
#cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/service/data/ -DMYSQL_UNIX_ADDR=/service/data/mysqld.sock -DSYSCONFDIR=/etc -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_unicode_ci -DENABLED_LOCAL_INFILE=1 -DWITH_DEBUG=0
#make && make install
#cp support-files/my-medium.cnf /etc/my.cnf
#cp support-files/mysql.server /etc/init.d/mysql
#chmod 755 /etc/init.d/mysql
#cd /usr/local/mysql
#bash scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/service/data/
至此就安装好了mysql集群的MGM节点,下面进行配置
#mkdir –p /service/mysql-cluster
#cd /service/mysql-cluster
#vim config.ini
[NDBD DEFAULT]
NoOfReplicas= 2
DataDir= /service/data
[NDB_MGMD]
Hostname=192.168.1.105
DataDir= /service/data
[NDBD]
Hostname=192.168.1.177
[NDBD]
Hostname=192.168.1.178
[MYSQLD]
Hostname=192.168.1.178
[MYSQLD]
Hostname=192.168.1.177
然后保存退出。
启动管理守护进程:
#/usr/local/mysql/bin/ndb_mgmd –initial –f /service/mysql-cluster/config.ini
不出错将会显示:
启动管理控制台:
#/usr/local/mysql/bin/ndb_mgm
查看所有节点:
(b)安装配置NDB节点和SQL节点
安装NDB节点和SQL节点,按照前文所述的安装MGM节点的步骤和命令一致。安装好后,下面进行配置。
在NDB节点和SQL节点的配置文件里面均加入下面代码:
[mysqld]
启动数据节点:
两台NDB节点都有如上显示则说明成功启动数据节点。
启动SQL节点:
#/usr/local/mysql/bin/mysqld –ndbcluster –console -umysql
输出中包括了关于NDB集群连接、日志和状态等额外的注释信息。SQL节点正确启动之后,返回管理控制台,检查所有节点的状态:
显示,所有点节均已连通,至此mysql集群搭建完成。
三、 mysql集群测试
在其中的一个SQL节点,登录数据库:
# /usr/local/mysql/bin/mysql -u root –p
登录并查看另一台SQL节点的数据库:
发现数据库chipcore已经存在。
说明集群已经工作。