美文网首页
pg_basebackup方式部署流复制

pg_basebackup方式部署流复制

作者: Hmcf | 来源:发表于2019-11-27 14:57 被阅读0次

    回顾一下之前的在线热备,有以下三个步骤:
    1、主库执行pg_start_backup('hmcbk')
    2、拷贝主库的$PGDATA数据文件和表空间到备份节点
    3、主库执行pg_stop_backup()

    而pg_basebackup可以整合这几个步骤。(前提是主库部分的postgresql.conf内容正常配置,创建好流复制用户和修改好pg_hba)。

    开始--------------------------------------------------------------
    备库执行命令

    pg_basebackup -D /data/pgdata -Fp -Xs -v -P -h 172.17.0.2 -p 5432 -U repuser
    

    重要参数解释:

    • -D 指定数据目录,尽量和主库保持一致。
    • -F 指定生成的备份数据格式,有两个选项(t、p)
      t:(tar)格式是指将备份文件打个tar包存放在-D指定的目录里,系统文件被打成了base.tar,其它表空间文件被打成了oid.tar,其中oid为表空间的oid。此选项适用于备份存档。
      p: (plain)格式是指生成的备份数据和主库上的数据文件布局一样,也就是和主库上一样。
    • -X 设置在备份的过程中产生的wal日志包含在备份中的方式,有两个选项(f、s)。
      f: (fetch)是指wal日志在基准备份完成后被传送备份节点,这时主库上的wal_keep_segments参数需要设置的较大,以免备份过程中产生的wal还没发送到备份节点之前的就备主库覆盖了,那么将会失败。
      s: (stream)方式中主库上除了启动一个基准备份的wal发送进程外还会额外启动一个wal发送进程用于发送主库产生的wal增量日志流,生产环境推荐此种方式。
    • -v 表示启用verbose模式,命令执行过程中打印出各阶段的日志。
    • -P 显示数据文件、表空间文件近似传输百分比,可以了解进度。
    • -h -p -U这些都是数据库连接通用参数。

    然后再创建recovery.conf文件。
    文件内容

    recovery_target_timeline = 'latest'
    standby_mode = on
    primary_conninfo = 'host=172.17.0.2 port=5432 user=repuser'
    

    这里没有直接写明文密码,我们在~.pgpass文件下添加内容。
    内容如下

    [postgres@pgslave ~]$ cat .pgpass
    172.17.0.2:5432:replication:repuser:12345
    172.17.0.3:5432:replication:repuser:12345
    

    然后启动备库即可。

    以上就是异步流复制的实现。

    同步流复制只需要处理两个地方,一个是备库的recovery.conf文件,另一个是主库的postgresql.conf。

    其中备库的recovery.conf中primary_conninfo里面添加一个字段application_name用来向主库说明身份。如

    recovery_target_timeline = 'latest'
    standby_mode = on
    primary_conninfo = 'host=172.17.0.2 port=5432 user=repuser application_name=node2'
    

    主库postgresql.conf中synchronous_standby_names参数中添加上面recovery.conf里面新加的application_name的值,如果是多个备库的话,用“,”分隔。如

    synchronous_standby_names = 'node2'
    

    最后reload主库,重启备库。
    主库验证 状态已经成了sync同步了。

    postgres=# select * from pg_stat_replication ;
     pid | usesysid | usename | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_lsn  | write_lsn | flush_
    lsn | replay_lsn |    write_lag    |    flush_lag    |   replay_lag    | sync_priority | sync_state
    -----+----------+---------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-------
    ----+------------+-----------------+-----------------+-----------------+---------------+------------
     411 |    16384 | repuser | node2            | 172.17.0.3  |                 |       47542 | 2019-11-24 00:47:37.278837+00 |              | streaming | 0/40002C8 | 0/40002C8 | 0/4000
    2C8 | 0/40002C8  | 00:00:00.000315 | 00:00:00.000315 | 00:00:00.000315 |             1 | sync
    (1 row)
    

    相关文章

      网友评论

          本文标题:pg_basebackup方式部署流复制

          本文链接:https://www.haomeiwen.com/subject/riepwctx.html