Multigres 私测版:Supabase Postgres 的自动故障转移

Multigres 私测版:Supabase Postgres 的自动故障转移

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

Supabase 推出 Multigres 高可用方案私测版,为付费用户提供跨可用区三节点 Postgres 集群,支持秒级自动故障转移和内置连接池,无需修改代码。该方案基于共识协议确保已确认写入不丢失,并自动管理连接池模式。目前仅限单区域,不可用于生产环境,且不支持 Realtime 和时点恢复。

🔎

延伸解读

故障转移的核心:共识协议保障已确认写入

文章指出,多数 Postgres 高可用工具把故障转移当作监控问题,但难点在于选一个安全的副本提升。Multigres 改用共识协议:应用只有在写入被复制到足够多节点后才收到确认,因此每个已确认写入至少存在于一个存活节点上。故障转移时,剩余节点就完整提交集达成一致,确保被提升的副本拥有全部已确认写入。这直接解决了“主库已确认但副本未收到”导致的数据丢失风险。

连接池无需选模式,按用户公平分配

与 PgBouncer 需要预先选择事务模式或会话模式不同,Multigres 会解析每个请求并跟踪其创建的会话状态,自动决定如何处理每个查询。每个数据库用户拥有独立连接池,公平分享算法分配连接预算,避免一个繁忙角色耗尽资源。预编译语句还会去重,Postgres 只需解析和缓存一次,而非每个客户端一次。这减少了配置负担,并可能提升多用户场景下的连接效率。

私测阶段限制明确:不可用于生产

Multigres 目前仅限单区域(美国东部弗吉尼亚北部),不支持跨区域只读副本,且项目创建后无法更改计算规格、磁盘和副本数。它不支持 Realtime(依赖逻辑复制)和时点恢复,仅有标准每日备份。项目创建时就必须决定是否启用,且目前没有托管路径退回标准 Postgres 项目。私测期间不覆盖 uptime SLA,每个组织最多两个项目免费,正式定价可能变化。

适用场景与迁移注意

Multigres 适合无法接受主库故障导致停机的付费用户,尤其是希望免去自建副本、故障转移管理器和连接池的团队。迁移无需修改应用代码,使用标准 Postgres 连接字符串,Auth、REST Data API、Storage、Edge Functions 和客户端库均兼容。但需注意:它不能与 OrioleDB 同时用于同一项目;现有项目无法直接启用,必须新建项目。对于需要 Realtime 或时点恢复的应用,应继续使用标准 Postgres 项目。

❓

Q&A

Multigres 是什么?它和 Postgres 是什么关系?

Multigres 是由 Vitess 团队打造的开源 Postgres 操作系统,不是 Postgres 的分支。你的数据仍然存储在标准 Postgres 中,Multigres 负责管理集群层面的连接路由、连接池、复制、故障转移和备份。

Multigres 的自动故障转移是如何保证已确认写入不丢失的?

Multigres 将故障转移视为共识问题,而非简单的监控问题。它基于 Postgres 同步复制构建了广义共识协议,只有写入被复制到足够多的节点后才会向应用返回确认。主节点故障时,剩余节点就已提交写入达成一致,并确保被提升的副本拥有全部已确认写入后才接受新写入,从而保证已确认提交在故障转移后依然存在。

使用 Multigres 需要修改应用代码或单独配置连接池吗?

不需要修改应用代码,也无需单独配置连接池。Multigres 内置连接池,你只需使用一个标准的 Postgres 连接字符串即可连接。它会自动解析每个请求并跟踪会话状态,无需手动选择池化模式,同时为每个数据库用户分配独立连接池,并通过公平分享算法分配连接预算。

Multigres 私测版目前有哪些限制?

私测版期间:不可用于生产环境,不提供 uptime SLA;只能在项目创建时启用,无法为现有项目开启,也没有托管路径退回标准 Postgres 项目;不支持 Realtime(因尚不支持逻辑复制);不支持时间点恢复(仅提供标准每日备份);仅限单区域(美国东部弗吉尼亚北部),不支持跨区域只读副本;计算规格、磁盘和副本数在项目创建后不可更改。

如何开始使用 Multigres?费用如何?

首先填写早期访问申请表请求访问权限,Supabase 会逐步邀请组织加入私测,被邀请后 Dashboard 中才会出现选项。然后创建新项目时打开“High availability”开关,设置数据库密码、区域和计算规格,点击创建即可像普通 Supabase 项目一样连接。私测期间每个组织最多两个项目免费,Free 计划不可用,正式发布后定价可能调整。

Multigres 的高可用集群架构是怎样的?

启用 Multigres 的项目会获得一个三节点的 Postgres 集群,节点分布在同一区域的不同可用区,因此单个可用区故障不会导致数据库不可用。主节点故障时,Multigres 会在数秒内提升一个副本。故障转移期间,Multigres 网关可以暂存传入请求,直到新主节点就绪,而不是向应用返回连接错误。

🏷️

标签

➡️

继续阅读