Azure Databases for PostgreSQL 简介
Azure Database for PostgreSQL 在多服务器版本中可用。
作为一名具有多年运行和管理本地 PostgreSQL 安装经验的数据库开发人员,你希望了解 Azure Database for PostgreSQL 如何支持和缩放其功能。
在本单元中,你将了解 Azure Database for PostgreSQL 的定价、版本支持、复制和缩放选项。
适用于 PostgreSQL 的 Azure 数据库
Azure Database for PostgreSQL 服务是 PostgreSQL 社区版本的实现。 该服务提供典型的 PostgreSQL 系统使用的常见功能,包括地理空间支持和全文搜索。
Microsoft已为 Azure 平台调整 PostgreSQL,并与许多 Azure 服务紧密集成。 Azure Database for PostgreSQL 服务完全由Microsoft管理。 Microsoft处理软件的更新和修补程序,并提供 99.99% 可用性 SLA。 这意味着,只需专注于使用服务运行的数据库和应用程序。
可以在此服务的每个实例中部署多个数据库。
定价层
创建 Azure Database for PostgreSQL 服务的实例时,可以通过选择 定价层来指定要分配的计算和存储资源。 定价层结合了虚拟处理器核心数、可用存储量和各种备份选项。 分配的资源越多,成本就越高。
Azure Database for PostgreSQL 服务使用存储来保存数据库文件、临时文件、事务日志和服务器日志。 可以选择指定希望在接近当前容量时增加可用存储。 如果未选择此选项,则耗尽存储的服务器将继续运行,但以只读方式运行。
Azure 门户将定价层分为三大范围:
- 基本,适用于小型系统和开发环境,但具有可变 I/O 性能。
- 常规用途,根据处理器核心数和可用存储空间,提供高达 6000 IOPS 的可预测性能。
- 内存优化(最多使用 32 个内存优化虚拟处理器核心),并提供高达 6000 IOPS 的可预测性能。
Microsoft预览版中还有一个 大型存储 选项,该选项最多可预配 16 TB 的存储,并支持高达 20,000 IOPS。
可以微调所需的处理器核心数和存储。 可以在创建数据库后根据需要在常规用途和内存优化定价层之间纵向扩展和缩减处理资源(不能纵向缩减存储),也可以切换。 只需支付所需费用。
注释
如果更改处理器核心数,Azure 会使用此计算分配创建一个新服务器。 服务器运行时,客户端连接将切换到新服务器。 此开关可能需要长达一分钟的时间。 在此时间间隔内,无法建立新连接,任何正在进行的事务都将回滚。
如果仅更改备份选项的存储大小,则服务不会中断。
分配的定价层和处理资源决定了服务将支持的最大并发连接数。 例如,如果选择“常规用途”定价层并分配 64 个虚拟核心,该服务支持 1900 个并发连接。 基本层具有两个虚拟核心,最多可处理 100 个并发连接。 Azure 本身需要五个连接来监视服务器。 如果超过可用连接数,客户端将收到错误 致命:抱歉,客户端已过多。
价格可能会改变。 有关最新信息,请访问 Azure Database for PostgreSQL 定价 页。
服务器参数
在 PostgreSQL 的本地安装中,可以在 postgresql.conf 文件中设置服务器配置参数。 使用 Azure Database for PostgreSQL 通过 服务器参数 页修改配置参数。 并非所有 PostgreSQL 本地安装的参数都与 Azure Database for PostgreSQL 相关,因此服务器参数页仅列出适用于 Azure 的参数。
对标记为 动态 的参数的更改将立即生效。 静态参数需要服务器重启。 使用门户中 概述 页上的“重启”按钮重启服务器:
高可用性
Azure Database for PostgreSQL 是一种高度可用的服务。 它包含内置的故障检测和故障转移机制。 如果处理节点因硬件或软件问题而停止,则会切换新节点以替换它。 当前使用该节点的任何连接都将被删除,但会针对新节点自动打开。 故障节点正在执行的任何事务都将回滚。 因此,应始终确保客户端配置为检测和重试失败的作。
支持的 PostgreSQL 版本
Azure Database for PostgreSQL 服务当前支持 PostgreSQL 版本 11,回到版本 9.5。 指定创建服务实例时要使用的 PostgreSQL 版本。 Microsoft旨在更新服务,因为 PostgreSQL 的新版本可用,并将保持与前两个主要版本的兼容性。
Azure 自动管理 PostgreSQL 次要版本(而不是主要版本)之间的数据库的升级。 例如,如果你有使用 PostgreSQL 版本 10 的数据库,Azure 可以自动将数据库升级到版本 10.1。 如果要切换到版本 11,则必须从当前服务实例中的数据库导出数据,创建 Azure Database for PostgreSQL 服务的新实例,然后将数据导入此新实例。
协调器和工作器节点
数据分片并在工作器节点之间分布。 协调器中的查询引擎可以并行化复杂查询,将处理定向到相应的工作器节点。 选择工作器节点,其分片保存正在处理的数据。 然后,协调器会累积工作器节点的结果,然后再将其发送回客户端。 可能只使用单个工作器节点执行更直接的查询。 客户端还连接到协调器,并且从不直接与工作器节点通信。
可以根据需要在服务中增加和减少工作器节点数。
分发数据
通过创建 分布式 表,跨工作器节点分配数据。 分布式表拆分为分片,并将每个分片分配给工作器节点上的存储。 可以通过将列定义为 分布 列来指示如何拆分数据。 数据基于此列中数据的值进行分片。 设计分布式表时,请务必仔细选择分布列:应使用具有大量非重复值的列,这些值通常用于对相关行进行分组。 例如,在存储有关客户订单信息的电子商务系统的表中,客户 ID 可能是合理的分布列。 给定客户的所有订单将保存在同一分片中,但所有客户的订单将分散到分片中。
还可以创建 引用 表。 这些表包含查找数据,例如城市的名称或状态代码。 引用表完全复制到每个工作器节点。 引用表中的数据应相对静态;每个更改都需要更新表的每个副本。
最后,可以创建 本地 表。 本地表未分片,但存储在协调器节点上。 使用本地表来保存包含联接不太可能需要的数据的小表。 示例包括用户的姓名及其登录详细信息。
在 Azure Database for PostgreSQL 中复制数据
只读副本可用于处理读取密集型工作负荷。 客户端连接可以分布在副本之间,从而减轻了单个服务实例的负担。 如果客户端位于世界不同区域,则可以使用跨区域复制将数据定位到每个客户端集附近,并减少延迟。
还可以使用副本作为灾难恢复应急计划的一部分。 如果主服务器不可用,你仍可能能够连接到副本。
注释
如果主服务器丢失或删除,则所有只读副本将改为变为读写服务器。 但是,这些服务器彼此独立,因此对一台服务器中的数据所做的任何更改都不会复制到其余服务器。
建立副本
只读副本包含原始服务器中保存的数据库的副本,称为 主。 使用 Azure 门户或 CLI 创建主数据库的副本。
显示 Azure Database for PostgreSQL 服务Image showing the Replication page for the Azure Database for PostgreSQL serviceImage showing the Replication page for the Azure Database for PostgreSQL service复制页的图像
创建只读副本时,Azure 会创建 Azure Database for PostgreSQL 服务的新实例,然后将数据库从主服务器复制到新服务器。 副本以只读模式运行。 任何修改数据的尝试都将失败。
副本滞后时间
复制不是同步的,对主服务器中的数据所做的任何更改可能需要一些时间才能显示在副本中。 连接到副本的客户端应用程序必须能够应对这种最终一致性级别。 使用 Azure Monitor,可以使用副本 最大滞后时间,以及 副本滞后 指标来跟踪复制中的时间滞后时间。
管理和监视
可以使用熟悉的工具(如 pgAdmin)连接到 Azure Database for PostgreSQL 来管理和监视数据库。 但是,某些以服务器为中心的功能(如执行服务器备份和还原)不可用,因为服务器由Microsoft进行管理和维护。
用于监视 Azure Database for PostgreSQL 的 Azure 工具
Azure 提供了一组广泛的服务,用于监视服务器和数据库性能,并解决问题。 借助这些服务,可以查看 PostgreSQL 如何利用已分配的 Azure 资源。 使用此信息来评估是否需要缩放系统、修改数据库中表和索引的结构,以及可视化运行时统计信息和其他事件。 可用的服务包括:
Azure Monitor。 Azure Database for PostgreSQL 提供指标,可用于跟踪 CPU 和存储利用率、I/O 速率、内存占用、活动连接数和复制延迟等项:
显示包含 Azure Database for PostgreSQLImage showing the Azure Monitor with metrics for Azure Database for PostgreSQL
Image showing the Azure Monitor with metrics for Azure Database for PostgreSQL指标的 Azure Monitor 的图像
服务器日志。 Azure 使日志可用于每个 PostgreSQL 服务器。 从 Azure 门户下载它们:
查询存储和查询性能见解。 Azure Database for PostgreSQL 存储有关针对服务器上数据库运行的查询的信息,并将其保存在 query_store 架构中名为 azure_sys的数据库中。 查询 query_store.qs_view 视图以查看此信息。 默认情况下,Azure Database for PostgreSQL 不会捕获任何查询信息,因为它会产生较小的开销,但可以通过将 pg_qs.query_capture_mode 服务器属性设置为 ALL 或 TOP来启用跟踪。
显示 Azure Database for PostgreSQLImage showing the server server parameters page for Azure Database for PostgreSQL
Image showing the server server parameters page for Azure Database for PostgreSQL的服务器服务器参数页的图像
还可以将查询存储配置为捕获等待时间的查询的相关信息。 查询可能需要等待,而另一个查询释放表上的锁,或者因为查询执行大量 I/O,或者内存运行短。 可在 query_store.runtime_stats_view 视图中看到此信息。
如果想要可视化这些统计信息而不是运行 SQL 语句,请使用 Azure 门户中的 Query Performance Insight:
显示 Query Performance InsightImage showing Query Performance Insight
Image showing Query Performance Insight的图像
性能建议。 性能建议实用工具也可在 Azure 门户中使用,检查应用程序正在运行的查询。 它还查看数据库中的结构,并建议如何组织数据,以及是否应考虑添加或删除索引。
客户端连接
Azure Database for PostgreSQL 在防火墙后面运行。 若要访问服务和数据库,必须为客户端连接的 IP 地址范围添加防火墙规则。 如果需要从 Azure 内部访问服务(例如使用 Azure 应用服务运行的应用程序),还必须启用对 Azure 服务的访问权限。
配置防火墙
配置防火墙的最简单方法是在 Azure 门户中为服务使用连接安全设置。 为每个客户端 IP 地址范围添加规则。 还可以使用此页来强制与服务建立 SSL 连接。
显示 Azure Database for PostgreSQLImage showing the firewall configuration for Azure Database for PostgreSQLImage showing the firewall configuration for Azure Database for PostgreSQL防火墙配置的映像
单击工具栏中的 添加客户端 IP,添加台式计算机的 IP 地址。
如果已配置只读副本,则必须将防火墙规则添加到每个副本,以使客户端可以访问它们。
客户端连接库
如果要编写自己的客户端应用程序,则必须使用适当的数据库驱动程序连接到 PostgreSQL 数据库。 其中许多库依赖于编程语言。 它们由独立的第三方维护。 Azure Database for PostgreSQL 支持用于 Python、PHP、Node.js、Java、Ruby、Go、C# (.NET)、ODBC、C 和C++的客户端库。
客户端重试逻辑
如前所述,某些事件(例如在高可用性恢复期间进行故障转移和纵向扩展 CPU 资源)可能会导致连接短暂丢失。 正在进行的任何事务都将回滚。 Azure Database for PostgreSQL 会自动将连接的客户端重定向到工作节点,但此时客户端执行的任何作都将返回错误。 应将此事件视为暂时性异常。 应用程序代码应准备好捕获这些异常并重试这些异常。
Azure Database for PostgreSQL 中支持的 PostgreSQL 功能
Azure Database for PostgreSQL 支持 PostgreSQL 数据库常用的大多数功能,但有一些例外情况。 如果需要不受支持的功能,则需要重新编写数据库和应用程序代码以删除此依赖项,或考虑在虚拟机中运行 PostgreSQL。 在后一种情况下,你必须负责管理和维护服务器。
Azure Database for PostgreSQL 中支持的扩展
许多 PostgreSQL 功能封装在扩展中。 扩展是存储在服务器上的 SQL 对象和代码的包,可以使用 CREATE EXTENSION
命令将其加载到数据库中。 Azure Database for PostgreSQL 目前为:
- 数据类型
- 功能
- 全文搜索
- 索引(开花、btree_gist和btree_gin)
- plpgsql 语言
- PostGIS
- 许多管理功能
可以使用 dblink 和 postgres_fdw 包将一台 PostgreSQL 服务器连接到另一台服务器,这样一台服务器中的代码就可以访问另一台服务器中保存的数据。 在 Azure Database for PostgreSQL 中,只能在使用 Azure Database for PostgreSQL 创建的服务器之间进行连接。 无法创建到托管于其他位置的 PostgreSQL 服务器的出站连接,例如本地或虚拟机中。
注释
支持的扩展列表正在不断审查中,并且可以更改。 你将生成以下查询支持的扩展列表。 请注意,无法创建自己的自定义扩展并将其上传到 Azure Database for PostgreSQL:
SELECT * FROM pg_available_extensions;
Azure Database for PostgreSQL 将 TimescaleDB 数据库作为可选扩展。 此数据库包含面向时间的分析函数和其他支持时序工作负荷的功能。 若要使用此数据库,请在 shared_preload_libraries 服务器参数中选择 TIMESCALEDB 选项,然后重启服务器。
存储过程和触发器的语言支持
对 plpgsql 以外的语言的支持通常要求你单独编译存储过程或触发代码,并将编译的库上传到服务器。 主要是由于安全原因,无法使用 Azure Database for PostgreSQL 执行此作。 如果有以其他语言编写的代码,则必须将其移植到 plpgsql。