EDB博客

Postgres高可用性HA数据库集群计划策略中的次版本补丁

可以

修补策略

该博客是系列文章的一部分,该系列将讨论Postgres数据库的高可用性HA的最佳实践。在先前的博客中,我解释了高可用性的含义数据库高可用性的真正含义是什么未来的博客将探讨有关EDB Failover Manager EFM的流复制最佳参数的配置建议,以及如何使用EFM快速可靠地检测和管理数据库服务器故障。

该博客着重于最大程度地减少与数据库服务器软件维护相关的停机时间,并提供补丁。以下概述的技术利用EDB Failover Manager EFM帮助在对Postgres数据库集群进行补丁时最大程度地减少停机时间。所有建议均适用于PostgreSQL和EDB Postgres Advanced Server

我使用DBA一词来指定进行修补的人员,因为他知道在某些公司中DBA在其他公司中执行此任务,而SysAdmin负责为DevOps团队进行修补,或者使用Ansible Chef Puppet或Salt来实现完全自动化。

软件维护补丁计划

我们通常会看到软件维护的三个原因

  • 必须安装特定的补丁程序才能解决已知的软件问题
  • 新的次要版本提高了软件的总体稳定性和可靠性
  • 已确定安全问题,需要安装补丁来解决该问题

软件维护几乎总是意味着停机,并且如果未按最佳效率计划和执行应用程序,则可能严重影响应用程序的SLA

大多数IT部门都仔细计划维护活动,将操作系统和其他软件的数据库补丁捆绑在一起,并按精心计划的时间表执行维护,因为某些安全补丁可能需要立即引起注意,所以这并非总是可能的。PostgreSQL社区和EDB每季度发布一次较小的更新除非有紧急安全修复程序,否则我强烈建议尽快应用季度更新和高CVE安全补丁程序

如何为PostgreSQL数据库计划理想的维护

需要考虑两个方面

  1. 确定最佳维护时段
  2. 使窗口尽可能短

理想的维护时段与较低的系统使用率相对应。这需要详细了解使用模式。例如,在全球零售解决方案中,何时我们有最少的在线客户?也许是在周日上午的美国东部夏令时间,只有详细的分析才能表明DBA需要对使用模式有很好的了解,因为他们不能总是等待下一次计划的停机时间

可以应用许多不同的策略来最大程度地减少停机时间对于未在HA配置中群集的独立服务器,仅通过EDB Postgres修补就可以像在几秒钟内停止数据库服务并使用新的二进制文件启动Postgres服务一样简单,但是一种常见的做法是捆绑多个一起修补软件,这可以利用一个公共的维护窗口,但也可以使其更长

经常提出的解决方案换出磁盘上的Postgres二进制文件,然后进行快速重启。这听起来很吸引人,但有两个缺点

  1. 安全软件可能正在扫描磁盘和内存,并在磁盘上和内存中的映像不同时立即发出警报,这通常是恶意软件攻击的迹象
  2. 如果新会话从磁盘动态加载扩展库,则Postgres可能会崩溃,从而导致与内存中的旧Postgres代码不兼容。了解更多这里

该解决方案不适用于许多计划内的维护事件,因为这些事件通常包括需要重启的操作系统或代理升级

对于由主服务器和多个副本组成的关键任务系统,我们建议您采用其他方法。即使操作系统级别的其他维护操作使单个服务器停机了很长时间,以下描述的技术也将有助于最大程度地减少数据库服务的停机时间。

PostgreSQL数据库修补的策略是什么

DBA有三种策略

  1. 所有节点修补在“所有节点修补”策略中,DBA同时在所有节点上应用修补,然后同时带回所有计算机。可以使用Ansible或其他脚本解决方案来并行化此操作,并尝试在较短的时间范围内完成该过程。
  2. 滚动修补在这种策略中,DBA从备用服务器开始一次将修补程序应用到一台服务器上。修补了备用服务器后,DBA在主服务器上应用了修补程序,无需在主服务器和副本服务器之间进行切换
  3. 最小停机时间修补DBA首先修补副本,而不是修补主数据库,然后DBA首先执行从主数据库到更新副本之一的切换,并将连接重定向到新的主数据库。切换后,更新旧的主数据库并将其添加回集群中复制品

注意如果流复制群集中具有同步备用数据库,则可以通过修改以下参数并在EDB Postgres中重新加载将同步备用数据库更改为异步数据库
同步备用名称

应用补丁后,您可以通过更改上述参数并重新加载到EDB Postgres中,将BACK备用数据库从异步转换为同步数据库

修补属于HA群集的Postgres服务器

要修补属于HA群集的节点,我建议按照以下步骤进行操作

  1. 确保EDB Postgres故障转移管理器在efm属性文件主服务器关闭中将以下参数设置为false,作为false失败
  2. 按以下顺序正常关闭服务
    1. 关机efm代理e g systemctl停止edb efm
    2. 关闭EDB Postgres服务和systemctl将计算机停止为
  3. 使用yum或apt或Zypper命令应用补丁
  4. 按以下顺序提供服务
    1. 启动EDB Postgres数据库服务,例如systemctl start edb as
    2. 启动EDB故障转移管理器服务,例如systemctl启动edb efm

最后,使用上述任何一种方法,DBA都可以更新其系统,希望我的建议将帮助您维护SLA。

想更多地了解如何管理Postgres高可用性的故障转移和复制请点击这里

vibhor kumar enterprisedb com图片

维布尔·库玛(Vibhor Kumar)是首席性能架构师,在为客户设计创新业务解决方案方面具有多年领导经验,并领导EnterpriseDB的性能工程团队