如何使用rsync实现postgres日志传送standby服务器
这篇文章主要介绍了如何使用rsync实现postgres日志传送standby服务器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
日志传送standby服务器
连续归档可以配合随时准备取代失效主服务器的一个或多个备份服务器, 用于创建一个高可用性(HA)集群。这个能力通常被称为温备份或日志传送
从一个数据库服务器移动 WAL 到另一个服务器通常被称为日志传送(LogShipping)。PostgreSQL 实现了基于文件的日志传送,意思是 WAL 记录每次移动一个完整的文件(WAL 段)。 也可以基于记录的日志传送,
日志传送是异步的,也就是 WAL 记录在事务提交之后才被传送,可以使用 archive_timeout 来设置日志传送间隔时间(应该是最长间隔时间)
在启动,standby 服务器调用 restore_command 命令开始恢复在 wal 归档位置有效的所有的 WAL, 一旦恢复完可用 WAL,restore_command 就失败, 将尝试从 pg_wal 目录下恢复可用的 WAL。 如果那也失败了,并且已经配置了流复制,则尝试连接到主服务器, 从在归档或 pg_wal 中找到的最后一条有效的记录开始 WAL 流复制。如果那也失败了, 或没有配置流复制,或连接断开,备服务器再次回到步骤 1,尝试从归档里恢复文件。 循环尝试从归档、pg_wal、连续流复制通道,直到服务器停止或通过触发器文件触发失效切换。
实验使用两台主机,都安装postgresql-10.7,已配置流复制
主库:192.168.56.25 m1 使用rsync命令传送wal文件到m7
丛库:192.168.56.5 m7 在此机上配置rsync做为服务运行,接收丛m1传送过来的wal文件
丛库的配置,设置hot_standby使standby库接收连接。省略standby库从主库基础备份还原过程
[postgres@localhostdata]$catrecovery.confstandby_mode='on'restore_command='cp/usr/local/pg/arch_bak/%f%p'recovery_target_timeline='latest'postgres=#showhot_standby;hot_standby-------------on(1row)
m1上配置rsync服务器,使用rsync-3.1.3版本,省略rsyn安装过程
[root@localhost~]#cat/etc/rsyncd.confuid=postgresgid=postgresusechroot=nomaxconnections=5readonly=falsepidfile=/var/run/rsyncd.pidlogfile=/var/log/rsync.logtransferlogging=yeslogformat=%t%a%m%f%btimeout=300[arch_bak]path=/usr/local/pg/arch_bakauthusers=tridge,susansecretsfile=/etc/rsyncd.secrets[wal_bak]path=/usr/local/pg/data/pg_walauthusers=tridge,susansecretsfile=/etc/rsyncd.secrets[root@localhost~]#cat/etc/rsyncd.secretstridge:mypasssusan:herpass
启动rsync服务器
[root@localhostarch_bak]#/usr/local/bin/rsync--daemon[root@localhostarch_bak]#lltotal0[root@localhostarch_bak]#pwd/usr/local/pg/arch_bak
从m7同步standby服务器创建之前归档wal日志文件
[root@z_leaderrsync-3.1.3]#/usr/local/bin/rsync-av/usr/local/pg/arch/tridge@192.168.56.5::arch_bak/Password:sendingincrementalfilelist./00000005000000000000000B00000005000000000000000C.partial00000006.history00000006000000000000000C00000006000000000000000D00000006000000000000000E00000006000000000000000F000000060000000000000010sent117,470,037bytesreceived179bytes18,072,340.92bytes/sectotalsizeis117,440,721speedupis1.00
在m1上查看传输过的文件,及standby服务器表记录
[root@localhostarch_bak]#lltotal114692-rw-------1postgrespostgres16777216Mar209:0200000005000000000000000B-rw-------1postgrespostgres16777216Mar209:0800000005000000000000000C.partial-rw-------1postgrespostgres16777216Mar211:1500000006000000000000000C-rw-------1postgrespostgres16777216Mar1709:5100000006000000000000000D-rw-------1postgrespostgres16777216Mar1709:5500000006000000000000000E-rw-------1postgrespostgres16777216Mar1710:1300000006000000000000000F-rw-------1postgrespostgres16777216Mar1720:02000000060000000000000010-rw-------1postgrespostgres209Mar209:0800000006.historypostgres=#select*fromtest;id|e_name|e_mail|d_id----+--------+-------------+------1|zbs|123@126.com|103|zbs2|124@126.com|104|zbs2|124@126.com|102|zbs1|124@126.com|105|zbs2|124@126.com|106|zbs2|124@126.com|107|zbs2|124@126.com|108|zbs2|124@126.com|10(8rows)
在主库上插入2两条记录,并归档
postgres=#select*fromtest;id|e_name|e_mail|d_id----+--------+-------------+------1|zbs|123@126.com|103|zbs2|124@126.com|104|zbs2|124@126.com|102|zbs1|124@126.com|105|zbs2|124@126.com|106|zbs2|124@126.com|107|zbs2|124@126.com|108|zbs2|124@126.com|10(8rows)postgres=#insertintotestvalues(9,'zbs3','124@126.com',20);INSERT01postgres=#insertintotestvalues(10,'zbs3','124@126.com',20);INSERT01postgres=#selectpg_switch_wal();pg_switch_wal---------------0/11000888(1row)
在m7上使用rsync命令同步新生成的归档
[root@z_leaderrsync-3.1.3]#/usr/local/bin/rsync-av/usr/local/pg/arch/tridge@192.168.56.5::arch_bak/Password:sendingincrementalfilelist./000000060000000000000011sent16,781,696bytesreceived46bytes4,794,783.43bytes/sectotalsizeis134,217,937speedupis8.00
在m1上查看是表数据是否同步,在主库插入的2条记录成功应用到从库
postgres=#select*fromtest;id|e_name|e_mail|d_id----+--------+-------------+------1|zbs|123@126.com|103|zbs2|124@126.com|104|zbs2|124@126.com|102|zbs1|124@126.com|105|zbs2|124@126.com|106|zbs2|124@126.com|107|zbs2|124@126.com|108|zbs2|124@126.com|109|zbs3|124@126.com|2010|zbs3|124@126.com|20(10rows)
到此,使用rsyn传输wal归档文件到standby服务器使用成功,rsync只输出了新的文件000000060000000000000011
下面实验直接同步wal日志文件
m1目前wal目录
[postgres@localhostpg_wal]$pwd/usr/local/pg/data/pg_wal[postgres@localhostpg_wal]$lltotal81948-rw-------1postgrespostgres41Mar209:2400000002.history-rw-------1postgrespostgres83Mar209:2400000003.history-rw-------1postgrespostgres302Mar209:24000000040000000000000009.00000028.backup-rw-------1postgrespostgres125Mar209:2400000004.history-rw-------1postgrespostgres167Mar209:2400000005.history-rw-------1postgrespostgres16777216Mar2309:38000000060000000000000010-rw-------1postgrespostgres16777216Mar2309:46000000060000000000000011-rw-------1postgrespostgres16777216Mar209:24000000060000000000000012-rw-------1postgrespostgres16777216Mar1710:05000000060000000000000013-rw-------1postgrespostgres16777216Mar1710:15000000060000000000000014-rw-------1postgrespostgres209Mar209:2400000006.historydrwx------2postgrespostgres4096Mar2309:46archive_status
在m7上查看wal目录,并输出不同的文件
[root@z_leaderpg_wal]#/usr/local/bin/rsync-av/usr/local/pg/data/pg_wal/tridge@192.168.56.5::wal_bak/Password:sendingincrementalfilelist./00000002.history00000003.history00000004.history000000040000000000000009.00000028.backup00000005.history00000006.history000000060000000000000011000000060000000000000012000000060000000000000013000000060000000000000014000000060000000000000015archive_status/archive_status/00000002.history.donearchive_status/00000004.history.donearchive_status/000000040000000000000009.00000028.backup.donearchive_status/00000006.history.donearchive_status/000000060000000000000011.donesent33,626,454bytesreceived98,679bytes3,967,662.71bytes/sectotalsizeis83,887,007speedupis2.49
现在在主库上再插入两条记录
postgres=#insertintotestvalues(11,'zbs3','124@126.com',20);INSERT01postgres=#insertintotestvalues(12,'zbs3','124@126.com',20);INSERT01postgres=#select*fromtest;id|e_name|e_mail|d_id----+--------+-------------+------1|zbs|123@126.com|103|zbs2|124@126.com|104|zbs2|124@126.com|102|zbs1|124@126.com|105|zbs2|124@126.com|106|zbs2|124@126.com|107|zbs2|124@126.com|108|zbs2|124@126.com|109|zbs3|124@126.com|2010|zbs3|124@126.com|2011|zbs3|124@126.com|2012|zbs3|124@126.com|20(12rows)
在m7同步wal日志文件到m1
[root@z_leaderpg_wal]#/usr/local/bin/rsync-av/usr/local/pg/data/pg_wal/tridge@192.168.56.5::wal_bak/Password:sendingincrementalfilelist./000000060000000000000012000000060000000000000016archive_status/sent16,802,460bytesreceived24,649bytes3,739,357.56bytes/sectotalsizeis83,887,007speedupis4.99
在m1上查看是表数据是否同步,在主库插入的2条记录成功应用到从库
postgres=#select*fromtest;id|e_name|e_mail|d_id----+--------+-------------+------1|zbs|123@126.com|103|zbs2|124@126.com|104|zbs2|124@126.com|102|zbs1|124@126.com|105|zbs2|124@126.com|106|zbs2|124@126.com|107|zbs2|124@126.com|108|zbs2|124@126.com|109|zbs3|124@126.com|2010|zbs3|124@126.com|2011|zbs3|124@126.com|2012|zbs3|124@126.com|20(12rows)
到此,使用rsyn传输wal文件到standby服务器使用成功,rsync会认识发生变化的文件,并同步变化的部分。
感谢你能够认真阅读完这篇文章,希望小编分享的“如何使用rsync实现postgres日志传送standby服务器”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。