今天就跟大家聊聊有关PostgreSQL中流复制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
和MYSQL不同,MYSQL的复制是基于逻辑复制,而PG具有流复制和逻辑复制两个功能。提到流复制如果让我理解,想到就是甲骨文Dataguard这样的功能,当然ORALCE也有流复制和高级复制等功能,这里就不再提及。
这里复制的技术很多,有共享磁盘故障转移,写前日志航运、logincal复制,等等今天我们要学习的就是,
写前日志航运,这个功能。
那使用这个功能对我们有什么好处
1它是一个内建功能
2连接的方式是通过细胞膜在日志的方式
3没有特别的硬件需求
4对主机的运行基本没有影响
5可以设置数据的同步和异步,
6备份库是可以进行只读的活动
读完上面的点,发现通过流的方式复制其实比逻辑的复制好的地方,就是1没有事务冲突,2不会有事务较大,造成延迟的问题,3数据在切换过程中,不会有数据丢失的担心。
以上都是MYSQL在复制的过程中,我可能会担心的问题。
流复制是PostgreSQL 9.0在推出的功能,其中主要由三个进程
1,walsender
2,walreceiver
3,启动
这三者是怎么工作的我们的画一个图来分析一下。
1,备用库通过walreciever来尝试连接到主库
2,主要主库会通过细胞膜发件人来进行tcp ip方式的连接,握手确认连接
3,从库的备份会发送目前他最后的一次的LSN号码给主库,从库的LSN号必然必须小于主库(如果是反向的,说明主库的数据落后于从库,或是其他问题,这样的复制是没有办法进行的)
4主库会提供的WAL段并开始进行复制的数据发送的工作
通过
选择application_name,国家从pg_stat_replication;以下的语句来查看当前库是否在进行发送方的状态。
说到这里,其实每种数据库的复制都会存在一个问题就是如果备用库重新启动或者备用没有跟上主库的发送日志的速度,则结果就是复制失败。而PostgreSQL有两个方法来尽力拯救这样的事情,
1,提高wal_keep_segments,这让我想起了MONGODB提高OPLOG的存储大小来让MONGODB复制不会产生类似的问题。
2,使用复制槽的方式和功能来灵活的进行犯下数据的发送。
其实大白话就是,要不我在发送端做点什么,要不我在接收端做点什么。
同时我们可以通过sent_lsn, write_lsn, flush_lsn, replay_lsn,来判断我们的复制的状态如何。
3, PG的复制中,可以是多从的结构。
说完这些,需要探讨配置流复制中的参数了
首先要打开PostgreSQL的复制
1,wal_level=大敌;复制
确定写入细胞膜的信息的多少,如果想调整这个参数,需要在开启服务前就进行设置
如果设置为最低级别则类似创建表as 创建索引,复制等命令的日志就不会被记录
2,synchronous_commit ,相关的选项
,,,remote_apply remote_write,当地
默认的安全值是在,同时如果你选择remote_apply,或者remote_write,则会等待备用的主机进行相关的回馈,主库才能继续后面操作。
3 max_wal_sender 设置最大的主备用的连接数,默认为10
4, wal_keep_segments这里指定最大可以保持多少,细胞膜日志的数量,一个犯下的日志数量是16 mb只
5 wal_sender_timeout 默认检测备用的没有响应的时间默认是60秒
6,synchronous_standby_name=& # 39; standby_name>看完上述内容,你们对PostgreSQL中流复制的原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。