背景
最近一场调查还是挺意外的,PostgreSQL超越MySQL成为最受欢迎的数据库。身边的客户也有不少开始采用PostgreSQL作为生产的数据库,同时大模型火热、常时记忆的需求,也催生了对向量数据库的需求,而PostgreSQL,众多原因让我不得不把目光投向了这款产品,准备写一篇系列文章介绍PostgreSQL的备份体系、高可用建设、混沌工程、监控体系等内容。
从网上了解到PostgreSQL用户众多、应用领域广泛、支持注入地理位置/向量等众多数据类型,当前我对PostgreSQL了解有限,暂时不在这些知识展开,感兴趣的人自行搜索。
备份体系
数据库内容的备份是为了确保数据的安全性和可恢复性。在数据损坏、误删除、系统故障或灾难性事件发生时,备份允许恢复关键数据,确保业务连续性,避免数据丢失和停机时间,同时满足合规性要求。备份还支持数据版本控制、性能优化和数据分析。因此,数据库备份是保护和管理重要数据的关键措施。主要根据过往经验,备份要在以下几个方面做好建设:
1、 异构备份:使用与当前数据运行环境不同的存储平台或者系统进行备份,例如:CDB产品使用COS产品作为冷备存储,COS产品使用CBS产品作为冷备存储。
2、 权限分离:线上数据和灾备数据(冷备数据)的运维权限需做分离,确保单人不能同时删除线上数据和备份数据;最佳实践:CDB回收冷备数据清理权限,由COS自身管理冷备的生命周期。
3、 定期删除故障演习,针对不同的产品构造不同的删除场景,验证恢复能力,输出报告和改造方案,并结合业务场景进行校验
4、 备份地域:根据数据紧要程度,可建立异地备份选项。避免同地的灾难事件影响数据安全性
5、 恢复能力:定期做恢复实验,验证数据的可用性及恢复应急能力。
6、 运营监控:备份是否正常执行,备份效率是否满足需要
混沌工程
混沌工程是一种实验方法,在生成环境引入故障来提升系统的韧性,对业务系统可用性稳定起到巨大作用,国外已有不少实践,现在国内也在探索采用。之前我写过一篇从方法论到实践的文章,供不熟悉混沌的人参考【万字长文】腾讯云新能源汽车客户-混沌工程实战-腾讯云开发者社区-腾讯云
调研了国内的ChaosBlade、ChaosMesh、ChaosMeta后,发现并没有直接在PostgreSQL上面注入故障的工具,同时 PostgreSQL 本身并没有专门用于故障注入的内置工具。
那具体如何实施呢?可以从日常生产上的故障场景出发,借助业务访问数据库的异常、承载数据库的IaaS异常,来模拟下面是一个思路表格:
故障场景 | 业务层 | IaaS层 |
---|---|---|
主从切换 | —— | 1、PostgreSQL集群主节点故障 |
部分请求错误 | 1、访问接口层面 | 1、PostgreSQL集群间网络异常 |
延迟 | 1、 借助istio等第三方工具,在访问接口层面,注入接口访问延迟 2、 借助chaosblade等工具,在java agent中注入jvm 虚拟机级别的延迟 | 1、 提升PostgreSQL底层资源高负载 2、 模拟微服务到PostgreSQL间网络延迟 |
高可用建设
高可用,主要是避免单点故障,对整个PostgreSQL的可用性造成影响,收集网上资料,主要有以下几种高可用方案
分类 | 方案 | 特点 | 优点 | 劣势 |
---|---|---|---|---|
软件 | 流复制 (Streaming Replication) | - 使用PostgreSQL内置的复制机制。- 主服务器将数据流式传输到一个或多个从服务器。- 异步复制- 适用于故障切换和负载均衡。 | - 内置于PostgreSQL,易于配置和管理。- 可用于故障切换和负载均衡。- 高性能。- 适用于同一版本的PostgreSQL。 | - 异步复制可能会导致数据延迟。- 从服务器不能用于读写分离。- 需要手动配置和监视。 |
逻辑复制 (Logical Replication) | - 使用PostgreSQL内置的逻辑复制机制。- 允许选择性复制特定表或数据库的更改。- 可跨版本复制。- 可用于数据仓库和数据集成。 | - 灵活的数据复制。- 跨版本兼容性。- 可用于数据仓库和数据集成。- 可用于多个PostgreSQL版本。 | - 配置较复杂。- 需要更多的管理和监视。- 逻辑复制通常比流复制慢。 | |
BDR (Bi-Directional Replication) | - 多主复制解决方案。- 允许多个PostgreSQL服务器之间的双向复制。- 可用于数据同步和负载均衡。 | - 双向数据同步。- 可用于负载均衡。- 可以用于多主架构。 | - 配置和管理复杂。- 可能需要更多的硬件资源。- 不适用于所有用例。 | |
硬件方案 | SAN是(Storage Area Network) | - 使用SAN技术将存储资源共享给多台服务器。- 数据存储在共享的存储设备上,多个服务器可以访问相同的数据。-通常通过双控制器和冗余电源实现高可用性存储设备。 | - 数据一致性:SAN提供了数据一致性和可靠性,可以避免数据损坏或丢失。- 高性能:SAN通常提供高性能存储,适用于高负载数据库工作负载。- 管理简单:SAN提供集中管理,可以轻松管理存储资源。- 可扩展性:可以轻松扩展存储容量,以适应不断增长的数据需求。 | - 单点故障:尽管SAN通常具有高可用性功能,但仍然存在单点故障的风险。- 成本高昂:SAN硬件和许可证费用可能很高。- 复杂性:配置和管理SAN可能需要专业知识,复杂性较高 |
DRBD(Distributed Replicated Block Device) | - DRBD是一种块设备复制技术,用于在两个节点之间实时复制块级数据。- DRBD可以配置为活动/备份模式,其中一个节点为主节点,另一个为备份节点。- 数据在主节点上写入后,会实时复制到备份节点。 | - 实时复制:DRBD提供实时数据复制,确保数据在主节点故障时不会丢失。- 自动故障切换:可以自动切换到备份节点,实现高可用性。- 相对较低的成本:相对于一些高端SAN解决方案,DRBD可能成本较低。- 简化管理:相对于一些复杂的存储解决方案,DRBD的配置和管理可能较为简单。 | - 限制于块级复制:DRBD是块级复制,不支持更高级别的数据库复制或故障切换。- 对网络要求高:DRBD需要低延迟和高可靠性的网络连接。- 配置和管理复杂性:虽然相对较简单,但仍需要配置和管理。 |
监控体系
数据库作为业务系统的关键组件,完善的监控体系,对数据库稳定运行、故障定位、恢复都具有至关紧要的作用。参考云产品MySQL的监控体系,后面准备从以下几个方面做监控建设:
分类 | 监控工具 | 对标云MySQL监控 |
---|---|---|
图形化监控 | Prometheus、Grafana | 云监控 |
性能监控 | pg_stat_statements | dbbrain |
配置管理 | pgAdmin | 控制台配置管理命令 |
总结
本文是一个开篇性的文章,先把技术领域、范围划出来,后面会结合实际案例,对每部分做深入探讨和实践。
我正在参与 腾讯云开发者社区数据库专题有奖征文
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表