Spock 安装指南:源码编译与 pgEdge 包部署两种方式对比

Spock 安装指南:源码编译与 pgEdge 包部署两种方式对比

【免费下载链接】spock Logical multi-master PostgreSQL replication 【免费下载链接】spock 项目地址: https://gitcode.com/gh_mirrors/spock3/spock

Spock 安装是搭建 PostgreSQL 多主复制集群的第一步,也是许多新手最先遇到的坎。Spock 是一款面向 PostgreSQL 15~19 的开源多主(active-active)逻辑复制扩展,基于 pgLogical 项目构建,支持双向写入、自动 DDL 复制、冲突解决等企业级特性。面对 Spock 安装,很多人纠结:选开箱即用的 pgEdge 包部署,还是从源码一步步编译?这篇文章用一份通俗易懂的 Spock 安装指南,从适用人群、操作步骤、维护成本三个角度对比两种方式,帮你快速选对路径、少走弯路。

认识 Spock:专为 PostgreSQL 多主复制而生 🚀

简单说,Spock 让多个 PostgreSQL 节点可以同时读写同一批数据,任何节点的修改都会实时同步到其他节点,实现「多主(multi-master)复制」。它常被用来搭建高可用、多活的数据架构,比如跨机房的双活集群。

与普通逻辑复制相比,Spock 的几个亮点很实用:

  • ✅ 双向(多主)复制:每个节点既是发布者也是订阅者
  • ✅ 自动 DDL 复制:建表、加字段自动同步到全集群
  • ✅ 冲突检测与解决:内置多种冲突策略,保障数据一致
  • ✅ 在线加节点:配合 Zodan 工具可无停机扩容

想要进一步了解,可翻阅项目内的官方文档:docs/index.mddocs/install_spock.mddocs/getting_started.md

方式一:pgEdge 包部署——最快最稳的 Spock 安装方式 ⚡

如果你是新手,或者希望在生产环境快速落地,pgEdge 包部署是首选。它的思路很简单:通过系统包管理器(dnf/apt)安装 pgEdge 提供的 PostgreSQL 发行版,Spock 扩展已经随包内置,装完即可启用,全程只需几分钟。

一键安装步骤(以 PostgreSQL 18 为例)

第一步:添加 pgEdge 软件源。 Debian/Ubuntu 系执行:

sudo curl -sSL https://apt.pgedge.com/repodeb/pgedge-release_latest_all.deb -o /tmp/pgedge-release.deb
sudo dpkg -i /tmp/pgedge-release.deb
sudo apt update

RHEL/Rocky/AlmaLinux 系则先安装 EPEL 仓库,再执行 sudo dnf install 相关命令。

第二步:安装 PostgreSQL 与 Spock 扩展包。

# Debian/Ubuntu
sudo apt install -y pgedge-postgres18-server pgedge-postgres18-contrib pgedge-spock18

# RHEL/Rocky/AlmaLinux
sudo dnf install -y pgedge-postgres18-server pgedge-postgres18-contrib pgedge-spock18

第三步:初始化数据库集群并启动服务。

sudo /usr/pgsql-18/bin/postgresql-18-setup initdb
sudo systemctl enable postgresql-18
sudo systemctl start postgresql-18

pgEdge 包部署能获得什么 🎁

除了 Spock 本身,pgEdge 发行版还自动集成了多款运维利器,省去大量手工装配工作:

  • Spock 扩展与全部管理函数(预装待启用)
  • ACE 一致性监控、Snowflake 序列
  • pgBackRest 备份恢复、LOLOR 大对象支持
  • 面向多活集群的一整套管理工具

包依赖关系可参考 pkg/rpm/spock.specpkg/deb/debian/control.in,可以看到 Spock 包的编译与依赖被完全托管,升级也只需一条 dnf update,非常省心。

方式二:源码编译安装 Spock——灵活但门槛更高 🔧

如果你需要定制内核、深度调优,或想研究 Spock 内部实现,可以选择源码编译。注意:Spock 必须构建在经过补丁处理的 PostgreSQL 源码之上,这也是它与普通扩展最大的不同。

源码编译前提条件

  1. 下载与目标版本一致的 PostgreSQL 源码(15~19 均可)
  2. 安装 jansson 库(Spock 的依赖)
  3. 准备编译工具链(gcc、make 等)

最快编译方法(五步走)

第一步:获取 Spock 源码。 克隆仓库:

git clone https://gitcode.com/gh_mirrors/spock3/spock

第二步:应用版本补丁。 项目 patches/ 目录下按 PostgreSQL 大版本分目录存放了补丁文件,例如 patches/15/patches/18/。把对应版本的 .diff 文件依次拷入 PostgreSQL 源码根目录并按数字前缀顺序应用:

patch -p1 < pg18-015-attoptions.diff

第三步:编译安装补丁版 PostgreSQLconfigure && make && make install),完成后把 pg_config 所在目录加入 PATH:

export PATH=/path/to/pg_config_dir:$PATH

第四步:编译安装 Spock 扩展。

cd spock
make
make install

第五步:验证产物。 安装成功后,share/extension/ 下会出现 spock.control 与升级脚本(如 sql/spock--6.0.0.sql),可执行 make check 跑回归测试确认环境无误。

两种 Spock 安装方式对比一览 📊

对比维度pgEdge 包部署源码编译安装
安装难度⭐ 低,命令即装⭐⭐⭐ 高,需打补丁
耗时5~10 分钟1 小时以上
适用人群新手、生产环境高级用户、定制化场景
升级维护包管理器一条命令需重新编译
附带组件ACE、pgBackRest 等全家桶仅 Spock 本体
灵活性较低高,可深度定制

安装后统一配置:让 Spock 跑起来 ⚙️

无论哪种方式,装完后都要做同样的配置。编辑 postgresql.conf,追加以下参数:

wal_level = logical
max_worker_processes = 10
max_replication_slots = 10
max_wal_senders = 10
shared_preload_libraries = 'spock'
track_commit_timestamp = on

💡 小提示:PostgreSQL 18+ 新增了 max_active_replication_origins 参数单独控制复制来源状态,默认值 10 在多订阅场景可能不够,建议按订阅数酌情调大。

重启服务后连接数据库,创建扩展:

CREATE EXTENSION spock;

接着用 spock.node_create 注册节点、spock.repset_add_all_tables 加入复制集、spock.sub_create 建立订阅,一个多主复制集群就上线了。完整的分步演练可参考 docs/getting_started.md

Spock 安装常见问题 FAQ ❓

Q:源码编译时提示找不到 jansson? 先安装 jansson 开发库(如 libjansson-dev / jansson-devel),再重新编译。

Q:补丁打不上或顺序错了? 必须严格按补丁文件名前缀的数字顺序应用,且确保 PostgreSQL 源码版本与补丁目录(15~19)完全对应。

Q:订阅一直卡在初始化? 多半是 max_replication_slotsmax_wal_senders 设置偏小,适当调大后重启。

Q:想了解升级注意事项? 可查阅 docs/upgrading_spock.md,升级前务必做好备份。

总结:如何选择?🤔

  • 追求省心、快速上线、生产环境 → 选 pgEdge 包部署,这也是官方推荐的安装路径
  • 需要深度定制、学习内核机制、参与开发 → 选源码编译安装,灵活度更高

无论选哪条路,Spock 安装完成后你都将拥有一个强大的 PostgreSQL 多主复制集群。动手试试吧,从 docs/getting_started.md 的双节点集群教程开始,很快就能看到数据在节点间实时流转的奇妙效果!🖖

【免费下载链接】spock Logical multi-master PostgreSQL replication 【免费下载链接】spock 项目地址: https://gitcode.com/gh_mirrors/spock3/spock

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值