温馨提示×

debian postgresql如何设主从

小樊
49
2026-09-23 17:51:00
栏目: 云计算

在 Debian 上配置 PostgreSQL 主从(常称 流复制 / Streaming Replication)一般分为以下几步。以下以 Debian 11/12 + PostgreSQL 15/16 为例,主库叫 Primary,从库叫 Standby。


一、环境准备

假设:

  • 主库 IP:192.168.1.10
  • 从库 IP:192.168.1.20
  • PostgreSQL 数据目录:/var/lib/postgresql/15/main
  • 配置文件目录:/etc/postgresql/15/main

两台机器都安装 PostgreSQL:

sudo apt update
sudo apt install postgresql postgresql-client

二、主库配置(Primary)

1. 修改 postgresql.conf

sudo nano /etc/postgresql/15/main/postgresql.conf

关键参数:

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

2. 配置 pg_hba.conf

允许从库连接:

sudo nano /etc/postgresql/15/main/pg_hba.conf

添加:

host    replication     replicator      192.168.1.20/32    md5

3. 创建复制账号

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

4. 重启主库

sudo systemctl restart postgresql

三、从库配置(Standby)

1. 停止从库 PostgreSQL

sudo systemctl stop postgresql

2. 清空数据目录

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

3. 使用 pg_basebackup 初始化

sudo -u postgres pg_basebackup \
  -h 192.168.1.10 \
  -U replicator \
  -D /var/lib/postgresql/15/main \
  -Fp -Xs -P -R

参数说明:

  • -R:自动生成 standby.signal
  • -Xs:流式复制 WAL

4. 检查从库配置

确认存在:

/var/lib/postgresql/15/main/standby.signal

postgresql.auto.conf 中应有:

primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=yourpassword'

5. 启动从库

sudo systemctl start postgresql

四、验证主从状态

主库执行:

sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"

应能看到从库连接。

从库执行:

sudo -u postgres psql -c "SELECT pg_is_in_recovery();"

返回:

 pg_is_in_recovery
-------------------
 t

五、可选增强

  • 同步复制(更强一致性)
    主库:
    synchronous_standby_names = 'standby1'
    
  • 延迟复制
  • 自动故障切换(Patroni / repmgr)

如果你告诉我:

  • PostgreSQL 版本
  • Debian 版本
  • 是否用 Docker / 云环境

我可以给你更精确的步骤或一键脚本。

0 踩