ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

基于linux7的pgsql14流复制

2021-11-19 15:06:39  阅读:270  来源: 互联网

标签:主库 备库 linux7 standby 复制 postgresql conf pgsql14 data


在这里插入图片描述

流复制其原理为:备库不断的从主库同步相应的数据,并在备库apply每个WAL record,这里的流复制每次传输单位是WAL日志的record。

PostgreSQL物理流复制按照同步方式分为两类:
异步流复制
同步流复制
物理流复制具有以下特点:
1、延迟极低,不怕大事务
2、支持断点续传
3、支持多副本
4、配置简单
5、备库与主库物理完全一致,并支持只读

二 流复制部署
相关配置文件:
PostgreSQL主备数据库的同步设置主要涉及如下文件:
1.pg_hba.conf postgresql 主库访问规则文件
2.postgresql.conf postgresql 主库配置文件
3.recovery.conf postgresql 备库访问主库配置文件
4…pgpass postgresql 备库访问主库的密码文件
正常主备流复制情况下:
主库需要pg_hba.conf、postgresql.conf
备库需要recovery.conf、.pgpass
实际操作中,建议主、备库上都配置这四个文件,因为主、备库角色是随着倒换变更的。注:recovery.conf文件在备库上是recovery.conf,在主库上配置为recovery.done。

1.环境准备(安装好主备的数据库软件)
Ip地址 主机名 数据库版本 数据文件路径
192.168.9.99 Lege Pgsql14 /data/postgresql/data/
192.168.9.100 Lege2 Pgsql14 /data/postgresql/data/

2.主库配置

1、配置postgresql.conf
listen_addresses = ‘*’
wal_level = hot_standby # minimal, replica, or logical 使得日志支持Streaming Replication
max_wal_senders = 2 # max number of walsender processes 这个设置了可以最多有几个流复制连接,几个并发的standby数据库就设置几个
#注意:postgresql 13.0中,将wal_keep_segments重命名为wal_keep_size
#wal_keep_segments = 256 设置流复制保留的最多的xlog数目,不要设置太小导致WAL日志还没有来得及传送到standby就被覆盖。一个WAL文件默认16M
hot_standby = on # “on” allows queries during recovery 设置为备库时是否支持可读
logging_collector = on
log_directory = ‘pg_log’
log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log’

2、配置pg_hba.conf

host all all 127.0.0.1/32 trust

host all all ::1/128 trust

host replication u_standby 192.168.9.0/24 trust
或者 host replication all 192.168.9.0/24 trust

其中:

1) u_standby为在主库上创建的用于备库连接主库进行流复制的用户,此用户需要用户需要有REPLICATION权限和LOGIN权限。开户如:

create user u_standby SUPERUSER LOGIN password ‘standby123’;

2) 192.168.9.0/24为备库地址段+掩码;也可配置为具体的standby数据库地址+掩码,可配置多条。用于指定哪些地址的standby数据用哪个用户名/密码到主库获取WAL日志数据。使用地址段格式,则地址段内的IP都可以无密码对此数据库进行访问,安全性可能会降低。因此,在生产环境中建议严格按照具体主机IP方式配置。

3、 (可选)配置recovery.done、.pgpass
同备库recovery.conf、.pgpass配置。recovery.conf中如下IP、端口、用户名要对应备库信息:
primary_conninfo = ‘host=192.168.9.99 port=5432 user=u_standby’ 备库连接主库地址、端口、用户名、密码

4、 配置完毕需重启数据库
systemctl restart postgresql-14 或/usr/pgsql-14/bin/pg_ctl restart -m fast -D /data/postgresql/data/

3.全量备份
1、关闭备库,并清空数据

$/usr/pgsql-14/bin/pg_ctl stop -m fast -D /data/postgresql/data/

rm -rf /data/postgresql/data/

2、进行一次主库数据基本备份到备库

方式一(在主库操作):

//开启备份功能,pg_start_backup() 函数会在主库上发起一个在线备份,命令执行后,将数据文件压缩拷贝到备份节点上:

$postgres=# select pg_start_backup(‘backup0001’)

//将data目录下的数据远程拷贝到备库的data目录下

$scp -r /data/postgresql/data/* 10.10.10.2:/data/postgresql/data/

//关闭备份功能

$postgres=# select pg_stop_backup()

方式二(9.0版本后引入了pg_basebackup工具,在备库操作,推荐使用这种办法):

pg_basebackup工具支持对主库发起一个基准备份,发起备份需要超级用户权限或REPLICATION权限,注意max_wal_senders参数配置,因为pg_basebackup工具将消耗至少一个WAL发送进程。

//如下IP为主库地址

pg_basebackup -h 192.168.9.99 -U u_standby -F p -P -R -D /pgbak -l backup20211109

4.备库配置
1、修改postgresql.conf

hot_standby = on # “on” allows queries during recovery 设置为备库时是否支持可读

2、 配置recovery.conf(12以上可以直接写入到postgresql.conf)
最近用pg12做增量备份、流复制实验室时发现配置上有些变化,
除了将recovery.conf文件里的配置合并到主配置文件postgresql.conf中以外,
还有一个很重要的参数,设置启用备库参数standby_mode,12之后废弃了这个参数,
切换到备库建立空文件standby.signal进行触发。

###standby_mode = on
14版本两个参数都写入到postgresql.conf中
  recovery_target_timeline = ‘latest’

primary_conninfo = ‘host=192.168.9.99 port=5432 user=u_standby password=standby123’ 本库为备库会,连接主库地址、端口、用户名、密码

3、设置连接主库密码.pgpass(手动创建.pgpass文件)

192.168.9.99: 5432:replication: u_standby:standby123 //备库都主库同步WAL日志使用

192.168.9.100: 5432:replication: u_standby:standby123 //倒换后,主库降备库,新备库使用

4、 配置完毕需重启数据库

/usr/pgsql-14/bin/pg_ctl start -m fast -D /data/postgresql/data/ 或 systemctl start postgresql-14

5.结果检查
结果检查:
1、 配置成功后,可以查看主、备库的walsender、walreceiver进程。
ps -ef | grep wal
主库:
postgres 6939 6935 0 23:16 ? 00:00:00 postgres: wal writer process
postgres 6983 6935 0 23:42 ? 00:00:00 postgres: wal sender process repuser 172.17.0.5(45910) streaming 0/3000140
备库:
postgres 26481 26479 0 23:42 ? 00:00:00 postgres: wal receiver process streaming 0/3000140

postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----±-----------------------------
pid | 41927
usesysid | 16387
usename | u_standby
application_name | walreceiver
client_addr | 192.168.9.100
client_hostname |
client_port | 47180
backend_start | 2021-11-09 16:29:47.816742+08
backend_xmin |
state | streaming
sent_lsn | 0/8000148
write_lsn | 0/8000148
flush_lsn | 0/8000148
replay_lsn | 0/8000148
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2021-11-09 16:40:18.541282+08

标签:主库,备库,linux7,standby,复制,postgresql,conf,pgsql14,data
来源: https://blog.csdn.net/weixin_45112130/article/details/121422408

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有