PostgreSQL 中的复制

  • 配置主服务器

    • 要求:

      • 复制用户进行复制活动
      • 用于存储 WAL 档案的目录
    • 创建复制用户

      createuser -U postgres replication -P -c 5 --replication

        + option -P will prompt you for new password
        + option -c is for maximum connections. 5 connections are enough for replication
        + -replication will grant replication privileges to the user
      
    • 在数据目录中创建存档目录

      mkdir $PGDATA/archive

    • 编辑 pg_hba.conf 文件

      这是主机基本身份验证文件,包含客户端自动身份验证的设置。添加以下条目:

            #hosttype    database_name     user_name       hostname/IP      method
             host        replication       replication     <slave-IP>/32    md5
      
    • 编辑 postgresql.conf 文件

      这是 PostgreSQL 的配置文件。

      wal_level = hot_standby

      此参数决定从属服务器的行为。

         `hot_standby` logs what is required to accept read only queries on slave server.
      
         `streaming` logs what is required to just apply the WAL's on slave.
      
         `archive` which logs what is required for archiving.
      

      archive_mode=on

      此参数允许使用 archive_command 参数将 WAL 段发送到存档位置。

      archive_command = 'test ! -f /path/to/archivedir/%f && cp %p /path/to/archivedir/%f'

      基本上,archive_command 的作用是将 WAL 段复制到存档目录。

      wal_senders = 5 这是 WAL 发送方进程的最大数量。

      现在重启主服务器。

  • 将 primay 服务器备份到从属服务器

    在服务器上进行更改之前,请停止主服务器。

要点:在完成所有配置和备份步骤之前,请勿再次启动该服务。你必须将备用服务器置于准备好作为备份服务器的状态。这意味着必须安装所有配置设置,并且必须已同步数据库。否则,流复制将无法启动

  • 现在运行 pg_basebackup 实用程序

    pg_basebackup 实用程序将数据从主服务器数据目录复制到从数据目录。

    $ pg_basebackup -h <primary IP> -D /var/lib/postgresql/<version>/main -U replication -v -P --xlog-method=stream

    -D: This is tells pg_basebackup where to the initial backup

    -h: Specifies the system where to look for the primary server

    -xlog-method=stream: This will force the pg_basebackup to open another connection and stream enough xlog while backup is running.
                         It also ensures that fresh backup can be started without failing back to using an archive.
  • 配置备用服务器

    要配置备用服务器,你将编辑 postgresql.conf 并创建名为 recovery.conf 的新配置文件。

    hot_standby = on

    这指定是否允许你在恢复时运行查询

    • 创建 recovery.conf 文件

      standby_mode = on

      将连接字符串设置为主服务器。替换为主服务器的外部 IP 地址。替换为名为 replication 的用户的密码

      `primary_conninfo =‘host = port = 5432 user = replication password =’

      (可选)设置触发器文件位置:

      trigger_file = '/tmp/postgresql.trigger.5432'

      你指定的 trigger_file 路径是你希望系统故障转移到备用服务器时可以添加文件的位置。文件的存在触发故障转移。或者,你可以使用 pg_ctl promote 命令来触发故障转移。

  • 启动备用服务器

    你现在已经准备就绪,并准备启动备用服务器

归因

本文主要源于并归因于如何设置 PostgreSQL 以实现高可用性和热备份复制,并对格式和示例进行了微小更改,并删除了一些文本。该来源是在知识共享公共许可证 3.0下发布的,该许可证在此处进行了维护。