博客
关于我
PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案
阅读量:795 次
发布时间:2023-03-03

本文共 1601 字,大约阅读时间需要 5 分钟。

PostgreSQL 高可用性解决方案

前言

在 PostgreSQL 生态系统中,虽然没有官方支持的多主群集解决方案,但通过第三方工具和社区贡献,我们可以实现高可用性。高可用性是指数据库服务可用的时间长度,通常由企业自定义。冗余是高可用性的基础,确保在故障发生时系统仍能正常运行。然而,仅仅依赖冗余可能不足以满足高可用性的需求。持续恢复时间通常较长,但通过将备份和wal日志定期发送到应急服务器,我们可以实现快速恢复。例如,如果日志每隔1分钟发送一次,应急服务器将处于连续恢复状态,生产环境的恢复时间最多为1分钟。

備用数据库

备用数据库的核心思想是保留生产数据库的副本,确保在故障时可以快速恢复。备用数据库的分类可以从以下几个方面进行:

根据复制性质

  • 物理备用数据库:通过物理层面的磁盘块复制实现。
  • 逻辑备用数据库:通过流式传输数据更改实现。

根据事务同步性

  • 异步复制:可能会丢失数据,适用于不需要强一致性的场景。
  • 同步复制:确保数据一致性,主服务器提交操作等待备用服务器确认。

根据使用方式

  • 热备用:备用数据库不支持连接,通常用于读取只读操作。
  • 逻辑热备用:支持只读连接,但不具备独立的写能力。

集群

群集是一组协同工作的主机,集体被视为一个单一的主机。通过水平扩展,群集能够处理更多的工作量,并在节点故障时提供透明的服务。群集的实现可分为两种主要模型:

共享存储模型

所有节点共享相同的存储资源,确保数据一致性和高可用性。

不共享存储模型

每个节点独立维护自己的存储资源,适用于特定结构化的系统。

PostgreSQL 集群类型

分布式复制块设备(DRBD)

DRBD 是一个 Linux 内核模块,通过网络实现块设备的同步复制。它本身不负责故障转移或监控,因此需要结合 Corosync 和 Pacemaker 等工具来完成集群管理。

集群控制(ClusterControl)

ClusterControl 是一个无代理管理和自动化工具,专注于数据库集群的部署、监控和扩展。它支持多种技术堆栈,能够处理大多数数据库管理任务,例如故障转移、恢复和负载均衡。

红宝石(Rubyrep)

红宝石是一个异步复制解决方案,支持多主机和多平台复制,基于触发器实现。它不支持 DDL 操作,适用于简单的复制场景。

Pgpool II

Pgpool II 是一个在 PostgreSQL 客户端和服务器之间工作的中间件,提供连接池、复写、负载均衡、自动故障转移和并行查询功能。

Bucardo

Bucardo 是一个基于行的异步级联复制工具,使用触发器和自定义冲突解决方案。它支持多主机和多目标复制,适用于需要灵活复制政策的场景。

Postgres-XC

Postgres-XC 是一个开源项目,提供对称和透明的 PostgreSQL 集群解决方案。它支持写可伸缩性,适用于需要高并发写入的场景。

Citus

Citus 是一个内置高可用性功能的数据库,通过自动分片和复制实现水平扩展。如果任何节点不可用,Citus 会将查询自动重定向到其他节点,确保服务的透明性。

PostgresXL

PostgresXL 是一个无共享的多主群集解决方案,支持并行查询和全局事务一致性。它基于 PostgreSQL 9.5,适用于 OLTP、商业智能和混合工作负载场景。

结论

在选择适合的高可用性解决方案时,我们需要考虑以下关键因素:

  • 新产品风险:新产品可能存在未经充分测试的漏洞。
  • 停产风险:避免选择那些即将停止维护的产品。
  • 局限性:评估解决方案的功能和兼容性。
  • 许可费用:考虑开源和商业版本的成本差异。
  • 实现复杂性:避免过于复杂的实现可能带来的维护成本。
  • 安全性:确保选择的解决方案具有良好的安全性记录。

通过综合评估这些因素,我们可以选择最适合业务需求的高可用性解决方案,从而最大程度地减少系统故障对业务的影响。

转载地址:http://ssxfk.baihongyu.com/

你可能感兴趣的文章
Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
查看>>
Plotly:如何向烛台图添加交易量
查看>>
Plotly:如何在 plotly express 中找到趋势线的系数?
查看>>
Plotly:如何在桑基图中设置节点位置?
查看>>
Plotly:如何处理重叠的颜色条和图例?
查看>>
Plotly:如何手动设置 plotly express 散点图中点的颜色?
查看>>
Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
查看>>
Plotly:如何绘制累积的“步骤“;直方图?
查看>>
Quartz进一步学习与使用
查看>>
Plotly条形图-根据正/负值更改颜色-python
查看>>
PLSQL developer12安装图解
查看>>
PLSQL Developer调试 存储过程和触发器
查看>>
PLSQL window操作
查看>>
plsql 存储过程 测试
查看>>
plsql 安装后database下拉没有东西
查看>>
PLSQL_Oracle PLSQL内置函数大全(概念)
查看>>
PLSQL_案例优化系列_体验逻辑结构如何影响SQL优化(案例3)
查看>>
PLSQL中INDEX BY TABLE的 DELETE操作
查看>>
plsql学习笔记---plsql相关概念,以及基础结构
查看>>
plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
查看>>