AWS pgactive 项目快速入门:构建Active-Active PostgreSQL集群指南
前言
在现代分布式系统中,实现数据库的高可用性和读写分离是常见需求。AWS pgactive项目提供了一种创新的解决方案,能够在多个PostgreSQL实例之间建立Active-Active(双活)复制关系,使每个节点都能同时处理读写请求。本文将详细介绍如何使用pgactive快速搭建一个Active-Active PostgreSQL集群。
环境准备
在开始之前,您需要准备以下环境:
- 至少两个运行PostgreSQL 12或更高版本的实例
- 确保这些实例之间能够通过网络互相访问
- 确保每个实例的
shared_preload_libraries
参数已包含pgactive
基础配置
1. 创建应用数据库
在每个PostgreSQL实例上执行以下命令创建应用数据库:
CREATE DATABASE app;
2. 记录实例网络端点
为方便后续操作,记录下两个PostgreSQL实例的网络端点地址,我们分别称之为endpoint1
和endpoint2
。
配置第一个节点(endpoint1)
1. 验证pgactive加载
首先确认pgactive已正确加载:
SELECT setting ~ 'pgactive'
FROM pg_catalog.pg_settings
WHERE name = 'shared_preload_libraries';
预期输出应为t
(true)。
2. 创建测试表和初始数据
CREATE SCHEMA inventory;
CREATE TABLE inventory.products (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
product_name text NOT NULL,
created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO inventory.products (product_name)
VALUES ('soap'), ('shampoo'), ('conditioner');
3. 安装pgactive扩展
CREATE EXTENSION IF NOT EXISTS pgactive;
4. 配置连接信息
pgactive使用PostgreSQL的Foreign Data Wrapper功能来安全地管理节点间连接。在endpoint1上配置两个节点的连接信息:
-- endpoint1的连接信息
CREATE SERVER pgactive_server_endpoint1
FOREIGN DATA WRAPPER pgactive_fdw
OPTIONS (host '<endpoint1>', dbname 'app');
CREATE USER MAPPING FOR postgres
SERVER pgactive_server_endpoint1
OPTIONS (user 'postgres', password '<password>');
-- endpoint2的连接信息
CREATE SERVER pgactive_server_endpoint2
FOREIGN DATA WRAPPER pgactive_fdw
OPTIONS (host '<endpoint2>', dbname 'app');
CREATE USER MAPPING FOR postgres
SERVER pgactive_server_endpoint2
OPTIONS (user 'postgres', password '<password>');
5. 创建复制组并加入第一个节点
SELECT pgactive.pgactive_create_group(
node_name := 'endpoint1-app',
node_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint1'
);
SELECT pgactive.pgactive_wait_for_node_ready();
配置第二个节点(endpoint2)
1. 验证pgactive加载
同样先确认pgactive已正确加载:
SELECT setting ~ 'pgactive'
FROM pg_catalog.pg_settings
WHERE name = 'shared_preload_libraries';
2. 安装pgactive扩展
CREATE EXTENSION IF NOT EXISTS pgactive;
3. 配置连接信息
在endpoint2上同样配置两个节点的连接信息:
-- endpoint1的连接信息
CREATE SERVER pgactive_server_endpoint1
FOREIGN DATA WRAPPER pgactive_fdw
OPTIONS (host '<endpoint1>', dbname 'app');
CREATE USER MAPPING FOR postgres
SERVER pgactive_server_endpoint1
OPTIONS (user 'postgres', password '<password>');
-- endpoint2的连接信息
CREATE SERVER pgactive_server_endpoint2
FOREIGN DATA WRAPPER pgactive_fdw
OPTIONS (host '<endpoint2>', dbname 'app');
CREATE USER MAPPING FOR postgres
SERVER pgactive_server_endpoint2
OPTIONS (user 'postgres', password '<password>');
4. 加入复制组
SELECT pgactive.pgactive_join_group(
node_name := 'endpoint2-app',
node_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint2',
join_using_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint1'
);
SELECT pgactive.pgactive_wait_for_node_ready();
执行此命令后,pgactive会开始同步数据库。同步完成后,您可以在endpoint2上验证数据是否已同步:
SELECT count(*) FROM inventory.products;
预期结果为3,与endpoint1上的记录数一致。
测试Active-Active功能
1. 在endpoint2上插入新数据
INSERT INTO inventory.products (product_name)
VALUES ('lotion');
2. 在endpoint1上验证数据同步
SELECT count(*) FROM inventory.products;
预期结果为4,确认新数据已成功同步。
监控与维护
1. 监控复制延迟
复制延迟是Active-Active架构中需要重点监控的指标。pgactive提供了专用函数来查看集群的复制延迟信息:
SELECT * FROM pgactive.pgactive_get_replication_lag_info();
建议设置以下告警:
- 当active状态为false时告警
- 当pending_wal_decoding持续增长时告警
- 当pending_wal_to_apply持续增长时告警
2. 处理写冲突
在Active-Active架构中,当两个节点同时修改同一行数据时会产生冲突。pgactive默认采用"最后更新获胜"的策略解决冲突,并将所有冲突记录在pgactive.pgactive_conflict_history
表中。
查看冲突历史:
SELECT * FROM pgactive.pgactive_conflict_history;
如果自动解决的冲突结果不符合预期,管理员可以手动执行UPDATE语句修正数据。
清理资源
当不再需要Active-Active集群时,可以按照以下步骤清理:
- 从组中分离节点:
SELECT pgactive.pgactive_detach_nodes(ARRAY['endpoint1-app', 'endpoint2-app']);
- 在每个节点上禁用pgactive:
SELECT pgactive.pgactive_remove();
- 删除pgactive扩展:
DROP EXTENSION pgactive;
总结
通过AWS pgactive项目,我们可以轻松构建高可用的Active-Active PostgreSQL集群。本文详细介绍了从环境准备、节点配置到监控维护的全过程。在实际生产环境中,建议特别注意复制延迟监控和冲突处理策略,确保数据的一致性和系统的稳定性。
PaddleOCR-VL
PaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00- DDeepSeek-V3.2-ExpDeepSeek-V3.2-Exp是DeepSeek推出的实验性模型,基于V3.1-Terminus架构,创新引入DeepSeek Sparse Attention稀疏注意力机制,在保持模型输出质量的同时,大幅提升长文本场景下的训练与推理效率。该模型在MMLU-Pro、GPQA-Diamond等多领域公开基准测试中表现与V3.1-Terminus相当,支持HuggingFace、SGLang、vLLM等多种本地运行方式,开源内核设计便于研究,采用MIT许可证。【此简介由AI生成】Python00
openPangu-Ultra-MoE-718B-V1.1
昇腾原生的开源盘古 Ultra-MoE-718B-V1.1 语言模型Python00HunyuanWorld-Mirror
混元3D世界重建模型,支持多模态先验注入和多任务统一输出Python00AI内容魔方
AI内容专区,汇集全球AI开源项目,集结模块、可组合的内容,致力于分享、交流。03Spark-Scilit-X1-13B
FLYTEK Spark Scilit-X1-13B is based on the latest generation of iFLYTEK Foundation Model, and has been trained on multiple core tasks derived from scientific literature. As a large language model tailored for academic research scenarios, it has shown excellent performance in Paper Assisted Reading, Academic Translation, English Polishing, and Review Generation, aiming to provide efficient and accurate intelligent assistance for researchers, faculty members, and students.Python00GOT-OCR-2.0-hf
阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00- HHowToCook程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).Dockerfile013
- PpathwayPathway is an open framework for high-throughput and low-latency real-time data processing.Python00
热门内容推荐
最新内容推荐
项目优选









