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 USER 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;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值