PostgreSQL data同步工具【pg_rewind】



一、系统


IP


HOSTNAME


PG VERSION


DIR


OS


192.168.100.161


node1


9.4


/opt/pgsql


CentOS6.5_x64


192.168.100.162


node2


9.4


/opt/pgsql


CentOS6.5_x64

# cat /etc/issue

CentOS release6.5 (Final)

Kernel \r on an\m

# uname -a

Linux barman2.6.32-431.11.2.el6.x86_64 #1 SMP Tue Mar 25 19:59:55 UTC 2014 x86_64 x86_64x86_64 GNU/Linux

# cat /etc/hosts

127.0.0.1     localhost.localdomainlocalhost.localdomainlocalhost4    localhost4.localdomain4   localhost      node1

::1  localhost.localdomainlocalhost.localdomainlocalhost6    localhost6.localdomain6   localhost      node1

192.168.100.161node1

192.168.100.162node2

二、安装

2.1简介

pg_rewind is a tool for synchronizing aPostgreSQL data directory with another PostgreSQL data directory that wasforked from the first one. The result is equivalent
to rsyncing the first datadirectory with the second one. The advantage of pg_rewind over rsync is thatpg_rewind uses the WAL to determine changed data blocks, and does not requirereading through all files in the cluster. That makes it a lot faster when thedatabase
is large and only a small portion of it differs between the clusters.

注意:

pg_rewind同步数据不像rsync,一般情况下使用rsync做同步时需要扫描整个文件,当数据量不大时扫描时间相对来说可以忽略或接受,但是当数据量达几百G甚至上T时扫描将会耗时很长,为了改进目前的同步机制,因此在pg_rewind中不再对所有同步文件进行扫描,而是仅从wal的timeline中获取相关信息,定位到哪些blocks需要同步并对blocks进行标记,之后再将需要同步的blocks进行拷贝。

pg_rewind要求能够扫描到需要的wal,若需要的wal不在pg_xlog中则去归档中查找(该功能尚未支持,目前需要手动将缺少的wal从归档中拷贝到pg_xlog)

2.2要求

在使用pg_rewind时,需要开启以下数据库功能(2选1):

(1)data
checksums

校验Pg数据页并标记侦测损坏的数据块。针对cluster设置。当然开启该功能会带来性能上的额外开销,因为对每个数据页都要有额外的计算,所以使用时要考虑全面权衡利弊。该功能在initdb时开启(-k),之后不能改变(不过有一个新参数ignore_checksum_failure可以强制Pg在检测到损坏数据的时候继续执行事务,但要保证数据块的头信息没有损坏)。

  1. wal_log_hints

    是Pg9.4中的一个新特性。

    {本次测试选择第一种}

2.3安装pg

Pg源码下载地址:

https://github.com/postgres/postgres

选择最新版本:9.4devel

yum install flex bison readline-devel zlib-devel

安装过程略

注:node1初始化数据库,node2仅安装数据库软件。初始化时加入-k参数。

2.4编译安装pg_rewind

# unzip pg_rewind-master.zip

# mv pg_rewind-master postgres-master/contrib/

# cd postgres-master/contrib/pg_rewind-master/

# make && make install

也可通过pg系统管理用户编译安装,如:

# su - postgres

$ make USE_PGXS=1 top_srcdir=postgres-master

$ make USE_PGXS=1 top_srcdir=postgres-master install

验证是否安装正确:

# su - postgres

$ pg_rewind --version

pg_rewind 0.1

查看是否开启校验:

$ pg_controldata | grep checksum

Data pagechecksum version:          1

postgres=# showdata_checksums ;

data_checksums

----------------

on

(1 row)

三、配置hot standby

3.1配置主节点数据库

$ vi postgresql.conf

listen_addresses= ‘*‘

port = 5432

wal_level =hot_standby

max_wal_senders= 2

wal_keep_segments= 100

hot_standby = on

$ vi pg_hba.conf

host   all            all            192.168.100.0/24       trust

host   replication    all            192.168.100.0/24        trust

启动数据库:

[[email protected] ~]$ pg_ctl restart

3.2设置备节点数据库

[[email protected] pgsql]$ pg_basebackup -D/opt/pgsql/data -h node1 -P

21099/21099 kB(100%), 1/1 tablespace

NOTICE: WAL archiving is not enabled;
you must ensurethat all required WAL segments are copied through other means to complete thebackup

配置recovery.conf:

[[email protected] data]$ cat recovery.conf

standby_mode =‘on‘

primary_conninfo= ‘host=node1 user=postgres port=5432‘

recovery_target_timeline= ‘latest‘

启动备库:

[[email protected] data]$ pg_ctl start

四、切换模拟

4.1模拟主库故障

[[email protected] ~]$ pg_ctl stop -m f

4.2提升备库状态

[[email protected] ~]$ pg_ctl promote

4.3更新数据

[[email protected] ~]$ createdb pgbench

[[email protected] ~]$ pgbench -i -s 10 pgbench

4.4将node1恢复为standby

同步数据:

[[email protected] ~]$ pg_rewind -D /opt/pgsql/data/--source-server=‘host=node2 user=postgres port=5432‘

The serversdiverged at WAL position 0/30000C8 on timeline 1.

No rewindrequired.

[[email protected] ~]$ vi /opt/pgsql/data/recovery.conf

standby_mode =‘on‘

primary_conninfo= ‘host=node2 user=postgres port=5432‘

recovery_target_timeline= ‘latest‘

启动node1上的数据库:

[[email protected] ~]$ pg_ctl start

4.4将node1恢复为master

停止node2:

[[email protected] ~]$ pg_ctl stop -m f

提升node1状态:

[[email protected] ~]$ pg_ctl promote

在node1上做一些更新:

[[email protected] ~]$ pgbench -s 10 -T 60 pgbench

恢复node2为standby:

[[email protected] ~]$ pg_rewind -D /opt/pgsql/data/--source-server=‘host=node1 user=postgres port=5432‘

The serversdiverged at WAL position 0/12ACCC30 on timeline 2.

No rewindrequired.

[[email protected] ~]$ mv /opt/pgsql/data/recovery.done/opt/pgsql/data/recovery.conf

[[email protected] ~]$ vi /opt/pgsql/data/recovery.conf

(修改node2为node1)

启动node2上的数据库:

[[email protected] ~]$ pg_ctl start

server starting

五、基本原理

The basic idea is to copy everything fromthe new cluster to the old cluster,

except for the blocks that we know to bethe same.

1. Scan the WAL log of the old cluster,starting from the last checkpoint before

the point where the new cluster‘s timelinehistory forked off from the old cluster.

For each WAL record, make a note of thedata blocks that were touched. This yields

a list of all the data blocks that werechanged in the old cluster, after the new

cluster forked off.

2. Copy all those changed blocks from thenew cluster to the old cluster.

3. Copy all other files like clog, conffiles etc. from the new cluster to old cluster.

Everything except the relation files.

4. Apply the WAL from the new cluster,starting from the checkpoint created at

failover. (pg_rewind doesn‘t actually apply the WAL, it just creates abackup

label file indicating that when PostgreSQLis started, it will start replay

from that checkpoint and apply all the requiredWAL)

六、参考文献

https://github.com/vmware/pg_rewind

http://michael.otacoo.com/postgresql-2/postgres-module-highlight-pg_rewind-to-recycle-a-postgres-master-into-a-slave/

七、license

pg_rewind can be distributed under theBSD-style PostgreSQL license

时间: 2024-07-29 04:24:06

PostgreSQL data同步工具【pg_rewind】的相关文章

数据库比较同步工具(PostgreSQL Data Sync)V15.3 官方版

PostgreSQL Data Sync是一款功能强大的数据库比较同步工具,可以用于比较数据库内容并进行同步,需要的朋友可以下载. PostgreSQL Data Sync是SQL Maestro Group 发布的一款功能强大的数据库内容比较和同步工具,可以对PostgreSQL 数据库内容进行比较和同步,并且可以自定义关键字和自动映射工具! 1. 比较数据库的内容并发布变化 2. 自动创建无错的同步脚本 3. 易读的差异显示 4. 可将所有选项保持到项目文件以便下次重用 5. 可自定义比较的

bireme数据源同步工具--debezium+kafka+bireme

1.介绍 Bireme 是一个 Greenplum / HashData 数据仓库的增量同步工具.目前支持 MySQL.PostgreSQL 和 MongoDB 数据源官方介绍文档:https://github.com/HashDataInc/bireme/blob/master/README_zh-cn.md 1.数据流 Bireme 采用 DELETE + COPY 的方式,将数据源的修改记录同步到 Greenplum / HashData ,相较于INSERT + UPDATE + DEL

文件夹自动同步工具

这是我之前开发的文件夹自动同步工具,主要实现开发机和服务器之间的文件夹同步. 项目地址: https://github.com/mike-zhang/autoSync 问题描述 在windows下修改代码,到服务器上去编译,但每次都要通过winscp之类的工具拖拽上去(当然你也可以通过scp命令行的方式). 每次修改的文件很少,而且可能位于不同的目录,每次都重复覆盖文件的操作感觉比较麻烦,所以开发了这个自动文件夹自动同步工具. 当然这个工具也可以用于两台linux服务器之间的文件夹同步. 工具介

Atitit.Gui控件and面板----db数据库区----- .数据库比较同步工具 vOa

Atitit.Gui控件and面板----db数据库区----- .数据库比较同步工具 vOa 1. 咨微海信数据库应用 工具 1 2. 数据库比较工具 StarInix SQL Compare   (500K) 3 3. sql delta v5.1 特别版 (15M  推荐) 4 4. RedGate.SQL.Compare.Pro.9.0.0.79 破解版 (9M) 8 5. BXC-SQLServer数据库对象对比工具下载 V1.02免费版_ <BXC-SQL... 8 6. Godsw

C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Text; namespace PinkDatabaseSync { class DBUtility : IDisposable { private string Server; private string

Java并发(基础知识)——显示锁和同步工具类

显示锁                                                                                     Lock接口是Java 5.0新增的接口,该接口的定义如下: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long

阿里云开源离线同步工具DataX3.0介绍

阿里云开源离线同步工具DataX3.0介绍 一. DataX3.0概览 ? DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效的数据同步功能. 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源.当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数

Linux系统备份还原工具4(rsync/数据同步工具)

rsync即是能备份系统也是数据同步的工具. 在Jenkins上可以使用rsync结合SSH的免密登录做数据同步和分发.这样一来可以达到部署全命令化,不需要依赖任何插件去实现. 命令参考:http://man.linuxde.net/rsync 说明: rsync命令 是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. rsy

linux同步工具rsync?

linux同步工具rsync 一.rsync命令 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的"rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明. 语法: rsync [OPTION]... SRC DEST rsync [OPTION]...