使用Londiste3实现PostgreSQL简单复制方案指南
2025-07-07 20:51:26作者:丁柯新Fawn
概述
本文将详细介绍如何使用pgq/skytools-legacy项目中的Londiste3工具实现PostgreSQL数据库的简单复制方案。Londiste3是一个基于PGQ队列系统的PostgreSQL复制工具,它能够实现表级别的数据复制,非常适合需要灵活复制策略的场景。
准备工作
环境要求
- 至少两台PostgreSQL服务器(主节点和从节点)
- 已安装pgq/skytools-legacy工具集
- 网络连接畅通,主从节点可以互相访问
数据库初始化
首先我们需要在主节点上创建测试数据库并初始化数据:
CREATE DATABASE l3simple;
构建测试环境
使用pgbench创建测试数据
pgbench是PostgreSQL自带的基准测试工具,我们可以用它快速生成测试数据:
pgbench -i -s 2 -F 80 l3simple
参数说明:
-i表示初始化模式-s 2设置比例因子为2-F 80设置填充因子为80
优化表结构
标准pgbench模式缺少历史表的主键,而Londiste3复制需要主键。我们还需要添加外键约束以增强数据完整性:
-- 为历史表添加主键
ALTER TABLE pgbench_history ADD COLUMN hid SERIAL PRIMARY KEY;
-- 添加外键约束
ALTER TABLE pgbench_tellers ADD CONSTRAINT pgbench_tellers_branches_fk FOREIGN KEY(bid) REFERENCES pgbench_branches;
ALTER TABLE pgbench_accounts ADD CONSTRAINT pgbench_accounts_branches_fk FOREIGN KEY(bid) REFERENCES pgbench_branches;
ALTER TABLE pgbench_history ADD CONSTRAINT pgbench_history_branches_fk FOREIGN KEY(bid) REFERENCES pgbench_branches;
ALTER TABLE pgbench_history ADD CONSTRAINT pgbench_history_tellers_fk FOREIGN KEY(tid) REFERENCES pgbench_tellers;
ALTER TABLE pgbench_history ADD CONSTRAINT pgbench_history_accounts_fk FOREIGN KEY(aid) REFERENCES pgbench_accounts;
配置从节点
创建从库
psql -d postgres -c "CREATE DATABASE l3simple_db2;"
pg_dump -s l3simple_db1 | psql l3simple_db2
配置Londiste3复制
主节点配置
创建主节点配置文件st3simple/st3_l3simple_primary.ini:
[londiste3]
job_name = st3_l3simple_db1
db = dbname=l3simple_db1
queue_name = replika
logfile = st3simple/log/st3_l3simple_db1.log
pidfile = st3simple/pid/st3_l3simple_db1.pid
创建根节点
londiste3 st3simple/st3_l3simple_primary.ini create-root node1 "dbname=l3simple host=10.199.59.194"
启动主节点工作进程
londiste3 -d st3simple/st3_l3simple_primary.ini worker
配置从节点
从节点配置文件
创建st3simple/st3_l3simple_leaf.ini:
[londiste3]
job_name = st3_l3simple_leaf
db = dbname=l3simple
queue_name = replika
logfile = st3simple/log/st3_l3simple_leaf.log
pidfile = st3simple/pid/st3_l3simple_leaf.pid
初始化从节点
londiste3 st3simple/st3_l3simple_leaf.ini create-leaf node2 dbname=l3simple --provider="dbname=l3simple host=10.199.59.194"
启动从节点工作进程
londiste3 -d st3simple/st3_l3simple_leaf.ini worker
配置PGQ ticker
ticker配置文件
创建st3simple/pgqd.ini:
[pgqd]
logfile = st3simple/log/pgqd.log
pidfile = st3simple/pid/pgqd.pid
启动ticker进程
pgqd -d st3simple/pgqd.ini
添加表到复制集
londiste3 st3simple/st3_l3simple_primary.ini add-table --all
londiste3 st3simple/st3_l3simple_leaf.ini add-table --all
测试复制
生成测试负载
pgbench -T 10 -c 5 l3simple
验证数据一致性
londiste3 st3simple/st3_l3simple_leaf.ini compare
输出示例:
2011-12-25 08:24:42,138 29189 INFO Locking public.pgbench_accounts
2011-12-25 08:24:42,147 29189 INFO Syncing public.pgbench_accounts
2011-12-25 08:24:45,233 29189 INFO Counting public.pgbench_accounts
2011-12-25 08:24:46,154 29189 INFO srcdb: 200000 rows, checksum=3864719477
2011-12-25 08:24:46,953 29189 INFO dstdb: 200000 rows, checksum=3864719477
...
总结
通过以上步骤,我们成功搭建了一个基于Londiste3的PostgreSQL主从复制环境。Londiste3提供了表级别的复制粒度,使得复制策略更加灵活。在实际生产环境中,您可以根据业务需求选择性地复制特定表,或者配置更复杂的复制拓扑结构。
关键点回顾:
- 确保所有需要复制的表都有主键
- 正确配置主从节点的连接信息
- 按顺序启动各个组件(ticker、主节点worker、从节点worker)
- 使用compare命令验证数据一致性
这种复制方案特别适合需要灵活控制复制内容的场景,以及需要将不同表复制到不同目标的复杂业务需求。
登录后查看全文
热门项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0159- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
hotgoHotGo 是一个基于 vue 和 goframe2.0 开发的全栈前后端分离的开发基础平台和移动应用平台,集成jwt鉴权,动态路由,动态菜单,casbin鉴权,消息队列,定时任务等功能,提供多种常用场景文件,让您把更多时间专注在业务开发上。Go02
项目优选
收起
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
596
3.98 K
Ascend Extension for PyTorch
Python
433
516
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
913
749
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
365
237
暂无简介
Dart
837
204
昇腾LLM分布式训练框架
Python
130
153
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
128
173
React Native鸿蒙化仓库
JavaScript
321
371
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
111
165
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.45 K
809