更全的杂志信息网

Postgre SQL热备原理研究及流复制运用

更新时间:2016-07-05

PostgreSQL是一套企业级的、跨平台、高度可定制的、功能强大的开源数据库系统。其可靠性、稳定性、数据一致性等获得了业界内极高的声誉。是唯一能实现数据零丢失的开源数据库系统。随着PostgreSQL的商用逐渐推动,在数据库市场上成为对标Oracle,MSSQL等传统大型商业数据库的有力竞争者[1]

数据库系统中,数据是所有一切的基础。数据的安全性和一致性是数据库系统中的重中之重。数据可能由于不可预见的各种原因丢失或损坏,因此数据的备份成为保证数据安全性的一个重要的后备手段。在此方面,企业级的PostgreSQL提供了多种功能特性保障数据的安全和可用性。

1 PostgreSQL数据备份

PostgreSQL可实现三种不同级别的数据备份方法:

SQL转储:利用pg_dump工具将数据转储为标准SQL语句组成的文件。需要时执行SQL语句即可恢复数据。此种方式通用性最好,实现简便,可在不同版本及不同操作系统间迁移和恢复数据。缺点为只能实现数据库的定期及全量备份。

据《新剧史》记载,丙年(1905年)春正月,李叔同主事的“群学会”中出现了演剧“筹款”活动:“群学会则以经费支绌,乃藉剧筹款。事属创举,名贵异常,故售券甚易易。统计售券所得,达四百金以上。自是素人演剧,渐成市道”[2]51。

文件系统级别备份:利用文件系统直接复制PostgreSQL数据文件进行备份操作,获取一个数据文件的“快照”。需要恢复或迁移时,再将“快照”文件拷贝至目标路径。此种方式实现简便,但限制条件也比较苛刻。(1)备份和恢复时,目标数据库必须停机操作。在一些特定系统中,停机是无法接受的。(2)只能备份和恢复整台服务器,不能有针对性的操作某一特定的数据库,数据容量巨大。(3)操作系统和PostgreSQL版本必须一致。

连续归档和时间点恢复(PITR):利用PostgreSQL提供的WAL(预写式日志)文件的连续归档特性,“备份”WAL文件。在“基础备份”的基础上,当需要恢复和迁移数据时,目标数据库上“重放”WAL,使目标数据库与原始数据库数据保持一致。基于“重放”WAL,可实现“增量”备份、“任意时间点”恢复、“温备”和“热备”等多种备份方式。此种方式技术实现相比较最为复杂,但可靠性和灵活性上却最高。在保障系统高可用性情况下,应是首选备份技术[2][4]

预设主备机IP地址:主机192.10.1.100备机192.10.1.101。下述配置文件*.conf都默认位于PostgreSQL安装路径data目录下。PostgreSQL9.3以上版本。

以上三种数据备份方式各有优缺点,但相比较下,只有使用WAL连续归档技术实现数据备份、故障迁移,保障高可用性最为有效和便捷。

再如主服务器上数据已成功提交,但还没来得及复制到备服务器(例如网络延时),并且运行着负载均衡架构,备服务器提供只读查询服务,那么此时使用备服务器查询到的结果将和主服务器数据不同,产生了数据不一致。

2 备份原理

2.1 WAL文件

WAL(Write Ahead Log)预写式日志文件是PostgreSQL中一个重要机制。作用与Oracle中redo log文件作用类似。用于保障数据的一致性以及事务的完整性。避免系统在崩溃时数据还在某级缓冲中,没来得及写入持久化文件中的脏数据产生的数据不一致性。具体来说,WAL的核心概念是数据文件的修改必须在这些动作被日志记录之后才被写入。WAL记录了完整的操作数据以及动作,先于数据被写入数据文件前顺序写入文件系统。WAL中的每一条记录使用CRC-32校验码保护,首先就保证了WAL的完整性。当系统需要重建数据时,由于WAL先于数据写入,则可顺序“回放”WAL文件中的先前数据和操作,直至某一设定时间点或WAL文件末尾停止,从而达到和先前一致的数据库状态。

整体上看,明蒙对河套的争夺是蒙古经济利益和明朝政治利益对立统一的过程。从蒙古人零星出没河套及至大规模入驻,这一时期蒙古方面的经济欲求和军事力量压倒了明朝的政治支配力量。

WAL被PostgreSQL默认划分成16MB的段文件,按一定规则顺序命名文件并保存于系统pg_xlog目录下。默认情况下WAL被设置为minimal级别,该级别下某些批量操作的WAL可以被安全的跳过,这样这些操作能更快地完成。但该级别不包含有足够的信息来从基础备份和WAL来重建数据。因此构架高可用性系统时必须设置高于minimal的级别使用,例如ar⁃chive或更高级别,以保证WAL包含有足够的重建数据信息[2]

假设上述操作完成后主服务器崩溃,某些已被提交的WAL日志还没来得及复制到备服务器(例如网络延时等),如此时进行了故障迁移,由于备服务器上则没有这笔操作数据,但此时前台客户端却得到了操作成功指令,这时将导致数据丢失。

2.2 启用WAL归档、传输实现备份

当系统启用archive或更高级别的WAL级别时,我们可通过归档WAL文件实现数据的备份。Postgresql并没有限定我们怎么样归档数据,而是提供了一个参数来自定义归档动作。当WAL文件产生后,我们可以简单的设置参数为拷贝WAL文件至另一磁盘驱动器目录,或执行复杂脚本将WAL传输至网络上另一台服务器。

利用上述WAL技术特性,我们可以简单的描述实现“双机热备”的过程。(1)设置主机归档模式wal_level为archive;(2)主机使用PostgreSQL提供的pg_basebackup等工具制作一次基础备份并将备份文件拷贝至备机,完成一次主被机间的基础备份;(3)主机产生WAL文件后通过archive_command参数调度命令传输至备机;(4)备机接收到WAL文件后,持续恢复主机的WAL文件,最大限度跟上主机数据产生速度[1][7]

若a>λ1或d>λ1,则μ<0。由引理2可知,存在大于1的特征值,因此indexW(F,(0,0))=0。

当主机发生故障时,此时由于主备机间传输WAL文件可能具有一定的延时原因或主机WAL文件并没有填充完一块(默认16MB),还没有开始传输,主备机间数据可能并不一致,备机落后于主机。此时如果使用故障迁移并使用备机提供数据服可能存在一定的数据丢失,但在某种程度上已经最大限度地保证了系统的可用性[2]

2.3 PostgreSQL热备

通过上述WAL文件在主备服务器间的归档、传输以及重放,我们已经了解了PostgreSQL的“温备”原理。如需进一步提升备份级别,实现真正意义上的热备,我们必须通过其他技术手段减小主备服务器间的数据同步延时,实现主备服务器间的快速同步。

3 流复制

3.1 流复制原理

PostgreSQL流复制是PostgreSQL9.0版本后才提供的功能,它的基本原理与上述主服务器WAL日志归档后传输至备服务器并重放以保证主备服务器数据一致情形类似。但流复制从PostgreSQL系统层面对这一过程进行了简化。首先主备服务器间使用PostgreSQL提供的TCP协议建立网络连接,不再使用archive_command参数命令进行第三方WAL文件传输。主服务器在数据变动并产生WAL记录后(并不需要完整一块16MB文件,仅为一次操作记录)立即将记录以TCP数据流的方式传送给备服务器,而不必等到WAL文件被填充后成才进行传输[2]。此种机制极大的缩减了主备服务器间的数据同步延迟,拥有更高效的可用度。同时PostgreSQL9.0版本后提供了Hot Standby功能,支持备机在流复制基础上同步主服务器数据的同时还能提供备机数据的只读访问。此特性极大地提升了用户体验,也使数据库的读写分离、负载均衡等功能从PostgreSQL系统层面提供了技术实现(之前版本只能通过第三方插件形式实现)。PostgreSQL9.2版本后提供了级联复制功能,在实现主备服务器流复制数据同步的同时,备服务器还可将WAL转发给其他下位备机,实现更大规模的集群。流复制技术为数据库的热备、高可用性、负载均衡等提供了原生技术支持[5][6]

当启用PostgreSQL主备服务器流复制功能后,将有walsender、walreceiver和startup三个进程启动参与整个流复制功能。简单来说walsender进程从主服务器启动,主要负责将主服务器产生的WAL日志记录发送给下位机;walreceiver进程则从备服务器启动,对应walsender进程与之通讯,主要负责接收上位机发送的WAL日志记录;startup进程则从备服务器启动,主要负责将walreceiver进程接收到WAL日志记录在备服务器上“回放”,以便达到主备服务器间的数据同步。在级联模式下,一台备服务器可能同时启动三个进程,即既负责接收上位机的WAL日志记录并回放,同时也将WAL日志记录继续发往下位机[3][5]

3.2 异步流复制

设置max_wal_senders=2;设置向备服务器进行发送walsender进程的最大连接数。本例中由于是使用双机热备,连接数2即可。

视星等,指观测者用肉眼所看到的星体亮度。用于区分星的目视明暗程度。视星等大小与星体的发光能力有关,也与距观测者的距离有关。视星等最亮的是太阳,约为-26.71。

奔走在丝绸之路上,千年的故事在口耳间流淌,浸润到大漠戈壁上稀疏物象的每个细节。我视线落在大漠旷野,在穿梭的日月中始终没有沉淀下来,却垒在历史与现实的心头,使人想爱,想哭,敢爱,敢哭。在悲爱之间奔走,或在沉重与欢笑之间穿行。我想起了在都市呆久了的那种感觉,常因受不了那繁华暗流压抑与剌激,找个无人地方,虚拟对着那高山与那面干净的湖泊肆无忌惮地吼叫,让这吼叫从心灵深处喷涌而出,回荡在高原的空旷的苍穹下。可在这里却哑然失声。

(3) 二龙·长寿山地质公园内构成 “左神座”和“右神座”的冰臼与小兴安岭国家地质公园内的冰臼皆为分布于水平面上的单体冰臼,只是长寿山中的冰臼明显遭到流水的侵蚀和破坏,一个冲蚀出出水口,一个即有进水口又有出水口。

异步流复制虽然有可能产生上述问题,但异步流复制只需主服务确认即可的特性大大提升了系统的负载。在部分非关键的系统应用中也是一种可选方案[2]

3.3 同步流复制

删除备机data目录下所有文件,并将上一步主机拷贝出的data目录下所有文件拷贝至备机data目录下。

课堂上,我和孩子们玩起了“头脑风暴”的游戏,并采取“延迟评价”的课堂机制。我常常会设计一至两个开放性问题,然后让学生大胆猜测、联想、迁移。我告诉他们,答案并不是唯一的,只要是自己努力思考的结果,只要言之有理,就是最好的答案。当课堂形成接纳、支持、包容的氛围后,学生的发言变得踊跃起来。当一些学生有了答案后,我不会立刻让他们回答,而是等举手的学生多起来以后,再点名回答。这样做的目的是给更多的孩子创造思考和回答的机会。学生回答结束后,我也不急于点评,而是先让其他学生来评价。这样一来,所有学生都能主动参与到教学活动中,发言的尽心尽力,聆听的竖起耳朵,大大增加了问题的容量,也很好地锻炼了学生的专注力。

一旦拿“素颜版人生”和别人的“精修版人生”比较,你无论如何都是输。就算坚守着内心的倔强说服自己并不是不如别人,也会在反复的对比中忽略了那些真正让你幸福的小细节,会在追求平衡的过程中对另一半发出质疑的指责。

对120℃环境友好型钻井液体系进行的渗透率恢复值测定结果见表11。从表11可看出,该体系渗透率恢复值大于90%,滤液体积小于4.5 m L,表现出较好的油层保护效果。

4 流复制应用

上述已就PostgreSQL的备份和流复制构建热备进行了原理和理论阐述。本节将就PostgreSQL双机同步流复制实现热备和故障迁移应用给出实现方案。目标:实现双机异地Post⁃greSQL数据库容灾热备。

《化妆师的就业指导》 熊琴指出随着经济发展和社会进步,大众对美的追求日益强烈,同时受到近几年的日韩欧美各种流行文化的影响,使更多爱美人士走在了追求美的道路上,随着审美需求的不断加大,大众对自己的形象要求也越来越高,于是也使得一些化妆培训机构如雨后春笋一般应运而生,在全国遍地开放,广招生源,这也出现了一个问题短期的化妆培训机构没有办法对化妆师进行系统高素质的培训练习,造成了化妆师专业素质的层次不齐。

4.1 主机postgresql.conf文件配置

设置listen_addresses='*';主服务器开启监听所有客户地址访问许可,默认值为只能监听本机访问,网络上其他服务器不允许连接。

设置wal_level=hot_standby;主服务WAL日志级别使用hot_standby级别,此级别下日志记录的信息和上文提到的ar⁃chive相同,但外加了从WAL重建运行事务状态所需的其他信息,流复制必须设置此级别。

PostgreSQL默认情况下启用的为异步流复制模式。此模式下主服务器不等待备机确认,主服务器上数据成功提交即视为操作完成。并将完成结果反馈给前台提交此操作的客户端。

设置wal_keep_segments=128;设置WAL文件被重用的最大值,确保旧的WAL段不会被太早重用(文件系统会对WAL进行循环覆盖使用以便节约磁盘空间)。避免由于主机数据量巨大,而备机还尚未处理,而主机已经覆盖了待未传输至备机处理的WAL文件。可根据系统负载情况调整[2]

3.2.2 药剂防治。对于发病老区,秧期对稻田喷药是最关键有效的,一般3叶期及拔秧前各施一次药。例如,用叶青双、叶枯宁、消病灵及菌毒清等75~100 g/667 m2兑水50 kg喷雾,5~7 d施药一次,持续两三次[5]。

设置synchronous_commit=on;设置事务为同步模式。保证备机将提交记录写入到持久化存储中,主机事务才能成功返回[1][7]。

4.2 主机pg_hba.conf文件配置

增加配置项:host replication postgres 192.10.1.101/32 md5;增加IP192.10.1.101备机使用用户postgres使用流复制功能访问许可。

上述配置完毕后重启PostgreSQL数据库,以便新设置项生效。

4.3 主机进行基础备份

a.开启pgsql程序,执行命令:select pg_start_backup('base⁃backup');此命令将使系统进入备份模式,执行基础备份。

b.待执行完毕后拷贝出data数据目录备用。

c.拷贝完毕后执行select pg_stop_backup();此命令系统终止备份模式并让在备份期间写入的最后一个WAL段文件能准备好被归档[1][2]

4.4 备机拷贝文件

PostgreSQL开启配置参数synchronous_commit=on即可开启同步流复制。同步流复制能够保证一个事务的所有修改都能被传送到一台同步备服务器。在请求同步流复制时,一个写事务的每次提交将一直等待,直到收到一个确认表明该提交在主服务器和备服务器上都已经被写入到磁盘上的事务日志中。即保证主备服务器WAL日志双双落盘才返回成功[2][6]。此时虽然增加了主备服务期间来回通讯确认的等待时间,延长了前台客户端请求事务的响应时间。但等待确认提高了用户对于修改不会丢失的信心。此外如果有多台备服务器连接主服务器进行数据同步,通过配置参数synchronous_standby_names,还可设置等待全部或其中某几台完成WAL落盘确定即返回成功。在多台数据同步的集群中,可在高可用性和系统性能上找到一个平衡点[2][7]

4.5 备机postgresql.conf文件配置

设置hot_standby=on;开启备机在归档恢复期间或备机模式下开启只读查询模式。

4.6 备机recover.conf文件配置

备机创建recover.conf文件,并放置于data目录下。

设置standby_mode='on';指定为备机模式启动;

设置recovery_target_timeline='latest';使备机恢复到归档中能找到的最新的时间线,保持和主机的数据同步。

村长不好发作,铁青了脸,额头上的血管像两条活蚯蚓,在那里一前一后的蹿动。我好说歹说,他们才同意,真不识好歹。

设置primary_conninfo='host=192.10.1.100 user=postgres password=主机登陆口令';设置备机连接主机进行流复制的连接字符串。

4.7 备机启动

上述配置完成后启动备机即可完成PostgreSQL双机同步热备服务器配置。

4.8 故障迁移

假设最坏的情况发生了,主机崩溃无法继续提供服务,此时可使用故障迁移将备机提升为主机,从只读模式提升为提供读写服务。保障系统的高可用性。故障迁移必须手动操作,有两种方式:

备机recover.conf配置文件中设置trigger_file项,值为某一系统中文件路径。在服务器作为备机使用时,此路径上的文件必须不存在。如需将备机提升为提供读写服务器,则建立此路径文件即可。当备机检测到文件存在后,立即退出备机恢复模式,提升为独立主机模式,提供完整读写服务。

在备机上执行pg_ctl premote-D‘备机数据目录路径’。效果及原理与a相同,即命令备机停止备机恢复模式,提升为独立主机模式[1]

在某些特定应用场景下本方案仍具有一定的可优化。例如使用PostgreSQL9.4版本后提供的复制槽(Replication Slots)技术提供的自动WAL检测技术,替换wal_keep_segments参数功能。避免未同步的WAL段被主机替换删除。或设置tcp_keepalive参数,避免长时间的网络延时导致前台客户端事务提交的等待时间过长[7]。例如PostgreSQL10版本提供的逻辑复制技术,只同步应用需要的特定表,完成更复杂的集群应用等等[8]

至此使用PostgreSQL流复制功能实现双机热备服务器搭建完成。

参考文献:

[1] 唐成.PostgreSQL修炼之道[M].机械工业出版社,2015.

[2] The PostgreSQL Global Development Group.Documentation[EB/OL].(2016-09-29).https://www.postgresql.org/docs/.

[3] 周正中.PostgreSQL同步流复制原理和代码浅析[EB/OL].(2016-06-16).https://yq.aliyun.com/articles/55676.

[4] [美]杰亚德万·梅马拉(Jayadevan Maymala).数据架构师的PostgreSQL修炼:高效设计、开发与维护数据库应用[M].机械工业出版社,2016.

[5] [美]Regina Obe,Leo Hsu.PostgreSQL即学即用[M].人民邮电出版社,2016.

[6] [英]Simon Riggs,Gianni Ciolli,Gabriele Bartolini.PostgreSQL Administration Cookbook[M].Packt Publishing,2017.

[7] [英]Gregory Smith,Ibrar Ahmed.PostgreSQL 9.6 High Perfor⁃mance[M].Packt Publishing,2017.

[8] 周正中.PostgreSQL 10.0逻辑复制原理与最佳实践[EB/OL].(2017-02-28).https://yq.aliyun.com/articles/71128.

付莎
《电脑知识与技术》 2018年第12期
《电脑知识与技术》2018年第12期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号