从0到1,PostgreSQL复制的不同策略详解( 二 )


CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSword 'example_password';用户在查询时 , 必须提供密码和用户名 。REPLICATION 关键字用于为用户提供所需的权限 。示例如下:
CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';第二步:配置流属性
接下来 , 使用 PostgreSQL 配置文件 ( postgresql.conf )配置流媒体属性 , 如下:
wal_level = logicalwal_log_hints = onmax_wal_senders = 8max_wal_size = 1GBhot_standby = on配置解析:

  • wal_level:此参数用于启用 PostgreSQL 流复制 , 值包括minimal、replica或logical 。
  • wal_log_hints:控制在 WAL 日志文件中是否包含有关写入哪个数据文件的提示信息 。当该参数设置为 ON 时 , WAL 日志中的每个记录将包含有关数据文件的信息 , 以便在进行数据库恢复时可以更快地定位需要恢复的数据 。当备用服务器与主服务器不同步时 , 此参数是pg_rewind 功能所必需的 。
  • max_wal_senders:指定可以与备用服务器建立的最大并发连接数 。
  • max_wal_size:指定可保留在日志文件中的 WAL 文件的大小 。
  • hot_standby:当它设置为 ON 时 , 可以利用此参数与辅助设备建立读取连接 。
第三步:创建新条目修改 postgresql.conf 文件中的参数后 ,  pg_hba.conf 文件中的新 replication 条目可以允许服务器相互建立连接以进行复制 。
可以在 PostgreSQL 的数据目录中找到这个文件 , 配置条目如下:
host replication rep_user IPaddress md5执行以下代码片段后 , 主服务器就允许调用的用户(rep_user)通过使用指定的 IP 进行连接并充当备用服务器进行复制 。示例:
host replication rep_user 192.168.0.22/32 md5配置备节点步骤 1:备份主节点要配置备用节点 , 需要用 pg_basebackup 程序生成主节点的备份 , 这将作为备用节点的起点 。命令如下:
pg_basebackp -D-h-X stream -c fast -U rep_user -W上述语法中使用的参数如下:
  • -h:主要主机 。
  • -D:表示当前正在处理的目录 。
  • -C:设置检查点 。
  • -X:此参数可用于包含必要的事务日志文件 。
  • -W:设置用户在连接到数据库之前提示用户输入密码 。
步骤 2:设置复制节点配置文件接下来 , 我们需要检查复制配置文件是否存在 。如果没有 , 生成复制配置文件 , 名称为:recovery.conf 。
在 PostgreSQL 安装的数据目录中创建此文件 , 也可以用 pg_basebackup 程序-R 选项自动生成 。
recovery.conf文件应包含以下命令:
standby_mode = 'on'primary_conninfo = 'host=<master_host> port=<postgres_port> user=<replication_user> password=<password> Application_name="host_name"'recovery_target_timeline = 'latest'上述命令中使用的参数如下:
  • primary_conninfo:通过利用连接字符串在主服务器和辅助服务器之间建立连接 。
  • standby_mode:通过启用"pg_standby_mode"模式 , 备用服务器可以在主服务器失效时 , 接管主服务器的职责 , 确保数据的可用性和持久性 。
  • recovery_target_timeline:设置恢复时间线 。在数据库恢复时 , 需要指定恢复的时间线 , 以便将备份数据正确地还原到指定的时间点 。
要建立连接 , 需要提供用户名、IP 地址和密码作为 primary_conninfo 参数的值 。示例:
primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'步骤 3:重新启动备份服务器最后 , 重新启动备份服务器以完成配置过程 。
然而 , 流复制会带来一些挑战 , 例如: