分两点:一. MySQL NDB Cluster的概述MySQL NDB Cluster是一个适用于分布式计算环境的高可用性、高冗余版本的MySQL。 NDB集群 所有这些程序一起工作来形成一个NDB集群。当数据被NDB存储引擎存储时,表(和表数据)存储在数据节点中。这样的表可以直接从集群中的所有MySQL服务器(SQL节点)访问。因此,在一个将数据存储在集群中的工资单应用程序中,如果一个应用程序更新了雇员的工资,那么查询这些数据的所有其他MySQL服务器都可以立即看到这个变化。 NDB集群核心概念NDB CLUSTER(也称为NDB)是一个内存存储引擎,提供高可用的数据持久化功能。 集群节点集群节点有三种类型,在最小的NDB集群配置中,至少会有三个节点。 1. Management node这种类型节点的作用是管理NDB集群中的其他节点,执行诸如提供配置数据、启动和停止节点以及运行备份等功能。因为这个节点类型管理其他节点的配置,所以应该首先启动这种类型的节点,在任何其他节点之前。执行ndb_mgmd命令启动该节点。 2. Data node这种类型节点的作用是存储集群数据。一个副本足以用于数据存储,但不提供冗余;因此,建议使用2(或更多)副本来提供冗余,从而获得高可用性。执行ndbd或ndbmtd(多线程)命令启动该节点。NDB集群表通常存储在内存中,而不是在磁盘上(这就是为什么我们将NDB集群称为内存中的数据库)。然而,一些NDB集群数据可以存储在磁盘上。 3. SQL node在NDB Cluster中SQL节点是一个使用NDBCLUSTER存储引擎的传统MySQL服务器。 期望在生产环境中使用三个节点的设置是不现实的。这样的配置不提供冗余;为了从NDB集群的高可用性特性中获益,您必须使用多个数据和SQL节点。还强烈推荐使用多个管理节点。 客户端1. 标准MySQL客户端NDB集群可以与用PHP、Perl、C、C++、Java、Python、Ruby等编写的现有MySQL应用程序一起使用。这样的客户端应用程序发送SQL语句并接收来自MySQL服务器的响应,它们充当NDB集群SQL节点,就像它们与独立的MySQL服务器交互一样。例如,使用Connector/J 5.0.6和更高版本的Java客户端可以使用jdbc:mysql:loadbalance://url以透明地实现负载平衡。 2. NDB客户端客户端程序可以使用NDB API(一个高层次的C++ API,NDBCLUSTER存储引擎)直接访问NDB集群数据,绕过任何可能连接到集群的MySQL服务器。 3. 管理客户端这些客户端连接到管理服务器,并提供启动和停止节点的命令,启动和停止消息追踪(仅调试版本),显示节点版本和状态,启动和停止备份,等等。这种类型的程序的一个例子是ndbmgm管理客户端提供的NDB集群。
二. 实战概述 1.背景 高可用性:主服务器故障后可自动切换到后备服务器
综合考虑,决定采用MySQL Fabric和MySQL Cluster方案,以及另外一种较成熟的集群方案Galera Cluster进行预研。 2.MySQLCluster MySQL Cluster 是MySQL 官方集群部署方案,它的历史较久。支持通过自动分片支持读写扩展,通过实时备份冗余数据,是可用性最高的方案,声称可做到99.999%的可用性。 架构及实现原理:
MySQL cluster主要由三种类型的服务组成: NDB Management Server:管理服务器主要用于管理cluster中的其他类型节点(Data Node和SQL Node),通过它可以配置Node信息,启动和停止Node。
对需要进行分片的表需要修改引擎Innodb为NDB,不需要分片的可以不修改。 3.MySQL Fabric 为了实现和方便管理MySQL 分片以及实现高可用部署,Oracle在2014年5月推出了一套为各方寄予厚望的MySQL产品 -- MySQL Fabric, 用来管理MySQL 服务,提供扩展性和容易使用的系统,Fabric当前实现了两个特性:高可用和使用数据分片实现可扩展性和负载均衡,这两个特性能单独使用或结合使用。 MySQL Fabric 使用了一系列的python脚本实现。 应用案例:由于该方案在去年才推出,目前在网上暂时没搜索到有大公司的应用案例。 架构及实现原理: Fabric支持实现高可用性的架构图如下: Fabric使用HA组实现高可用性,其中一台是主服务器,其他是备份服务器, 备份服务器通过同步复制实现数据冗余。应用程序使用特定的驱动,连接到Fabric 的Connector组件,当主服务器发生故障后,Connector自动升级其中一个备份服务器为主服务器,应用程序无需修改。 Fabric支持可扩展性及负载均衡的架构如下:
使用多个HA 组实现分片,每个组之间分担不同的分片数据(组内的数据是冗余的,这个在高可用性中已经提到) 缺点及限制: 自增长键不能作为分片的键;
测试高可用性 服务器架构:
首先,创建高可用组,例如组名group_id-1,命令: mysqlfabric group create group_id-1 往组内group_id-1添加机器200.200.168.25和200.200.168.23: mysqlfabric group add group_id-1 200.200.168.25:3306 mysqlfabric group add group_id-1 200.200.168.23:3306 然后查看组内机器状态:
由于未设置主服务器,两个服务的状态都是SECONDARY
设置成主服务器的服务已经变成Primary。
可以看到它的主服务器已经指向23
然后查看状态:
可以看到,这时将25自动提升为主服务器。
可见主服务器当然立即得到更新。 查看备份服务器的数据条数:
但备份服务器等待了1-2分钟才同步完成(可以看到fabric使用的是异步复制,这是默认方式,性能较好,主服务器不用等待备份服务器返回,但同步速度较慢)
使用半同步加强数据一致性:异步复制能提供较好的性能,但主库只是把binlog日志发送给从库,动作就结束了,不会验证从库是否接收完毕,风险较高。半同步复制会在发送给从库后,等待从库发送确认信息后才返回。 稳定性测试:
里面提到:当主服务器当机时,我们的应用程序虽然是不需做任何修改的,但在主服务器被备份服务器替换前,某些事务会丢失,这些可以作为正常的mysql错误来处理。 数据完整性校验:
可以看到在插入1059条记录后被停止了。 现在看看备份服务器的记录数是多少,看看在主服务器当机后是否所有数据都能同步过来
大约经过了几十秒,才同步完,数据虽然不是立即同步过来,但没有丢失。 1.2、分片:如何支持可扩展性和负载均衡 fabric分片简介:当一台机器或一个组承受不了服务压力后,可以添加服务器分摊读写压力,通过Fabirc的分片功能可以将某些表中数据分散存储到不同服务器。我们可以设定分配数据存储的规则,通过在表中设置分片key设置分配的规则。另外,有些表的数据可能并不需要分片存储,需要将整张表存储在同一个服务器中,可以将设置一个全局组(Global Group)用于存储这些数据,存储到全局组的数据会自动拷贝到其他所有的分片组中。
Galera Cluster号称是世界上最先进的开源数据库集群方案
主要优点及特性: 真正的多主服务模式:多个服务能同时被读写,不像Fabric那样某些服务只能作备份用
Replication方式是通过启动复制线程从主服务器上拷贝更新日志,让后传送到备份服务器上执行,这种方式存在事务丢失及同步不及时的风险。Fabric以及传统的主从复制都是使用这种实现方式。 而Galera则采用以下架构保证事务在所有机器的一致性:
客户端通过Galera Load Balancer访问数据库,提交的每个事务都会通过wsrep API 在所有服务器中执行,要不所有服务器都执行成功,要不就所有都回滚,保证所有服务的数据一致性,而且所有服务器同步实时更新。
由于同一个事务需要在集群的多台机器上执行,因此网络传输及并发执行会导致性能上有一定的消耗。 目前基于Galera Cluster的实现方案有三种:Galera Cluster for MySQL、Percona XtraDB Cluster、MariaDB Galera Cluster。
4.1、测试数据同步 在机器24上创建一个表:
立即在25 中查看,可见已被同步创建
使用Java代码在24服务器上插入100条记录
立即在25服务器上查看记录数
可见数据同步是立即生效的。 4.2、测试添加集群节点 现在为了测试,先将其中一个节点服务停止:
然后使用java代码在集群上插入100W数据
查看100w数据的数据库大小:
这时启动另外一个节点,启动时即会自动同步集群的数据:
启动只需20秒左右,查看数据大小一致,查看表记录数,也已经同步过来
5.对比总结 6.实践应用
7.参考文档 MySQL各种集群解决方案的对比:https://www./blog/high-availability-database-tools Percona XtraDB Cluster 搭配 HAProxy:http:///detail/47688-percona-xtradb-cluster MySQL Fabric : http://dev./doc/mysql-utilities/1.6/en/fabric.html MySQL Cluster: http://dev./tech-resources/articles/mysql-cluster-7.3.html Percona XtraDB Cluster: http://www. 功能 |
|