请选择 进入手机版 | 继续访问电脑版

206、PG异步复制部署

[复制链接]
小小海 发表于 2020-12-31 18:06:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
前言:

  PostgreSQL在9.0版本后支持物理复制和逻辑复制两种方式,物理复制亦称‘流复制’本文我们就称之为’物理复制’好了,是基于实例级别的复制方案,而且物理复制还分异步和同步两种模式,本文我们先先容异步复制的主从架构摆设;而逻辑复制是可以做到基于表级别的复制,其实就是可选择性的复制数据,后续会先容。
摆设过程

1.相关信息



  • RedHat 7.7
  • PostgreSQL 12.2
  • 10.25.15.77 ,Master节点
  • 10.25.15.78 ,Slave节点
  • 系统用户名:postgres
注:如下过程如果没有特殊说明均是在Primary节点上执行
2.架构图:

(注:我是根据自己的理解画的图,如果有毛病还请指出)

3.创建用户和目录

请执行如下下令创建系统用户和所需目录:
  1. groupadd postgresuseradd -g postgres -G wheel postgrespasswd postgressu postgres -sudo mkdir -p /data/johnny/pgdata/12/data        #数据库系统数据文件目录sudo mkdir -p /data/johnny/pgdata/12/pg_tbs        #用户自界说表空间目录sudo chown -R postgres:postgres /data/johnny/pgdata
复制代码
4.设置用户情况变量

编辑文件/home/postgres/.bash_profile,添加如下内容:
  1. export PGPORT=1921export PGDATA=/data/johnny/pgdata/12/dataexport LANG=en_US.utf8export PGHOME=/opt/pgsqlPATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/binexport PATHalias dba="psql -h 127.0.0.1 -U root -d postgres"
复制代码
注:执行source .bash_profile下令使生效
5.安装postgres

我们直接yum安装(更加详细的步调请参考《如何安装postgresql》一文),如果想要编译安装的请自行搜索相关安装教程
配置yum源
sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装:
sudo yum -y install postgresql12
sudo yum -y install postgresql12-server
添加软链接
sudo ln -s /usr/pgsql-12/ /opt/pgsql
sudo chown -R postgres:postgres /opt/pgsql
sudo chown -R postgres:postgres /usr/pgsql-12/
6.初始化数据库系统:

/opt/pgsql/bin/initdb -D /data/johnny/pgdata/12/data --locale=C -W -U root
注:–locale=C就是设置一些字符集编码等情况参数,先不消深究。
7.参数配置

编辑配置文件$PGDATA/postgresql.conf,设置如下参数值
  1. wal_level = replica    #WAL日志品级,品级差别日志信息越多,物理复制一般用replica,逻辑复制用logical;archive_mode = on   #是否开启归档archive_command = '/bin/date'  #设置WAL归档的下令,暂用不到,可以随便写一个乐成执行的shell下令就行max_wal_senders = 10     #主库上wal的最大发送进程数wal_keep_segments = 512     #主库上wal日志文件的最少文件数,每个wal日志文件默认16MB,如果存储空间足够,可以尽量设置的值大些hot_standby = on   #设置为on后,Standby库支持读操作;有点类似Oracle的DG架构中Standby库处于Open状态listen_addresses = '*'port = 1921max_connections = 1000wal_log_hints = on
复制代码
编辑配置文件pg_hba.conf,添加如下信息
  1. host    replication     repuser             10.25.15.77/32                 md5host    replication     repuser             10.25.15.78/32                 md5
复制代码
注:主备库的postgresql.conf文件和pg_hba.conf文件发起完全一致;
8.启动主库

# pg_ctl start
创建复制账号(登录到数据库实例中)
  1. # psql -h 127.0.0.1 -U root -d postgrespostgres=# create user repuser replication login connection limit 5 encrypted password 'admin123';
复制代码
9.创建备库数据库系统

请根据步调3~步调5,依次在备库服务器10.25.15.78上执行一遍,如果没有报错我们往下继续。
10.配置备库

(注:如下在备库服务器10.25.15.78上执行)
做基准备份:
# /opt/pgsql/bin/pg_basebackup -D /data/johnny/pgdata/12/data -Fp -Xs -v -P -R -h 10.25.15.77 -p 1921 -U repuser
日志内容如下:
  1. Password:pg_basebackup: initiating base backup, waiting for checkpoint to completepg_basebackup: checkpoint completedpg_basebackup: write-ahead log start point: 0/4000028 on timeline 1pg_basebackup: starting background WAL receiverpg_basebackup: created temporary replication slot "pg_basebackup_25645"25311/25311 kB (100%), 1/1 tablespacepg_basebackup: write-ahead log end point: 0/4000100pg_basebackup: waiting for background process to finish streaming ...pg_basebackup: syncing data to disk ...pg_basebackup: base backup completed
复制代码
其实上述过程就是如下几个步调:


  • 对主库做一次checkpoint
  • 基于时间点做一次全备,将主库上的$PGDATA数据文件和表空间文件拷贝到备库的-D参数目录下
    参数表明:
  • -D,用来吸收主库数据文件的目录
  • -F,指定生成的备份文件格式,p体现主库上的数据文件格式结构完全拷贝,t体现打成tar包
  • -X,执行全备过程中,wal日志的备份方式,s体现同步备份wal的增量日志数据,f体现在数据文件全部备完后再去搞wal日志备份;
  • -v,打印执行过程日志
  • -P,显示文件传输进度
  • -R , 其实就是使备库配置起来更加方便,主要有如下两个作用:

    • 下令执行后在 $PGDATA 目录创建 standby.signal 标识文件,文件内容为空
    • 下令执行后在 $PGDATA 目录的 postgresql.auto.conf 文件中添加 primary_conninfo 参数信息
      启动备库:
      # pg_ctl start

11.检察WAL进程

WAL发送进程(主库服务器上)
# ps -ef|grep walsender
postgres 27366 14195 0 16:17 ? 00:00:00 postgres: walsender repuser 10.25.15.78(60026) streaming 0/5000148
WAL吸收进程(备库服务器上)
# ps -ef|grep walreceiver
postgres 27203 27197 0 16:17 ? 00:00:00 postgres: walreceiver streaming 0/5000148
12.检察复制方式

  1. postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication;usename | application_name | client_addr | sync_state---------+------------------+-------------+------------repuser | walreceiver      | 10.25.15.78 | async
复制代码
特别说明:

recovery.conf文件在PG12版本不再支持,此中的配置参数已经归并到postgresql.conf文件中,如果数据目录$PGDATA中存在此文件,数据库将无法启动
12版本关于recovery.conf主要有如下几点:


  • recovery.conf 配置文件不再支持,此文件中的参数归并到 postgresql.conf,若 recovery.conf 存在,数据库无法启动
  • 新增 recovery.signal 标识文件,体现数据库处于 recovery 模式
  • 新增加 standby.signal 标识文件,体现数据库处于 standby 模式,如果这两个文件都存在,则standby.singal优先
  • trigger_file 参数更名为 promote_trigger_file
  • standby_mode 参数不再支持
总结:

至此,PostgreSQL的异步物理复制架构就摆设乐成了, 回头仔细看看其实一共也没几个步调,还是非常方便的,备库的创建只需要一条下令就实现了,相比力于其他数据库系统来说方便快捷了许多。
另:如何把异步复制转换成同步复制

设置备库的postgresql.auto.conf文件,变动 primary_conninfo参数信息;
编辑postgresql.auto.conf内容添加application_name,用来指定备库节点的别名,从而让主库的synchronous_standby_names参数可以引用上备库这个别名;
举例:
  1. primary_conninfo = 'user=repuser password=admin123 host=10.25.15.77 port=1921 application_name=node2 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
复制代码
注:上述application_name=node2就是需要添加的变量值
备库需要重启才气生效
主库上设置如下参数
编辑配置文件$PGDATA/postgresql.conf,设置如下参数值
synchronous_commit = on #设置成on 或 remote_apply, on时体现备库恒久化WAL后方可commit
synchronous_standby_names = 'node2' #设置备库的列表,将所有备库上的primary_conninfo参数中的 application_name=node2 添加至此
设置完成后,重新加载使生效
$pg_ctl reload
此时检察复制状态,可以看到已酿成sync
  1. postgres=# select usename,application_name,client_addr,sync_state from pg_stat_replication;usename | application_name | client_addr | sync_state---------+------------------+-------------+------------repuser | walreceiver      | 10.25.15.78 | sync
复制代码
参考

recovery.conf不再支持:https://postgres.fun/20190718155800.html

来源:https://blog.csdn.net/jianlong727/article/details/111939950
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )