巨杉Tech|SequoiaDB 巨杉数据库高可用容灾测试

数据库的高可用是指最大程度地为用户提供服务,避免服务器宕机等故障带来的服务中断。数据库的高可用性不仅仅体现在数据库能否持续提供服务,而且也体现在能否保证数据的一致性。

SequoiaDB 巨杉数据库作为一款100%兼容 MySQL 的国产开源分布式数据库,它在高可用方面的表现如何?它的高可用性是如何实现的?本文将详细描述SequoiaDB巨杉数据库的高可用性原理,并进行测试验证。

01 巨杉分布式集群架构

SequoiaDB 巨杉数据库采用计算与存储分离架构,SequoiaSQL-MySQL 是 SQL 计算层,存储层由协调节点、编目节点和数据节点组成。


图1 SequoiaDB分布式架构

如图1所示是最简单的 SequoiaDB 分布式数据库集群架构图,由1个协调节点,1个编目节点,3个数据节点和 SequoiaSQL-MySQL 构成。其中数据节点在三个服务器上,包括三个数据复制组1、2、3,每个数据复制组由3个完全相同的数据副本组成,数据副本之间通过日志同步保持数据一致。

A, A1, A2组成数据复制组1,三者是完全相同数据副本。数据复制组2、3类似于数据复制组1。在 SequoiaDB 分布式集群中,每个复制组最多支持 7 个数据副本。

本文的高可用测试环境采用图1所示的分布式集群架构,其中主节点有读写功能,两个备副本可以执行读操作或备份。

02 巨杉数据库高可用实现

SequoiaDB 高可用采用 Raft 算法实现,多副本之间通过日志同步保持数据一致性。

图2 三个节点之间保持连接

如图2所示,SequoiaDB 集群三个副本之间通过心跳保持连接。

数据组副本之间通过共享心跳信息 sharing-beat 进行状态共享。如图3所示,sharing-beat 心跳信息结构包括心跳 ID、自身开始LSN、自身终止LSN、时间戳、数据组版本号、自身当前的角色和同步状态。

图3 心跳状态信息结构

每个节点都维护一张 status-sharing table 表,用来记录节点状态。sharing-beat 每2秒发送一次,采集应答信息,若连续N秒未收到应答信息,则认为节点宕机。

集群中只有一个节点作为主节点,其他节点为备节点。如果出现多主或者双主,需要根据 LSN 对比进行降备,保证集群中只有一个主节点。

Note:

1)当主节点宕机时,需要从备节点中选举出一个新的节点作为新的主节点。 

2)当备节点宕机时,主节点不受影响,等备节点恢复后,通过日志同步继续与主节点保持数据一致即可。

下面介绍当主节点宕机时,选举新主节点的过程。

选举条件

满足下面2个条件可以被选举成为主节点:

  1. 多数备节点投票通过
  2. 该节点LSN最大

选举过程

1)当主节点A宕机时,A自动降为备节点,关闭协调节点的业务连接。

图4 集群中主节点挂掉

2)A1和A2都会判断自身是否具备升为主节点的条件,若符合即发起选举请求。

条件内容:

自己不是主节点

剩下的备节点占半数以上

自己的LSN比其它备节点的LSN新

3)其它备节点会把被投票节点的 LSN 与自己的 LSN 做对比,若比自己的 LSN 新,则投赞成票,否则投反对票。

4)若赞成票超过(n/2+1),则支持该节点为主节点,选举成功。否则保持备节点角色,选举失败。

5)选举成功后,通过心跳状态信息共享数据组信息给其它节点。

03 高可用容灾验证

一般分布式数据库 POC 测试包含功能测试、性能测试、分布式事务测试、高可用容灾测试和兼容性测试等。下面将对 SequoiaDB 巨杉数据库的高可用性进行验证测试。

测试环境说明

本文测试环境采用分布式集群,包含1个 SequoiaSQL-MySQL,3个数据节点,1个编目节点,1个协调节点,搭建集群方式具体可参考巨杉官网虚拟机镜像搭建教程。在 kill 掉主节点进程之后,我们对分布式数据库集群进行读写操作,来验证高可用性。

查看服务器集群状态

# service sdbcm status
.....
Main PID: 803 (sdbcm)
Tasks: 205 (limit: 2319)
CGroup: /system.slice/sdbcm.service
├─ 779 sdbcmd
├─ 803 sdbcm(11790)
├─1166 sequoiadb(11840) D
├─1169 sequoiadb(11810) S
├─1172 sequoiadb(11830) D
├─1175 sdbom(11780)
├─1178 sequoiadb(11820) D
├─1181 sequoiadb(11800) C
1369 /opt/sequoiadb/plugins/SequoiaSQL/bin/../../../java/jdk/bin/java -jar /opt/sequoiadb/plugins/SequoiaSQL
.....

SequoiaDB 分布式集群中数据节点端口在11820,11830,11840;编目节点11800,协调节点在11810

[email protected]:~$ ps -ef|grep sequoiadb
sdbadmin 1166 1 0 Aug20 ? 00:02:23 sequoiadb(11840) D
sdbadmin 1169 1 0 Aug20 ? 00:01:43 sequoiadb(11810) S
sdbadmin 1172 1 0 Aug20 ? 00:02:24 sequoiadb(11830) D
sdbadmin 1178 1 0 Aug20 ? 00:02:33 sequoiadb(11820) D
sdbadmin 1181 1 0 Aug20 ? 00:04:01 sequoiadb(11800) C

kill 掉11820的主节点,执行查询和写入sql

[email protected]:~$ kill 1178
[email protected]:~$ ps -ef|grep sequoiadb
sdbadmin 1166 1 0 Aug20 ? 00:02:24 sequoiadb(11840) D
sdbadmin 1169 1 0 Aug20 ? 00:01:43 sequoiadb(11810) S
sdbadmin 1172 1 0 Aug20 ? 00:02:24 sequoiadb(11830) D
sdbadmin 1181 1 0 Aug20 ? 00:04:01 sequoiadb(11800) C
sdbadmin 1369 1 0 Aug20 ? 00:01:33 /opt/sequoiadb
....

执行查看 sql,查看插入操作之前数据为121

mysql> select * from news.user_info;
+------+-----------+
| id | unickname |
+------+-----------+
| 1 | test1 |
........
| 119 | test119 |
| 120 | test120 |
| 121 | test121 |
+------+-----------+
121 rows in set (0.01 sec)

执行写入 sql,查看插入是否成功

mysql> insert into news.user_info(id,unickname)values(122,"s
uccess");
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from news.user_info;
+------+-----------+
| id | unickname |
+------+-----------+
| 1 | test1 |
.........
| 120 | test120 |
| 121 | test121 |
| 122 | success |
+------+-----------+
122 rows in set (0.00 sec)

数据(122, “success”)数据插入成功,在其中一个主节点挂掉情况下,读写都没有受到影响,数据读写保持一致,高可用性得到验证。

现在执行导入1000w数据写入脚本 imprt.sh,在执行过程中 kill 掉主数据节点,模拟主节点故障场景,在巨杉数据库图形化监控界面 SAC 上查看集群读写变化。

Note: 

如果需要获取 imprt.sh 脚本,关注“巨杉数据库”公众号回复 “imprt” 即可获取。

执行导入数据脚本

./imprt.sh 协调节点主机 协调节点端? 次数
./imprt.sh 192.168.1.122 11810 100

如图5所示,在执行导入数据时刻,kill 掉主数据节点,insert 写入下降,之后集群恢复高可用


图5 SAC监控界面集群读写变化示意图


图6 SAC查看tpcc写入数据量示意图

从 SAC 可视化界面中可以看到,当主数据节点在我们执行插入1000w数据操作的过程中出现故障,数据读写受到影响的持续时间很短。最后通过使用 imprt.sh 脚本重新导入插入失败的数据,则可以保证数据最终一致性。

04 总结

SequoiaDB 分布式集群具备较好的高可用性,集群可以设置多个数据复制组,每个数据复制组由多个完全相同的副本构成,副本之间通过 Raft 算法和日志同步方式保持数据一致性。最后,本文也验证了在执行千万级数据写操作时,若集群主数据节点宕机,分布式集群可以正常读写数据,并且数据保持最终一致,高可用性得到验证。

原文地址:https://blog.51cto.com/13722387/2433253

时间: 2024-11-10 14:49:07

巨杉Tech|SequoiaDB 巨杉数据库高可用容灾测试的相关文章

让Veritas数据高可用容灾释放你的双手

简介:在大数据以PB增长的时代,保证数据高可用的同时,确保数据安全已经成为企业IT领导者及数据管理人员所急迫需解决的问题,Veritas深入地了解用户的各种存储需求,从而实现了简单.高效.可扩展.高敏捷.高洞察力的全线存储备份容灾解决方案.而为保证产品的高度兼容性,为此Veritas不断提升与精进,从而汇集了得天独厚的优势,实现了统一的混合云平台管理.成熟的企业级数据可伸缩性.超乎想象的即时数据恢复与自动复制.全索引直观数据检索等等,为几乎所有的企业数据环境提供了端到端的数据可用性解决方案.下面

数据库高可用架构 转载

数据库高可用架构对于我们这些应用端开发的人来说是一个比较陌生的领域,是在具体的数据库产品之上搭建的环境,需要像DBA这样对数据库产品有足够的了解才能有所涉及,虽然不能深入其中,但可以通过一些经典的高可用架构学习其中的思想.就我所了解到的有以下几种: MySQL Replication MySQL Cluster Oracle RAC IBM HACMP Oracle ASM MySQL Replication MySQL Replication就是通过异步复制多个copy以达到提高可用性的目的,

mysql数据库高可用架构-----MHA-0.56的详解

大家都知道,任何线上环境,都必须搭载高可用架构,是web的,也要是数据库的,严格来说更是整个架构的高可用. mysql作为时下比较热的数据库,高可用架构更加需求大.不过,以前老旧那一套已经不合时宜,现在用的比较多的就是MHA和PXC了. PXC的优势是做到同写同回滚,达到数据高度一致性,通过一些程序和代码来做第三方分发,可以做到一定程度的读写分离,是个相当不错的高可用解决方案,不过对网络要求比较高,配置也略复杂一些,最好是同一个机房里面做,不过这并不是本文重点,后面找时间再写相关的文章. 本文要

数据库高可用方案

数据库高可用方案 低读低写并发.低数据量方案 方案一:双机高可用方案 1.数据库架构图 2.特点 一台机器A作为读写库,另一台B作为备份库:A库故障后B库作为读写库:A库恢复后A作为备库. 3.开发说明 此种情况下,数据源配置中的数据库IP地址,可采用虚拟的IP地址.虚拟IP地址由两台数据库机器上的keepalive配置,并互相检测心跳.当其中一台故障后,虚拟IP地址会自动漂移到另外一台正常的库上. 数据库的主备配置.故障排除和数据补全,需要DBA和运维人员来维护.而程序代码或配置并不需要修改.

数据库高可用实战案例-------架构优化之清爽一夏

说到高可用,看官们会想到很多方案,也许是自亲身经历过系统从单机变成高可用的痛苦过程,也许有的看官只是在自己的虚机上搭建过测试的玩具.今天本篇用我自己的真实经历给大家讲述,不管怎么样实战和测试玩耍还是很大的区别的!可能你觉得搭建一套高可用方案很简单,配置配置就OK了,但在真正的复杂系统中一切就没有那么轻松了! 文章主要讲述升级并搭建AlwaysOn高可用的过程,以实施的思路为主.文中并没有搭建集群的步骤,搭建步骤请自行学习. --------------博客地址------------------

数据库高可用方案总结

数据库高可用的两个关键: 1,数据同步 2,用于切换 数据库同步方案: Tungsten OGG Galera DRBD 应用切换方案: DRDB+heartbeat DB+Keepalived Corosync+Pacemaker_DRBD 搜索 复制

MySQL数据库高可用快速实施方案

Note:以下为MySQL+DRBD+HEARTBEAT快速实施文档,若要用于生产环境,请仔细阅读官方文档并结合实际业务调整参数,涉及数据部署请慎重!!! (个人建议:在基于个人熟悉服务的情况下并通过测试环境才可在线上使用.) 数据库高可用 MySQL+DRBD+HEARTBEAT实施方案 环境: mysql-5.5.49 heartbeat-3.0.4-2.el6.x86_64 drbd84-utils-8.9.8-1.el6.elrepo.x86_64 CentOS release 6.7

(转)Oracle与DB2在数据库高可用技术上的相同与差异探讨

原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳定性.要想将这个工作做好,我们必须从其底层原理.机制.架构等方面进行深入了解,深入分析,深入对比才能知道我们应该如何去实践.下面的几个关键点,不仅仅是每一个DBA应该琢磨的事情,同时也是搞企业IT架构规划和建设的人必须了解和知道的事情. 下面总结了一些Oracle与DB2在数据库高可用技术上的相同与

美团点评数据库高可用架构的演进与设想

本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM 在2015年之前,美团点评(点评侧)长期使用MMM(Master-Master replication manager for MySQL)做数据库高可用,积累了比较多的经验,也踩了不少坑,可以说MMM在公司数据库高速发展过程中起到了很大的作用. MMM的架构如下. 如上所示,整个MySQL集群提