温馨提示×

debian postgresql怎么配主从

小樊
56
2026-10-02 12:02:52
栏目: 云计算

下面以 Debian + PostgreSQL(以 14/15 为例) 说明最常用、稳定的 流复制(Streaming Replication)主从配置 方法。


一、环境假设

  • 主库(Primary):192.168.1.10
  • 从库(Standby):192.168.1.11
  • PostgreSQL 数据目录:/var/lib/postgresql/15/main
  • 配置文件目录:/etc/postgresql/15/main

主从版本必须一致(小版本也要尽量一致)


二、主库配置(Primary)

1. 修改 postgresql.conf

listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on

2. 修改 pg_hba.conf

允许从库通过复制协议连接:

host    replication     all         192.168.1.11/32     md5

3. 创建复制用户

sudo -u postgres psql
CREATE ROLE repluser WITH REPLICATION PASSWORD 'yourpassword' LOGIN;

4. 重启 PostgreSQL

sudo systemctl restart postgresql

三、从库配置(Standby)

1. 停止 PostgreSQL

sudo systemctl stop postgresql

2. 清空数据目录

rm -rf /var/lib/postgresql/15/main/*

3. 使用 pg_basebackup 拉取主库数据

sudo -u postgres pg_basebackup \
  -h 192.168.1.10 \
  -U repluser \
  -D /var/lib/postgresql/15/main \
  -P -R -X stream

参数说明:

  • -R:自动生成 standby.signal
  • -X stream:实时拉 WAL

4. 启动从库

sudo systemctl start postgresql

四、验证主从状态

主库执行:

SELECT * FROM pg_stat_replication;

应能看到从库连接信息。

从库执行:

SELECT pg_is_in_recovery();

返回 t 表示从库(只读)。


五、常见问题

1. 从库是否可写?

❌ 不可以(默认只读)

2. 主挂了怎么办?

  • 手动提升从库:
pg_ctl promote
  • 或用 repmgr / Patroni 做自动故障切换

3. Debian 防火墙

确保端口开放:

sudo ufw allow 5432

六、可选增强

  • ✅ 异步 / 同步复制
  • ✅ 延迟从库(delay standby)
  • ✅ 级联复制
  • ✅ 自动 failover(repmgr / patroni)

如果你告诉我:

  • PostgreSQL 版本
  • Debian 版本
  • 是否要 同步复制 / 自动切换

我可以给你更精确的配置。

0 踩