pgsql主从复制

pgsql复制的三种模式:

1. 基于日志文件的复制

  Master库向Standby库异步传输WAL日志,Standby解析日志并把日志中的操作重新回放,这种复制模式需要等待Master库将整个WAL日志填充完毕后才发送给Standby库,如果中途发生宕机,那么事物都会丢失。

2. 异步流复制模式

  Master库以流模式向Standby库异步传输WAL日志,Standby解析收到的日志并把其中的操作重新回放。相比第一种,这种模式不需要等待WAL填充完毕,在Master提交事物后,会持续把数据流传输到Standby库,如果发生宕机,只会丢失掉最后一个事物。

3. 流同步复制模式(Synchronous Replication)

  流复制模式的同步版本。Master库发出commit命令后,命令会被阻塞,等待所有Standby库上都提交后,才会真正提交。这种模式是最安全的模式,不过在网络繁忙或者IO繁忙的系统中,性能极其容易损耗。

准备两台服务器:

主:192.168.89.52

从:192.168.89.154

主服务器上的操作:

1、创建一个复制账号replica:

CREATE ROLE replica replication encrypted password 'replica';

2、配置从服务器允许访问主服务器:

修改pg_hba.cnf,在最后一行增加replica用户可以访问:

host        replication         replica        192.168.89.154/32         md5

3、修改postgresql.conf配置文件的REPLICATION下的Sending Server和Master Server部分:

Sending Server段:

max_wal_senders:指定来自从服务器的最大连接数

wal_keep_segments:指定从服务器在流复制的情况下,pg_xlog目录所能保留过去日志文件段的最小数

wal_sender_timeout :中断超过活动时间的连接

track_commit_timestamp:记录事物提交时间

Master Server段:

synchronous_standby_names支持同步复制的参数,指定需要同步复制的服务器列表

vacuum_defer_cleanup_age:指定清理MVCC版本前,应推迟多少个事物

4、重启主服务器:

pg_ctl -D /usr/local/pgsql/data restart

从服务器配置:

1、如果已经初始化了数据目录,那么清空数据目录:

rm -rf data/*

2、利用pg_basebackup命令进行热备份,复制主服务器的整个数据目录到从服务器上:

pg_basebackup必须由超级用户或者具有REPLICATION权限的用户执行,切g_hba.conf必须允许该host建立连接,最后max_wal_senders必须要配置足够高以留出至少一个会话用于备份。

./pg_basebackup -F p -P -R -D /usr/local/pgsql/data -h 192.168.89.52 -p 15432 -U replica -W

参数说明:

-F:输出格式

-P:显示进程信息

-R:备份结束后自动生成recovery.conf文件

-D:指定输出的数据目录,目录需要清空

-h:指定host

-U:指定用户

-p:指定端口号

-W:强制使用密码模式

3、编辑recovery.conf文件,如果没有,可以创建一个:

cat recovery.conf

standby_mode = on       #指定这是一个从服务器
primary_conninfo = 'host=192.168.89.52 port=15432 user=replica password=replica'      #配置主服务器信息

recovery_target_timeline = 'latest'      #指定同步到最新数据

4、修改postgresql.conf配置文件的REPLICATION下的Standby Servers部分:

Standby Servers段:

hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询

max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间

wal_receiver_status_interval = 1s # 多久向主报告一次从的状态

hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈

5、启动从服务器:

pg_ctl -D /usr/local/pgsql/data start

查看复制状态:

在主库查询:

select * from pg_stat_replication;

猜你喜欢

转载自blog.csdn.net/baijiu1/article/details/88965465