对于容器中的数据库和Postgres需要知道的11件事

2019年4月26日

AzizRahman

作者:Aziz Rahman

原文链接

我们看到数据库管理系统(DBMS)的容器部署开始飞速增加,离开了炒作阶段并成为主流。 容器化数据库趋势的一个迹象是Postgres,一个著名的开源关系数据库,在调查中被列为Docker容器中运行的第三大最受欢迎的技术。

通过从操作系统和基础架构层完全抽象应用程序,容器提供应用程序可移植性和前所未有的便利性和灵活性, 以支持DevOps持续集成和持续交付和/或持续部署(CI / CD)方法。 此外,容器映像的启动速度比虚拟机(VM)快得多,因此它们更适合当今的动态运行时环境,在这种环境中,应用程序可按需扩展和缩小。

与其他容器化应用程序一起,容器化数据库已经成为从大型单片应用程序转向基于微服务和无服务器架构的应用程序范式的一部分。 由于可以轻松部署容器化数据库,因此它们已成为单个应用程序的按需实用程序,而不是具有为多个应用程序提供服务的大型集中式数据库。

容器化数据库是其DBMS服务器软件的封装,可访问驻留在网络内某处的物理数据库文件。 每个DBMS都包含在自己的容器映像中。但是,对数据库进行容器化并不像容纳应用程序那么简单。

你需要知道什么

这里有11个关于容器中的数据库和Postgres的知识,以容器化数据库的一些优点开始:

  • 使用容器,您可以将数据库作为按需实用程序进行处理,这意味着每个应用程序都可以拥有自己的专用数据库,可以根据需要进行调整。这克服了大型单机数据库的缺点,这些数据库具有由较小的容器化数据库支持的微服务架构。
  • 容器化数据库将存储与计算分开,这意味着存储性能和容量可以独立于计算资源进行扩展。这为前期数据库容量规划和配置提供了更大的灵活性,因为以后更容易实现更改。
  • 软件定义的容器化数据库在高速DevOps周期中提供了一个至关重要的缺失环节,允许开发和运营团队无缝协作。然而,与此同时,容器化数据库在高数据可用性,备份和恢复以及其他关键数据库性能和合规性要求方面存在一系列独特挑战。

所以,现在让我们添加一些经常被引用的数据库容器化挑战的事项列表,以及一些处理这些挑战的方法。

  • 数据库通常需要高吞吐量,低延迟的网络。 但是,Docker容器本身并不提供实现这些要求所必需的存储级别和网络资源隔离。 例如,Kubernetes等容器编排的出现通过管理网络和数据存储(可以是本地或云端)来解决这个问题。
  • 数据库具有固有的状态和持久性,而容器通常是无状态和短暂的。 为处理持久性数据存储而设置的解决方法以及比平时更长的容器寿命通常会降低密钥容器减少运行时资源使用的好处。 为了解决这个问题,有必要通过将数据库引擎与数据库文件存储分开来规划持久存储。 这样,如果容器出现故障或由于某种原因失败,则不会丢失数据。 这与用于数据中心中部署的DBMS的设计结构相同。
  • 在容器化数据库中如果存储大量数据,那么所需的大量磁盘空间使其不太灵活且可重定位性较低。 解决方案与上面提到的相同,即通过在运行时将外部数据卷映射到容器中来将数据库引擎与数据库文件存储分开。 使用Kubernetes时,可以使用包括NFS,GlusterFS,Ceph以及云支持存储(AWS EBS)的不同存储后端创建持久卷。
  • 数据库通常具有许多调整参数,其中许多是动态的。 为每个可能的数据库配置构建新的不可变容器映像可能很快导致映像泛滥。 然而,应该注意的是,这个问题在VM部署中更是一个挑战,因为容器比VM轻得多。 为避免这种情况,自定义数据库配置将在运行时传递到容器中,以覆盖默认配置。 在Kubernetes中,这可以通过使用ConfigMaps来实现,ConfigMaps是一个Kubernetes对象,它封装了自定义配置并在部署时提供给容器。
  • 数据库对应用程序工作负载至关重要,因此生产工作负载需要高可用性和故障切换。 相比之下,在开发环境中,这种情况更简单,因为与共享存储相比,不需要部署副本,并且本地存储更易于管理。 对于支持生产工作负载的数据库,消除单点故障非常重要。以使用PostgreSQL为例,您将需要开发脚本来创建故障切换功能,以便在master数据库发生故障时自动接管副本。 当容器化数据库的自动脚本化部署与诸如Kubernetes的业务流程框架结合使用时,结果是故障转移方案的内置高可用性。 这样就无需维护故障转移群集副本,从而节省了大部分时间都处于空闲状态的资源。 另一种选择是选择EDB故障转移管理器(EFM)之类的东西来为您提供高可用性和故障转移的工作。 此组件已集成到Postgres数据库容器中,以便在数据库或节点(VM)发生故障时提供自动故障转移。
  • 当有许多用户同时执行许多查询时,则需要负载均衡器(load balancer)来扩展并为生产工作负载提供高性能。 对于PostgreSQL,可以使用pgPool,它可以帮助应用程序通过将读取事务负载平衡到副本来扩展,同时将写入请求指向主服务器。 或者,作为另一种选择,EDB Postgres Containers附带此功能,其负载均衡是内置的。
  • 备份和恢复是任何数据库的关键功能,无论是否为容器化。 EDB备份和恢复工具(BART)容器为Postgres数据库容器提供备份和恢复功能,并且可以支持多个不同容器中的数据库。 它实现了自动备份,保留策略,备份压缩选项以及大规模Postgres部署的时间点恢复要求的计划。
  • 部署数据库后,需要监视它们的资源使用情况,并进行分析以确定任何性能瓶颈。 除其他数据库管理功能外,EDB Postgres企业管理器(PEM)还提供监视和性能诊断。

总之,容器化意味着能够以相同的方式在多个公共云和私有云上运行相同的软件,甚至在本地虚拟化环境中运行。 容器提供了这种应用程序的可移植性 - 具有前所未有的便利性和灵活性,可通过从操作系统和基础架构层完全抽象应用程序来支持DevOps持续开发/部署/集成方法。

今天,容器和容器编排已经成熟到现在它们已经定位于云原生计划的核心。 数据库正成为容器化的热门候选者,成为向微服务和无服务器架构转变的一部分的按需使用程序。

相关文章

img2

随着容器采用的增加,出现了新的存储挑战

2019年2月20日

img3

9个容器最佳实践支柱

2018年10月16日

关于Aziz Rahman

authorimg

Aziz Rahman是EnterpriseDB EDB容器平台的首席架构师,该平台提供基于开源Postgres的企业级数据管理平台。 过去几年,他一直与Docker和Kubernetes广泛合作,负责在基于Kubernetes的容器编排平台上提供容器化的Postgres生态系统。

查看Aziz Rahman的所有文章

Written on April 26, 2019