实现数据库容灾和高可用性

摘要:如何在GitLab中还原意外删除的数据库? 我们如何实现数据库备份,恢复,容灾和高可用性? 如果您从事数据库行业,那么您最近可能会更担心这些问题。 去年年底,包括炉石数据丢失和MongoDB黑客勒索在内的事件突显了这一消息。 最近,另一个事件引起了人们的关注:rm -rf命令意外删除了GitLab数据库中的数据文件。

如何在GitLab中还原意外删除的数据库? 我们如何实现数据库备份,恢复,容灾和高可用性? 如果您从事数据库行业,那么您最近可能会更担心这些问题。 去年年底,包括炉石数据丢失和MongoDB黑客勒索在内的事件突显了这一消息。 最近,另一个事件引起了人们的关注:rm -rf命令意外删除了GitLab数据库中的数据文件。

数据库对任何企业都是至关重要的。 Web SQL注入和意外删除数据不仅损害业务,还可能导致用户信息泄漏。 许多公司意识到数据库安全性的重要性,并拥有专门的数据库管理员(DBA)进行数据维护。 DBA家族就像IT世界中的边境勇士一样,保护数据是DBA最重要的职责之一。 但是,尽管DBA采取了许多有效措施,但事故确实发生了。 有时,太多的操作界面和服务之间频繁的来回切换可能会导致人为错误率上升。

即使意外删除后,如何确保数据文件的安全性?

多份副本–高可用性(HA)保证意外删除

在许多传统企业中,实现HA的常见方法是在多个主机之间安装共享存储。 实际上,只有一个数据副本可用,因为存储的可用性比服务器要高得多。 这种HA方法的优势在于其结构的简单性,从而更容易实现数据一致性。

[IMG] https://cdn-images-1.medium.com/max/800/1*ApyZGeMke2TU7pBJzBCmeg.png [/ IMG]

这种HA方法的缺点很明显:存在单点故障。 当然,您可以使用多个存储设备或物理映像来解决单点故障问题。 另一方面,由于只有一个存储副本或整个映像有多个副本,因此数据删除具有传染性。 也就是说,您可以删除全部或全部数据,这使得在GitLab中执行rm -rf操作时很难保护数据。

高可用性和灾难容忍的多个副本

从v9.1开始,PostgreSQL支持双副本同步流复制模式和多副本异步流复制模式。 在v9.6中,PostgreSQL添加了新的多副本同步模式。

通过这种方法,即使通过rm -rf操作删除了主数据库中的数据文件,由于同步基于REDO,操作系统命令也不会被感染,并且rm -rf误操作损坏可以得到控制。 。

[IMG] https://cdn-images-1.medium.com/max/800/1*56sZ3XyXvjpzqSYu6vC2aQ.png [/ IMG]

[IMG] https://cdn-images-1.medium.com/max/800/1*xSe4_vsVkuPHhqk_ti7qtg.png [/ IMG]

另一个注意事项是,必须具有远程备份和远程容灾节点,以承受单个数据室的隐藏故障风险。

适用于PostgreSQL的阿里云ApsaraDB分离的冷热插件

您可以选择不将不可更改的历史数据存储到阿里云提供的外部对象存储服务OSS中,以节省数据库空间,并同时保存这部分数据的备份资源。 (OSS本身实现了多副本机制。但是,最好以管理员身份将数据副本存储到远程位置或其他平台。)

[IMG] https://cdn-images-1.medium.com/max/800/1*HIzhheAinl5DrSQxWWZvHA.png [/ IMG]

正确的备份方法

1.逻辑备份

数据库级一致性。 备份只能还原到单个时间点,不能通过增量还原或增量备份来实现。

另一方面,您还应注意,不同版本的数据库通常具有不同的目录。 这就是为什么我们建议您将备份客户端使用与数据库版本相同的pg_dump版本。 否则,它可能导致备份异常甚至失败(如果您没有注意到这一点,则可能导致逻辑备份失败)。

2.在线完整备份和存档备份

这是最常见的备份模式,可以在线完成。 您可以将数据还原到任何时间点(以事务粒度)。

如果在使用pg_basebackup进行备份时忽略此设置,则如果目标备份目录已经存在并且不为空,则备份也可能会发生异常。

请参考pg_basebackup手册,该手册提供了清晰的说明。 (这还旨在确保每个备份的稳定性,并使备份操作不受现有文件的任何影响或干扰。没有备份工具设计者知道非空目录下的文件是否可能与备份文件冲突)。 经常阅读本手册很有帮助。

-D目录

--pgdata =目录

将输出写入pg_basebackup的目录将创建目录和所有父目录(如有必要)。 该目录可能已经存在,但是如果该目录已经存在并且不为空,则错误。 当备份处于tar模式并且目录指定为-(破折号)时,tar文件将被写入stdout。 此选项是必需的。

[IMG] https://cdn-images-1.medium.com/max/800/1*lxpgg1vyiKRnfB5IrqTStA.png [/ IMG]

[IMG] https://cdn-images-1.medium.com/max/800/1*nSZFSarVxhbVazKm-lCZNw.png [/ IMG]

3.块级增量+存档

每个数据块的标头都有一个LSN标记,因此PostgreSQL支持数据文件的块级增量,以仅备份自上次备份以来的更改来备份数据块。 它还支持恢复到任何时间点(以事务粒度)。 与完整+存档备份相比,块级增量+存档模式节省更多空间。

4.文件系统和逻辑卷映像

除了使用数据库支持的块级增量式备份外,如果您使用的是快照支持的文件系统或逻辑卷管理的存储服务,则还有另一个增量备份选项:制作快照(注意首先执行pg_start_backup( ”)将数据库置于在线备份状态),然后执行“ pg_stop_backup()”。

5.阿里云OSS

您可以存储不会更改为阿里云提供的OSS服务的历史记录数据,以节省数据库空间。 另外,OSS本身实现了用于存储的多副本机制。

远程备份

如果将备份文件与数据库存储在同一数据室中,则在数据室中发生任何故障时,都将面临数据丢失的风险。 许多公司在远程数据室中都有存档数据或映像备份的副本。

PostgreSQL数据库支持简单且多样化的远程备份方法,例如:

方法1.备份远程流备用节点。

方法2.通过文件系统(例如ZFS或存储快照)将备份文件传输到远程数据室。

方法3.将本地完整备份文件异步传输到远程数据室,以流方式将master数据库中的重做日志传输到远程数据室,从而确保两个数据室之间的数据延迟最小。 当主数据室遭受灾难(例如地震)时,数据丢失率通常可以控制在KBs或几毫秒之内(取决于带宽和业务情况,即重做日志生成速度与带宽容量匹配) )。 如果要实现零数据丢失,则可以购买专线并远程实现同步流复制。 这样,即使主数据室完成失败,也不会丢失任何数据。

方法4.定期或异步地或通过调度将本地数据室中的备份数据同步到远程数据室的存储设备。

将备份集验证和还原到任何时间点(以事务粒度)

除了有效的备份,您还需要确保备份文件的有效性。 例如,您可以使用以下方法来验证备份+存档文件和快照备份的有效性。

DBA的提示和建议

除了用于日常备份,HA,远程备份,远程容灾和备份集的验证机制外,制定有效的规范和良好习惯也很重要。 我想分享一些技巧,希望能提供一些见识(中文参考:DBA的秘密)。

DBA第1部分的日常实践的秘密

DBA的首要任务是保护数据,并确保数据库可以正常运行。 必须至少遵守一些规则。

1.制定并实施数据库安全性法规。

2.制定并实施数据库管理法规。

3.制定并执行数据库开发法规。

4.建立自动监控系统。

5.建立自动检查,备份,HA,远程容灾和远程备份系统(以及至关重要的备份集可用性检查,尤其是在磁带库时代)。

6.建立假日网络封锁和应急机制。

这是防止攻击的有效措施。

DBA第2部分重大假期的秘诀-I

1.我们建议您在假期​​前添加例行检查,就像您在长途旅行之前检查汽车一样。

2.有必要以可预测的负载扩展业务数据库(当然包括应用服务器)。 许多企业在假期都会迎来高峰负载,例如游戏企业,社交网络企业和电子商务。

3.准备一批硬件以备备用,以应付重大假期期间的实例需求。

4.网络封锁可停止更改。 通常,您需要提前几天停止更改,以减少更改引起的潜在问题。

例如,可能在应用程序更改后添加了一些SQL语句,并且这些SQL语句可能没有进行优化,或者无法预测企业对这些SQL语句的并发请求量,从而导致在重大假期可能爆发数据库负载。

5. Shift。 安排一天的工作,以确保DBA可以24/7全天候提供答复。 DBA应该可以通过手机或互联网访问。

6.通常,假日值班人员承担比平常更大的责任。 有必要为他或她提供有关业务和相关职责的培训。

因此,允许多个DBA轮班工作非常重要。 我们必须避免只有一个DBA熟悉特定业务的情况。

7.宣传。 必须向公司的业务方公开网络封锁窗口,要求他们遵守规则,并且在窗口期间不要越界(例如更改或发布)。

尽管已采取系统措施和某些IT手段来控制网络封锁期间的行为,但仍可能会忽略一些角落。 因此,宣传同样重要。

DBA第三部分重大假期的秘密-II

1.职责。 通常分为在线值班和离线值班。 前者与正常工作时间大致相同。 值班的DBA可能需要注意某些NOC平台的指标,并填写间歇性的值班报告。

离线值勤是指被动接收警告消息和电子邮件,然后联机处理问题。

2.值班。 职责转移非常重要。 通常,上一个班次的DBA可能会发现一些例外,并将其发现传递给下一个班次。 如果发生实际问题,则上班信息将有助于提高响应速度和处理效率。

DBA第4部分重大假期的秘诀-III

网络封锁结束后,一切恢复正常。 但是不要忘记一件重要的事情。

1.重播

重播通常是指在网络封锁期间检查系统状态。 它具有以下目的:

1.1确定扩展估计是否有意义,并将反馈数据建议给业务各方。

1.2检查是否存在故障,原因以及以后如何避免。

1.3检查监控系统是否存在漏洞,以及将来如何避免该漏洞。

1.4确定是否存在不一致的变更或发布,并确定将来如何避免相同的问题。

摘要

我相信许多公司都有类似的系统。 DBA必须尽其所能避免rm -rf事件,并在发生此类事件时保持冷静,同时确保用户的心情舒畅。

同时,建立音响系统至关重要。 在操作过程中也必须保持头脑清醒,以尽可能避免人为错误。

From: https://bytes.com/topic/software-development/insights/969759-implementing-database-disaster-tolerance-high-availability

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值