在 OCI 上使用 StackGres 部署 PostgreSQL
StackGres 是适用于 Kubernetes 的完整堆栈 PostgreSQL 分发,已打包到一个简单的部署单元中。StackGres 包括连接池、自动备份、监视、集中日志记录以及功能完备的管理 Web 控制台。
StackGres 集成了 Postgres:Patroni 最知名的和生产测试的高可用性软件。
- 它完全集成。如果有任何故障,群集将自动排练,无需人工干预。
- StackGres 为应用程序公开一个读写连接和一个只读连接,这些连接将在发生任何中断事件后自动更新。
企业级 PostgreSQL 堆栈需要其他几个生态系统组件和大量优化。它需要连接池、自动故障转移和 HA、监视、备份和 DR。此引用体系结构中显示的 StackGres 程序包和 Oracle Cloud Infrastructure (OCI) 组件提供低效、可扩展的高可用性部署。
体系结构
此体系结构展示了如何在 Oracle Container Engine for Kubernetes 集群中部署 PostgreSQL。此体系结构适用于利用 PostgreSQL 功能的生产就绪环境:
- 无供应商锁定:PostgreSQL 可在任何 Kubernetes 环境中工作。
- 包括功能完备的 Web 控制台。
- Postgres 平台拥有世界上最多的扩展。
- 在 x86-64 和 ARM64 Kubernetes worker 节点上运行。
- 完全开源(免费“社区”和昂贵的“企业”版本之间不分割)。
- 根据使用的核心对支持和更新进行定价。
- 包括“vanilla”Postgres 和 Babelfish(提供 SQL Server 兼容性)。
下图说明了此参考体系结构。
该体系结构具有以下组成部分:
- 租户
租户是 Oracle 在您注册 Oracle Cloud Infrastructure 时在 Oracle Cloud 中设置的安全隔离分区。您可以在租户中的 Oracle Cloud 中创建、组织和管理资源。租户与公司或组织同义。通常,公司只有一个租户并反映在该租户中的组织结构。单个租户通常与单个订阅关联,单个订阅通常只有一个租户。
- 区域
Oracle Cloud Infrastructure 区域是一个局部地理区域,包含一个或多个称为可用性域的数据中心。区域独立于其他区域,广阔的距离可以将其分开(跨国家甚至大陆)。
- 区间
区间是 Oracle Cloud Infrastructure 租户中的跨区域逻辑分区。使用区间在 Oracle Cloud 中组织资源、控制对资源的访问以及设置使用限额。要控制对给定区间中资源的访问,您可以定义策略来指定哪些人可以访问资源以及他们可以执行的操作。
- 可用性域
可用性域是区域中的独立独立数据中心。每个可用性域中的物理资源与提供容错能力的其他可用性域中的资源隔离。可用性域不共享基础设施(例如电源或冷却设备)或内部可用性域网络。因此,一个可用性域出现故障不会影响区域中的其他可用性域。
将显示一个可用性域,但您可以根据生产需求在多个可用性域中进行部署。
- 容错域
故障域是可用性域内一组硬件和基础设施。每个可用性域都具有三个具有独立电源和硬件的故障域。在多个容错域中分配资源时,您的应用可以承受容错域中的物理服务器故障、系统维护和电源故障。
显示了一个容错域,但您可以根据生产需求在多个容错域中进行部署。
- 虚拟云网络 (VCN) 和子网
VCN 是您在 Oracle Cloud Infrastructure 区域中设置的可定制软件定义网络。与传统数据中心网络一样,VCN 允许您完全控制您的网络环境。一个 VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后对其进行更改。您可以将 VCN 细分为多个子网,这些子网可以限定到区域或可用性域。每个子网包含一系列不与 VCN 中的其他子网重叠的连续地址。创建后可以更改子网的大小。子网可以是公共子网,也可以是专用子网。
- 负载平衡器
Oracle Cloud Infrastructure Load Balancing 服务提供从单个入口点到后端多个服务器的自动流量分配。
- 堡垒服务
Oracle Cloud Infrastructure 堡垒提供对没有公共端点且需要严格资源访问控制(例如裸金属和虚拟机、Oracle MySQL Database Service 、自治事务处理 (Autonomous Transaction Processing,ATP)、Oracle Container Engine for Kubernetes (OKE) 以及允许安全 Shell 协议 (Secure Shell Protocol,SSH) 访问的任何其他资源的受限且有时限的安全访问。通过 Oracle Cloud Infrastructure 堡垒服务,您可以启用对专用主机的访问,而无需部署和维护跳转主机。此外,您还可以使用基于身份的权限和集中、审计和有时限的 SSH 会话来提高安全状况。Oracle Cloud Infrastructure 堡垒消除了对堡垒访问的公共 IP 的需求,在提供远程访问时消除了散列表和潜在攻击面。
- 安全列表
对于每个子网,您可以创建安全规则来指定必须允许进出子网的流量源、目标和类型。
- 网络地址转换 (NAT) 网关
通过 NAT 网关,VCN 中的专用资源可以访问互联网上的主机,而不向传入的互联网连接公开这些资源。
- 服务网关
通过服务网关,可以从 VCN 访问其他服务,例如 Oracle Cloud Infrastructure Object Storage 。从 VCN 到 Oracle 服务的流量会通过 Oracle 网络网状结构网络传输,并且从不通过互联网传输。
- 动态路由网关 (DRG)
DRG 是虚拟路由器,用于为同一区域中的 VCN 之间、VCN 与区域外的网络(例如另一个 Oracle Cloud Infrastructure 区域中的 VCN、内部部署网络或其他云提供商中的网络)的专用网络流量提供路径。
- 对象存储
通过对象存储,可以快速访问任意内容类型的大量结构化和非结构化数据,包括数据库备份、分析数据以及丰富的内容(例如图像和视频)。您可以安全可靠地存储数据,然后直接从互联网或云平台检索数据。您可以无缝扩展存储,而不会降低性能或服务可靠性。将标准存储用于“热”存储,您需要快速、立即和频繁地访问这些存储。将归档存储用于保留很长时间、很少或很少访问的“冷”存储。
- Internet 网关
互联网网关允许 VCN 中的公共子网与公共互联网之间的通信。
- FastConnect
Oracle Cloud Infrastructure FastConnect 提供了在您的数据中心与 Oracle Cloud Infrastructure 之间创建专用私有连接的简便方式。FastConnect 与基于 Internet 的连接相比,可提供更高的带宽选项和更可靠的网络体验。
- Local peering 网关 (LPG)
使用 LPG,可以将一个 VCN 与同一区域中的另一个 VCN 对等。对等连接意味着 VCN 使用专用 IP 地址进行通信,而不会产生通过互联网或通过内部部署网络进行路由的流量。
- 适用于 Kubernetes 的容器引擎
Oracle Cloud Infrastructure Container Engine for Kubernetes 是一项完全托管、可扩展的高可用性服务,可用于将容器化应用部署到云中。您可以指定应用所需的计算资源,而适用于 Kubernetes 的容器引擎将在现有租户的 Oracle Cloud Infrastructure 上预配这些资源。适用于 Kubernetes 的容器引擎使用 Kubernetes 在主机集群中自动部署、扩展和管理容器化应用。
- PostgreSQL
PostgreSQL 是一种具有高度可扩展性和高度可扩展性的开源关系数据库管理系统 (RDBMS)。它支持 SQL(关系)和 JSON(非关系)查询。
- StackGres
StackGres 是适用于 Kubernetes 的完整堆栈 PostgreSQL 分发,已打包到一个简单的部署单元中。它包括一组精心选择和优化的周围 PostgreSQL 组件。
- 云卫士
您可以使用 Oracle Cloud Guard 监视和维护 Oracle Cloud Infrastructure 中资源的安全性。Cloud Guard 使用您可以定义的部门配方来检查资源是否存在安全漏洞,以及监视操作员和用户是否有风险的活动。检测到任何配置错误或不安全活动时,Cloud Guard 会根据您可以定义的对应方配方建议更正操作并帮助执行这些操作。
- 分布式拒绝服务 (DDoS) 保护
分布式拒绝服务 (DDoS) 攻击是攻击者犯下的严重网络犯罪,攻击者将大量传入流量淹没公司服务器。这种庞大的流量来自大量来源和地理位置,阻止用户访问公司的服务和站点。所有 Oracle Cloud 数据中心都具有针对高卷层 3 或 4 DDoS 攻击的 DDoS 攻击检测和缓解功能。这些来自 Oracle Cloud 的 DDoS 保护服务有助于确保 Oracle 网络资源可用性,即使在持续的第 3 层或第 4 层攻击下也是如此。
- 身份和访问管理 (IAM)
Oracle Cloud Infrastructure Identity and Access Management (IAM) 是 Oracle Cloud Infrastructure (OCI) 和 Oracle Cloud Applications 的访问控制层。通过 IAM API 和用户界面,您可以管理身份域和身份域中的资源。每个 OCI IAM 身份域代表一个独立的身份和访问管理解决方案或不同的用户群体。
- 登录日志记录是一项高度可扩展且完全托管的服务,通过它可以从云中的资源访问以下类型的日志:
- 审计日志:与审计服务发出的事件相关的日志。
- 服务日志:单个服务(如 API 网关、事件、函数、负载平衡、对象存储和 VCN 流日志)发出的日志。
- 定制日志:包含来自定制应用、其他云提供商或内部部署环境的诊断信息的日志。
- 审计
Oracle Cloud Infrastructure Audit 服务自动将所有受支持的 Oracle Cloud Infrastructure 公共应用程序编程接口 (API) 端点的调用记录为日志事件。目前,所有服务都支持 Oracle Cloud Infrastructure Audit 日志记录。
建议
- VCN
创建 VCN 时,根据计划附加到 VCN 中的子网中的资源数,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。
选择与您打算设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure 、您的内部部署数据中心或其他云提供商中)不重叠的 CIDR 块。
创建 VCN 后,您可以更改、添加和删除其 CIDR 块。
设计子网时,请考虑您的流量流和安全要求。将特定层或角色中的所有资源连接到可充当安全边界的同一子网。
使用区域子网。
- 云卫士
克隆并定制 Oracle 提供的默认配方以创建定制检测器和响应器配方。通过这些配方,您可以指定哪种类型的安全违规生成警告以及允许对它们执行哪些操作。例如,您可能希望检测可见性设置为 public 的对象存储桶。
在租户级别应用 Cloud Guard 以涵盖范围最广,并减轻维护多个配置的管理负担。
您还可以使用“托管列表”功能将某些配置应用于检测器。
- 安全区域
对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是与基于优秀实践的安全策略的 Oracle 定义的配方关联的区间。例如,不能从公共互联网访问安全区域中的资源,必须使用客户管理的密钥加密资源。在安全区域中创建和更新资源时,Oracle Cloud Infrastructure 将根据安全区域配方中的策略验证操作,并拒绝违反任何策略的操作。
- 网络安全组 (NSG)
您可以使用 NSG 定义一组适用于特定 VNIC 的入站和出站规则。我们建议使用 NSG,而不是安全列表,因为 NSG 可以将 VCN 的子网架构与应用的安全要求分开。
- 负载平衡器带宽
创建负载平衡器时,您可以选择提供固定带宽的预定义配置,或者指定在其中设置带宽范围的定制(灵活)配置,并让服务根据流量模式自动缩放带宽。无论使用哪种方法,都可以在创建负载平衡器后随时更改配置。
考虑事项
部署此体系结构时,请考虑以下选项:
- 使用 ARM 处理器的异常情况
可以使用 ARM 运行 StackGres(Ampere A1 Compute)。
- 架构选项
本文档的体系结构是一个建议,可以根据项目的需要进行更改。
- Postgres 扩展
StackGres 提供了超过 130 个可以使用的 Postgres 扩展。
- 用户权限
使用最少权限的安全最佳实践:仅当实际需要时,才能将帐户对 root 或超级用户权限的访问限制为仅限。
- 监视
除了 OCI 事件、 OCI 日志记录和 OCI 监视等 OCI 服务,您还可以使用 Prometheus 或 Grafana 进行监视。
- 备份
StackGres 包括基于归档的连续备份,可实现零数据丢失恢复。
备份始终存储在今天提供的最持久介质上: OCI 对象存储。
请遵循以下最佳实践:
- 不要让数据库暴露在 Internet 上。
- 如果可能,将应用程序集群与堆栈使用的集群隔离。
- 如果要在同一集群中创建应用程序,Oracle 强烈建议您为应用程序创建不同的名称空间。
- 选择 Intel、AMD 或 ARM 处理器时,应考虑工作负载的大小,以避免优化 Postgres 环境。
浏览更多
了解有关在 OCI 上部署 PostgreSQL 的更多信息。
查看以下附加资源:
- 有关 OCI 上 StackGres 的完整安装和配置说明,请参见解决方案手册使用 StackGres 在 OCI Kubernetes 集群上部署高可用性 PostgreSQL 堆栈
- 要在 OCI 上部署 PostgreSQL(无 StackGres),并实现 Terraform 自动化,请参阅部署 PostgreSQL 数据库
- Oracle Cloud Infrastructure 的优秀实践框架
- 了解如何构建高可用性云拓扑
- PostgreSQL 文档
- StackGres 文档
