Day 4: Streaming Replication(流复制) – 详细安装步骤

课程概述

PostgreSQL 的 Streaming Replication(流复制)是主从复制的一种形式,允许一个主服务器(Master)将事务日志(WAL)流式传输到一个或多个从服务器(Standby)。从服务器通过这些日志实时更新数据,提供高可用性和读负载分担。

前提要求与准备工作

硬件与软件要求
  1. 服务器配置

    • 主服务器 (Master)从服务器 (Standby) 各 1 台。
    • 每台服务器至少 2 CPU 核心4 GB 内存
    • 每台服务器至少有 20 GB 磁盘空间
    • 操作系统:建议使用 CentOS 7+Ubuntu 20.04+
  2. 网络配置

    • 确保主服务器与从服务器在同一网络内,或通过 VPN 连接。
    • 每台服务器需分配静态 IP。
    • 配置 SSH 访问,并在两台服务器之间配置无密码登录。
  3. PostgreSQL 版本

    • PostgreSQL 13 或 14,确保主从服务器的 PostgreSQL 版本一致。

安装步骤

1. 安装 PostgreSQL 及依赖库

主服务器从服务器 上都需要安装 PostgreSQL 和相关依赖。

CentOS 7+:
  1. 安装 PostgreSQL 的 yum 仓库:

    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  2. 安装 PostgreSQL:

    sudo yum install -y postgresql14 postgresql14-server
  3. 初始化数据库:

    sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
  4. 启动并设置 PostgreSQL 开机自启动:

    sudo systemctl start postgresql-14
    sudo systemctl enable postgresql-14
Ubuntu 20.04+:
  1. 安装 PostgreSQL:

    sudo apt update
    sudo apt install -y postgresql postgresql-contrib
  2. 初始化数据库(大多数情况下会自动初始化):

    sudo systemctl start postgresql
    sudo systemctl enable postgresql
2. 主服务器(Master)配置
  1. 修改 postgresql.conf 配置文件:

    • 路径:/var/lib/pgsql/14/data/postgresql.conf (CentOS) 或 /etc/postgresql/14/main/postgresql.conf (Ubuntu)。
    • 修改以下参数:
      listen_addresses = '*'
      wal_level = replica
      max_wal_senders = 3
      wal_keep_segments = 64
      archive_mode = on
      archive_command = 'cp %p /var/lib/pgsql/14/archive/%f'
  2. 修改 pg_hba.conf 文件,允许从服务器连接:

    • 路径:/var/lib/pgsql/14/data/pg_hba.conf/etc/postgresql/14/main/pg_hba.conf
    • 添加如下行,允许从服务器的 IP 访问:
      host replication all 192.168.1.2/32 md5
  3. 重启 PostgreSQL 服务 使配置生效:

    sudo systemctl restart postgresql-14
  4. 创建复制用户

    • 登录 PostgreSQL:
      sudo -u postgres psql
    • 创建用户并赋予复制权限:
      CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicator_password';
  5. 配置 WAL 归档目录

    • 创建 WAL 归档目录:
      sudo mkdir -p /var/lib/pgsql/14/archive
      sudo chown postgres:postgres /var/lib/pgsql/14/archive
3. 从服务器(Standby)配置
  1. 停止 PostgreSQL 服务

    sudo systemctl stop postgresql-14
  2. 清除现有的数据库数据目录

    sudo rm -rf /var/lib/pgsql/14/data/*
  3. 从主服务器同步数据
    使用 pg_basebackup 从主服务器复制数据:

    sudo -u postgres pg_basebackup -h 192.168.1.1 -D /var/lib/pgsql/14/data/ -P -U replicator --wal-method=stream
    • 参数说明:
      • -h: 主服务器的 IP 地址。
      • -D: 数据存放目录。
      • -U: 复制用户。
  4. 配置从服务器的 recovery.conf 文件
    在数据目录下创建 standby.signal 文件,以指示这是一个从服务器,并编辑 postgresql.auto.conf 文件:

    touch /var/lib/pgsql/14/data/standby.signal

    编辑 postgresql.auto.conf 文件:

    echo "primary_conninfo = 'host=192.168.1.1 port=5432 user=replicator password=replicator_password'" >> /var/lib/pgsql/14/data/postgresql.auto.conf
  5. 启动从服务器

    sudo systemctl start postgresql-14
  6. 验证复制状态
    在主服务器上,运行以下 SQL 查看复制状态:

    SELECT * FROM pg_stat_replication;

    应该看到从服务器的 IP 地址及其复制进度。

4. 高可用与故障转移配置(可选)
  1. 自动故障转移工具
    可以使用第三方工具(如 repmgrPatroni)实现自动故障转移。

  2. 手动故障转移
    在主服务器发生故障时,可以将从服务器提升为主服务器,步骤如下:

    • 停止从服务器:
      sudo systemctl stop postgresql-14
    • 删除 standby.signal 文件:
      sudo rm /var/lib/pgsql/14/data/standby.signal
    • 启动 PostgreSQL 服务:
      sudo systemctl start postgresql-14
    • 现在该服务器已经变为主服务器。

总结

通过以上步骤,您可以成功设置 PostgreSQL 的 Streaming Replication(流复制)。这种配置可以为数据库提供实时的高可用性,并且可以分担读负载,适用于各种需要高可靠性的生产环境。

作者:严锋  创建时间:2024-10-19 12:04
最后编辑:严锋  更新时间:2025-05-09 15:48