温馨提示×

debian postgresql怎么设主从

小樊
47
2026-10-22 23:23:59
栏目: 云计算

在 Debian 上配置 PostgreSQL 主从(通常叫 流复制 / Streaming Replication),下面给你一套实战可用、较通用的步骤(以 PostgreSQL 15/16 为例,Debian 11/12 适用)。


一、环境假设

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

版本号按你实际安装修改(如 14、15、16)


二、主库配置(Primary)

1. 安装 PostgreSQL

sudo apt update
sudo apt install postgresql postgresql-client

2. 修改 postgresql.conf

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

关键参数:

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

3. 修改 pg_hba.conf

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

末尾添加:

# 允许从库复制
host    replication     replicator      192.168.1.11/32    md5

4. 创建复制用户

sudo -u postgres psql
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD '强密码';

5. 重启主库

sudo systemctl restart postgresql

三、从库配置(Standby)

1. 安装 PostgreSQL(不初始化数据)

sudo apt install postgresql
sudo systemctl stop postgresql

2. 清空从库数据目录

sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/16/main/*

3. 使用 pg_basebackup 拉取主库数据

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

4. 创建 standby 配置文件

sudo nano /var/lib/postgresql/16/main/standby.signal

内容为空即可(PostgreSQL 12+ 用这个文件标识从库)

5. 配置从库 postgresql.conf

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

添加:

primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=强密码'
hot_standby = on

6. 启动从库

sudo systemctl start postgresql

四、验证主从状态

主库查看

sudo -u postgres psql
SELECT * FROM pg_stat_replication;

看到从库信息即成功。

从库查看

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

返回 t 表示从库正常。


五、常见问题

1. 连接被拒绝

  • 防火墙放行 5432
  • listen_addresses 不是 localhost

2. 复制用户连不上

  • pg_hba.conf 是否 reload
  • 密码是否正确

3. 数据不同步

  • 从库必须 完全来自 pg_basebackup
  • 不要手动改从库数据

六、可选增强

  • 自动故障切换:Patroni / repmgr
  • 延迟从库
  • 同步复制(synchronous_commit)

如果你告诉我:

  • PostgreSQL 版本
  • Debian 版本
  • 是否用 Docker

我可以给你更针对性的配置。

0 踩