Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

postgreSQL热备之流复制环境搭建以及常见问题处理


分享到:
时间:2020-08-13 09:53来源:http://www.java1234.com 作者:小锋  侵权举报
postgreSQL热备之流复制环境搭建以及常见问题处理 PDF 下载
失效链接处理
postgreSQL热备之流复制环境搭建以及常见问题处理 PDF 下载



本站整理下载:
 
相关截图:
 
主要内容:

1.简介
本文主要是介绍PostgreSQL数据库的热备技术,PostgreSQL数据库提供了类似Oracle的standby数据库的功能。PostgreSQL日志传送的方法有两种,一种是基于文件(base-file)的传送方式,一种是流复制(streaming replication)的方式。
基于文件(base-file)的传送方式,这种方式是PostgreSQL9.0之前就提供的方法。也就是服务器写完一个WAL日志文件后,才把WAL日志文件拷贝到standby数据库上去应用。
流复制的方式是PostgreSQL提供的一种服务器间的数据复制方式。这是PostgreSQL9.0才提供的新方法。这个方法就是事务提交后,主服务器则在WAL记录产生时即将它们以流式传送给后备服务器而不必等到 WAL文件被填充。就是把生成的日志异步的传送到standby数据库上应用,这比基本文件的日志传送方法有更低的数据延迟。
 
2.环境准备
1.服务器两台:
服务器 IP
主数据库服务器 192.168.88.191
备数据库服务器 192.168.88.192
操作系统版本:CentOS-7-x86_64
软件:PostgreSQL 10.10
安装目录是:/db/pgsql/
数据目录是:/db/pgsql_data/
注意:实施之前两台机器上都安装好了postgresql数据库
 
2.确保操作系统防火墙已关闭
systemctl stop firewalld
systemctl disable firewalld
3.搭建PostgreSQL 主备环境。
3.1在主节点上的操作
1. 切换用户,并执行启动服务命令:
su – postgres
pg_ctl start -D $PGDATA 启动服务。
 
2. 创建用于流复制的用户。执行命令:
psql -h 127.0.0.1 -p 5432 -U postgres
 
进入PostgreSQL数据库,并执行如下语句创建用户:
create user repuser with login replication password '123456'; 
 
3. 修改pg_hba.conf 文件,添加如下内容,允许两台计算机上的复制用户和超级用户登录:
 
host    replication     repuser         192.168.88.191/32         md5
host    replication     repuser         192.168.88.192/32         md5
host      all           postgres           192.168.88.191/32              trust
host      all           postgres           192.168.88.192/32              trust
 
4. 在主节点的 postgresql.conf 中设置这些参数:
max_wal_senders = 10
wal_level = replica
wal_log_hints = on
wal_keep_segments = 10
wal_receiver_status_interval = 5s
hot_standby_feedback = on
 
这些参数中的含义如下:
max_wal_senders表示来自后备服务器或流式基础备份客户端的并发连接的最大数量;
wal_level 表示日志级别,对于流复制,它的值应设置为replica;
wal_log_hints = on表示,在PostgreSQL服务器一个检查点之后页面被第一次修改期间,把该磁盘页面的整个内容都写入 WAL,即使对所谓的提示位做非关键修改也会这样做;
wal_keep_segments 指定在后备服务器需要为流复制获取日志段文件的情况下,pg_wal(PostgreSQL 9.6 以下版本的是pg_xlog)目录下所能保留的过去日志文件段的最小数目。
log_connections 表示是否在日志中记录客户端对服务器的连接;
wal_receiver_status_interval 指定在后备机上的 WAL 接收者进程向主服务器或上游后备机发送有关复制进度的信息的最小周期;
hot_standby_feedback 指定一个热后备机是否将会向主服务器或上游后备机发送有关于后备机上当前正被执行的查询的反馈,这里设置为on。
关于详细内容,可以参考postgresql官方文档。 
 
5. 重启主节点:
pg_ctl restart -D $PGDATA 
 
6. 重启之后,为主服务器和后备服务器创建复制槽,这一步不是必须的。
 
select * from pg_create_physical_replication_slot('postgresql_node191');
select * from pg_create_physical_replication_slot('postgresql_node192');
创建后查询复制槽
select * from pg_replication_slots;
 
复制槽(replication slot)的作用是:
1. 在流复制中,当一个备节点断开连接时,备节点通过hot_standby_feedback 提供反馈数据数据会丢失。当备节点重新连接时,它可能因为被主节点发送清理记录而引发查询冲突。复制槽即使在备节点断开时仍然会记录下备节点的xmin(复制槽要需要数据库保留的最旧事务ID)值,从而确保不会有清理冲突。
2. 当一个备节点断开连接时,备节点需要的WAL文件信息也丢失了。如果没有复制槽,当备节点重连时,可能已经丢弃了所需要的WAL文件,因此需要完全重建备节点。而复制槽确保这个节点保留所有下游节点需要的WAL文件。

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐