YMatrix 5.0 故障自动转移功能新实现,运维更方便!

news2024/11/24 5:35:01

前言

分布式数据库一般都实现了数据多副本的存储以保证数据的高可用性。在多副本存储的基础上,通过切换活跃的存储副本来实现故障转移,是常见的做法。

YMatrix 5.0 实现了在数据库集群所有数据分片上的故障自动转移,完全实现了数据库集群的故障自动转移功能。这使得数据库运维操作自动化程度更高,数据库管理员的手工操作更少,为数据库运维提供了更多的便利。

作者:数据库内核研发工程师 杨旭东

Greenplum 故障自动转移功能的实现

1.1 数据分片和故障转移

YMatrix 5.0 的存储分布式设计来源于 Greenplum。这种设计通过将用户数据按照一定的分布规则(如哈希分布,随机分布等)分片并将其存储到相应的 PostgreSQL 数据库实例中实现了其分布式的功能,又通过为分片对应的 PostgreSQL 数据库实例设置使用流复制方式备份的 PostgreSQL 后备实例这一方法实现了数据的多副本存储。

  • 数据分片

  • PostgreSQL 流复制到后备实例

当活跃的 PostgreSQL 数据库实例出现故障时,通过切换到其对应的 PostgreSQL 后备实例的方式实现了故障转移。

1.2 数据元信息分片 master 和 FTS

在 Greenplum 的实现中,在用户数据之外,设置了一个新的用于存储数据元信息的分片 master 用以管理整个数据库集群。在存储 master 数据的 PostgreSQL 数据库实例中添加了 FTS (Fault Tolerent Server) 服务来存储和管理整个数据库集群的所有 PostgreSQL 数据库实例的运行状态,实现了所有存储用户数据分片的 PostgreSQL 数据库实例的故障自动转移。

虽然 master 数据库实例同样可以设置一个 PostgreSQL 后备实例 ( standby ) 来实现该数据分片的数据多副本存储(其中同样包含一个后备的 FTS 服务),但是由于 FTS 服务是 master 数据库实例的一部分,它并不能提供本身数据分片的故障自动转移。当 master 的 PostgreSQL 数据库实例因为故障而不能工作时,需要数据库管理员手动通过 gpactivatestandby 命令激活其后备实例来实现该数据分片的故障转移。

YMatrix 5.0 故障自动转移功能的实现

YMatrix 5.0 彻底移除了 FTS 的实现,并引入了新的数据库集群组件 (etcd 和集群状态管理组件,包括 cluster 服务、shard 服务、replication 服务等) 来实现完全的故障自动转移功能。

2.1 高可用存储 etcd

YMatrix 5.0 引入了 etcd 组件用来存储和管理集群的定义和状态等关键信息,实现了这些信息的高可靠性和强一致性。关于 etcd 的详细信息,请参见其文档。

2.2 集群状态管理服务

YMatrix 5.0 用新的集群状态管理服务替换了 Greenplum 的 FTS 服务功能。这些服务不再属于 PostgreSQL 数据库实例,而是单独实现的服务组件。同时这些服务也实现了多副本的高可用机制,以防止单个服务实例异常停止引起数据库集群不可用。

2.3 用 etcd 来存储和管理 postgresql 数据库实例运行状态

在引入 etcd 后,原来由 FTS 管理并存储在 master 数据分片中的整个集群的 PostgreSQL 实例的运行状态信息被集群状态管理服务管理并存储在 etcd 数据库中。 master 数据分片中使用的这些状态信息改为从 etcd 中读取。

这样的改动使得包括 master 数据分片在内的所有 PostgreSQL 数据库实例状态信息都从 master 数据分片移除。集群状态管理服务可以实现 master 和 standby 所在数据分片的故障自动转移。

2.4 数据库客户端连接的故障自动转移

用户的数据库客户端(管理终端或者数据库应用等)要使用 YMatrix 5.0 的故障自动转移功能,需要配置客户端连接字符串同时包含 master 和 standby 的主机信息。详情请参见 YMatrix 5.0 的文档。

验证 YMatrix 5.0 新的故障自动转移功能的正确性

为了验证 YMatrix 5.0 完全实现了故障自动转移功能,研发团队基于混沌工程原则设计并实现了一整套自动化的测试来验证 YMatrix 5.0 数据库集群的故障自动转移和故障恢复行为。

这一套测试包括了如下内容:

3.1 设置稳态:

被测试的数据库集群被配置为完全高可用的集群,同时加上一定的工作负载。数据库集群在此状态下的稳定工作行为被认为是稳态。

3.2 模拟各种各样的故障:

  • 数据库集群内的任意组件(etcd 实例、集群状态管理服务实例、 PostgreSQL 数据库实例等)被杀死或崩溃;

  • 运行数据库集群的服务器机器集群的任意机器崩溃或断电;

  • 数据库集群所在的网络出现网络分区等故障。

3.3 持续的自动运行:

  • 数据库集群在被随机注入各种模拟故障之后,能够进行故障自动转移并能够保持对外服务的状态;

  • 在监测到数据库的故障自动转移行为后,保持模拟故障发生状态一段时间后使模拟故障恢复。之后再使用 YMatrix 5.0 的恢复工具恢复数据库集群状态至完全高可用。

在正式发布 YMatrix 5.0 之前,研发团队对用预发布版本部署的数据库集群进行了持续两周,超过 1200 次故障注入的测试。该集群保持了持续服务可用的状态直到测试结束。这样的持续测试结果验证了 YMatrix 5.0 的故障自动转移功能能够保证数据库集群在一些组件遇到故障时能持续对外服务的高可用性。

Master 数据分片故障自动转移的演示

下面展示在一个 YMatrix 5.0 数据库集群运行过程中,当 master 数据分片的 PostgreSQL 数据库实例出现故障异常终止时,该集群依然能正常服务的例子。

4.1 用于演示的集群信息

这个展示的数据库集群运行在 AWS 上,其各个主机状态如下

4.1.1  Master

  • 所在主机: 10.0.138.11 

  • 监听端口: 5432 

4.1.2  Standby

  • 所在主机: 10.0.65.204 

  • 监听端口: 5432 

4.1.3  4 个数据分片主机,每个主机上运行一个数据分片的 primary 实例和另一个数据分片的 mirror 实例。

  •  10.0.165.185 

  •  10.0.163.92 

  •  10.0.74.8 

  •  10.0.111.252 

其 gp_segment_configuration 表的内容如下:

postgres=# select * from gp_segment_configuration order by content, dbid;
 dbid | content | role | preferred_role | mode | status | port |                    hostname                     |                     address                     |                datadir
------+---------+------+----------------+------+--------+------+-------------------------------------------------+-------------------------------------------------+----------------------------------------
    1 |      -1 | p    | p              | s    | u      | 5432 | ip-10-0-138-111.cn-northwest-1.compute.internal | ip-10-0-138-111.cn-northwest-1.compute.internal | /mxdata_20230419053537/master/mxseg-1
   10 |      -1 | m    | m              | s    | u      | 5432 | ip-10-0-65-204.cn-northwest-1.compute.internal  | ip-10-0-65-204.cn-northwest-1.compute.internal  | /mxdata_20230419053537/standby/mxseg-1
    4 |       0 | p    | p              | s    | u      | 6000 | ip-10-0-74-8.cn-northwest-1.compute.internal    | ip-10-0-74-8.cn-northwest-1.compute.internal    | /mxdata_20230419053537/primary/mxseg0
    8 |       0 | m    | m              | s    | u      | 7000 | ip-10-0-163-92.cn-northwest-1.compute.internal  | ip-10-0-163-92.cn-northwest-1.compute.internal  | /mxdata_20230419053537/mirror/mxseg0
    5 |       1 | p    | p              | s    | u      | 6000 | ip-10-0-111-252.cn-northwest-1.compute.internal | ip-10-0-111-252.cn-northwest-1.compute.internal | /mxdata_20230419053537/primary/mxseg1
    9 |       1 | m    | m              | s    | u      | 7000 | ip-10-0-165-185.cn-northwest-1.compute.internal | ip-10-0-165-185.cn-northwest-1.compute.internal | /mxdata_20230419053537/mirror/mxseg1
    3 |       2 | p    | p              | s    | u      | 6000 | ip-10-0-163-92.cn-northwest-1.compute.internal  | ip-10-0-163-92.cn-northwest-1.compute.internal  | /mxdata_20230419053537/primary/mxseg2
    7 |       2 | m    | m              | s    | u      | 7000 | ip-10-0-74-8.cn-northwest-1.compute.internal    | ip-10-0-74-8.cn-northwest-1.compute.internal    | /mxdata_20230419053537/mirror/mxseg2
    2 |       3 | p    | p              | s    | u      | 6000 | ip-10-0-165-185.cn-northwest-1.compute.internal | ip-10-0-165-185.cn-northwest-1.compute.internal | /mxdata_20230419053537/primary/mxseg3
    6 |       3 | m    | m              | s    | u      | 7000 | ip-10-0-111-252.cn-northwest-1.compute.internal | ip-10-0-111-252.cn-northwest-1.compute.internal | /mxdata_20230419053537/mirror/mxseg3
(10 rows)

4.2 演示过程

用 psql 使用连接多个主机的连接字符串连接到数据库集群,并持续(间隔 1 秒)向一个表中插入一行数据。

  • 表的定义如下:

CREATE TABLE demo_auto_failover(
    insert_id SERIAL PRIMARY KEY, -- 表的主键
    ts TIMESTAMP WITH TIME ZONE,  -- 插入该行的时间戳
    connected_host INET           -- 当前 psql 连接的数据库实例主机的 IP 地址
) DISTRIBUTED BY (insert_id);
  • 插入的 SQL 如下:

INSERT INTO demo_auto_failover(ts, connected_host) SELECT now() AS ts, inet_server_addr() AS connected_host;

在使用 psql 持续插入数据的同时,将 master  PostgreSQL 实例杀死, YMatrix 5.0 数据库集群会发生 master 故障自动转移,psql 插入数据的连接会自动切换 standby 上。会观察到 demo_auto_failover 表中 connected_host 列的值在发生故障自动转移时从 master 所在主机的 IP 地址变成了 standby 主机的 IP 地址。这表明故障自动转移已经成功完成, standby 接替了 master 提供数据库集群对客户端的服务。

4.3 演示中用于持续插入数据的 expect 脚本

https://pastebin.com/u94NYCcL

4.4 演示视频

结论和展望

关于 YMatrix 5.0 的故障自动转移和恢复的功能介绍,请参见 YMatrix 5.0 的文档。在 5.0 的实现中,发生故障自动转移之后的数据库集群虽然依旧能对外提供服务,但仍需要数据库管理员在合适的时机使用 mxrecover 工具对数据库进行恢复,以使其重新进入高可用的状态。未来我们的研发团队将继续优化产品,提供更多自动化的故障恢复功能,进一步减轻数据库管理员手工运维的负担。


 本文为 YMatrix 原创内容,未经允许不得转载。

欲了解更多超融合时序数据库相关信息,请访问 YMatrix 超融合数据库” 官方网站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文带你深入了解分布式数据的复制原理!!

在分布式数据系统中,复制是一种重要的能力。简单来说,复制就是将数据的副本存储在多个位置,通常是在不同的服务器或节点上。这样做有几个关键的优点: 使得数据与用户在地理上接近(从而减少延迟)&#xff0…

渗透测试--3.1嗅探欺骗攻击

目录 1.中间人攻击 2. 社会工程学攻击 SET使用实例——建立克隆钓鱼网站收集目标凭证 SET工具集之木马欺骗实战反弹链接 后渗透阶段 钓鱼邮件 总结 1.中间人攻击 中间人攻击(Man-in-the-middle attack,简称MITM)是一种常见的网络攻击…

一文带你完整了解数据的编码!!

数据编码是将数据转换为计算机可读取和处理的二进制格式的过程。在数据存储中,正确的数据编码非常重要,因为它能够保证数据的完整性、可靠性和可读性。 数据编码可以确保数据在存储过程中不会发生错误。通过使用适当的数据编码规则,可以防止…

三十二、自定义镜像

1 、Docker镜像的原理 Docker镜像本质是什么? Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G? Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有10多MB? 操作系统组成部分: 计算机组成原理 进程调度子…

OPPO 关停“造芯”业务 ZEKU:一场大胆的尝试的结束

前言 近期,OPPO 关停了其“造芯”业务 ZEKU,结束了其自主研发处理器的尝试。本文将对这一事件进行探讨,分析其背后的原因及其对整个行业的影响。 1. ZEKU的成立与使命 在2019年,OPPO旗下的ZEKU研究所成立,标志着OPP…

Redis缓存穿透、缓存雪崩和缓存击穿

缓存穿透 缓存穿透,是指查询一个缓存和数据库中都没有的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库…

Centos和Windows之间通过主机名实现相互访问

一、业务需求 在内网环境中,我们想直接通过特定的主机名称去访问我们的服务器,而不用去记忆服务器的IP地址,且不想通过nginx等代理工具或域名配置内容来操作。 二、分析 通常我们可以直接在浏览器中输入【localhost】后按下回车键后就可以访问我们的主机80端口的内容了;那…

计算机网络大作业(Wireshark抓包分析)

实验要求 wireshark的深入学习与掌握,如过滤器的使用,归纳方法通过实验阐述ARP的工作原理利用实验结果分析 ICMP 协议的报文结构字段定义基于实验数据深入分析 TCP 协议的连接过程原理,报文的分片等功能从校园网发起向外网中某 Web 服务器的…

基于正点原子电机实验的pid调试助手代码解析(速度环控制)

这里写目录标题 下位机与PID调试助手传输的原理代码讲解(基于正点原子)解析数据接受和数据发送的底层函数数据接受数据帧格式环形数组以及怎么找到它的帧头位置crc校验 数据发送数据上传函数 通过前两节文章,我已经了解了基本的pid算法,现在在完成了电机…

MatrixGate 5.0 性能再升级,加载速度提升三倍!

前言 数据的加载速度在数据处理和分析领域一直是一个挑战,为应对这一挑战,YMatrix 数据库开发了 mxgate 高速数据加载工具。最近,随着 YMatrix 5.0 的 GA,新版 mxgate 与上一版本(4.8.1)相比,速…

Linux 虚拟机 磁盘扩容

概述 在单台虚拟机上部署了过多服务,导致磁盘使用过度达到98%。 现在扩容提高磁盘容量,增加10G。 现象 df -h df -ih du -s具体步骤 VMware 扩容 关闭虚拟机的情况下执行,类似于生产环境下需要关闭服务器,从而添加硬盘等相关操作…

Liunx基础命令 - rm删除命令

rm命令 – 删除文件或目录 rm命令来自英文单词“remove”的缩写,中文译为“消除”,其功能是用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。 rm也是一个很危险的命令,使用的时候要特别…

从BinDiff到0day 在IE中利用CVE-2019-1208

前言 如上所述,CVE-2019-1208是UAF漏洞,这类安全漏洞可以破坏有效数据、引发进程crash、并且可以精心利用最终导致任意代码执行。而对于本文介绍的CVE-2019-1208而言,成功利用此漏洞的攻击者可以获得系统当前用户权限。如果当前用户具有admi…

理解Java虚拟机——JVM

目录 一、初识JVM 二、JVM执行流程 三、内存区域划分(JVM运行时数据区) 3.1 本地方法栈(线程私有) 3.2 程序计数器(线程私有,无并发问题) 3.3 JVM虚拟机栈(线程私有&#xff0…

最全的分布式事务详情,它来啰~

我们首先得理解什么是分布式事务呢?分布式事务是指在分布式系统中,涉及多个计算机或服务器的操作序列,这些操作需要满足一致性和可靠性的要求。每个操作要么全部成功执行,要么全部回滚,以保持数据的一致性和完整性。 …

嵌入式通信协议【Modbus】Modbus TCP的帧格式

一、请求帧格式 Client request:例: 19 B2 00 00 00 06 06 03 00 27 00 02 1、头字节 上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle); 19 B2 00 00 00 06 19 B2 00 00…

3D点云之语义分割(相关官方示例介绍)

之前在博客中提到,会考虑用深度学习来对3D点云进行处理,接下来迈出脚步,先整几个例子来熟悉它。例子原型来源于官网,博主在其基础上做了一些代码修改。 一. 例子参考 1. Keras中的资源 Code examples 2.openvinotoolkit open_…

20230515在亚马逊Amazon扣费之后的申诉

20230515在亚马逊Amazon扣费之后的申诉 2023/5/15 22:56 缘起:使用Amazon的12个月的免费存储桶,然后调用S3功能翻译! 但是,被扣费了! 由于绑定的信用卡是工行的,要求和亚马逊解除绑定,工行给了一…

第十章创建模式—外观模式

文章目录 外观模式解决的问题概念结构 案例优缺点使用场景Tomcat 源码 结构型模式描述如何将类或对象按某种布局组成更大的结构,有以下两种: 类结构型模式:采用继承机制来组织接口和类。对象结构型模式:釆用组合或聚合来组合对象。…

GEE:无监督聚类算法(wekaKMeans)

作者:CSDN @ _养乐多_ 本文将介绍如何使用 Google Earth Engine(GEE)进行卫星图像 K-means 聚类分析的基本步骤,并提供相应的示例代码。 结果如下图所示, 文章目录 一、K-means 原理二、代码详解三、代码链接一、K-means 原理 二、代码详解 var roi = table; Map.cent…