PostgreSQL 9.0.2 Replication Best Practices

PostgreSQL的基于日志的数据库复制技术自8.2版本以来就已经有了,到了9.0更加的完善,standby库已经支持READ ONLY的模式提供用户使用。

1. 基于WAL文件恢复的数据库复制
2. 基于stream的数据库复制
在设计以上两中复制场景时,需要注意以下几点:
1. 尽量使用类似的硬件和相同操作系统.
    数据库复制的目的无外乎standby或提供查询用,硬件和primary节点差的太离谱当然不恰当的,所以为了安全,建议使用同等配置的硬件。
2. 尽量使用相同的系统配置。
    如相同的数据库目录,相同的用户环境变量配置等等。
3. 给系统起个比较容易辨认的名字。
    为了防止误操作,还是起个容易辨认的名字吧。
4. 保持系统时钟同步。
    primary和standby的时间确保同步,否则后患无穷。
5. 确保primary和standby的系统时区(如 UTC)一致。
6. 监控一定要做好,如磁盘的监控,复制延时的监控,这样才能确保你的复制系统是健康有效的。
7. 合理的配置hot_standby参数
max_standby_archive_delay
max_standby_streaming_delay
vacuum_defer_cleanup_age
trace_recovery_messages

另外,在设计HOT_STANDBY场景时,还需要注意以下几点:
一、查询冲突
  1. 资源(如CPU,I/O)
资源冲突比较容易理解,如当standby节点正在从主节点恢复数据时,需要占用大量的CPU和IO资源,这时在standby节点发生查询的话就会有资源方面的冲突。
  2. 锁(如AccessExclusiveLocks)
举个例子来说明一下问题,当在主节点使用一个DDL语句如在一个5千万的表中加一个列,并设置默认值,这是一个比较耗时间的操作。 alter table tbl_users add column last_name varchar(64) default 'digoal'; 这个操作需要获取tbl_users表的排他锁,所以在standby也会获得这个锁,如果在standby节点有用户使用了和这个排他锁冲突的锁的话,在达到参数配置的延时后,这个用户进程将被cancel掉。
通过修改参数max_standby_archive_delay 和 max_standby_streaming_delay 等于-1可以避免因为锁冲突导致的cancel。把这两个参数设为-1就是说暂停standby的recover 操作.不过还是小心使用,可能导致WAL越来越多甚至溢出。
  3. 清除数据
如主节点发生VACUUM事件时,根据MVCC原理PostgreSQL可能会收回当前数据库中所有QUERY都不能看到的tuples,所以在清楚前,主节点的清除进程是需要知道当前系统中存在query的版本信息的,而在standby中正在发生的query,主节点是无法获得这部分信息的。因此主节点发生的VACUUM回收的tuples在STANDBY节点也许是那里的query可见的tuples。这就是清除数据冲突。(目前,第二象限公司2ndQuadrant开发的repmgr模块可以实现primary节点能够获取standby的query信息,具体信息可以到相关网站查询)
vacuum_defer_cleanup_age 这个参数可以用来配置standby节点上面的发生这种冲突时recover 的 apply延时。
  4. 其他
如在主节点drop database,standby节点的相关SESSION将退出。

因此,建议在hot standby中如果要跑比较LONG的事务,需要配置好比较大的中央日志服务器,阻止RECOVER的发生再来跑。或者使用repmgr这种第三方软件来减少冲突的发生。

完全冻结一个standby的推荐方法:
在 recovery.conf配置中去除restore_command and primary_conninfo 的设置, 并且设置Standby_mode = on。
重启standby,将进入冻结状态。(不恢复任何数据)

时间: 2024-11-02 00:44:15

PostgreSQL 9.0.2 Replication Best Practices的相关文章

PostgreSQL 9.0 流复制介绍

PostgreSQL9提供了一个非常兴奋的功能,hot-standby,功能与ORACLE 11G的ACTIVE STANDBY类似.并且增加了流复制的功能,这个与oracle 的standby redo log功能类似,大大的缩短了备份库与主库的事务间隔. HOT-STANDBY可以提供容灾,恢复的同时可以把数据库打开,提供查询功能.以前的版本恢复的时候是不能打开的. 首先看一张postgreSQL的高可用,负载均衡,复制特征矩阵图 这里有一个很好的特性 Slaves accept read-

PostgreSQL 10.0 preview 变化 - 逻辑复制pg_hba.conf变化,不再使用replication条目

标签 PostgreSQL , 10.0 , 变化 , pg_hba.conf , replication , 逻辑复制 背景 pg_hba.conf的replication条目,在10.0后,将仅仅适用于物理复制. 逻辑复制使用普通DATABASE条目,但是逻辑复制的角色依旧需要带replication属性. 配置时请注意了. Change logical replication pg_hba.conf use Logical replication no longer uses the "r

元旦技术大礼包 - 2017金秋将要发布的PostgreSQL 10.0已装备了哪些核武器?

标签 PostgreSQL , 10.0 , 金秋 , 元旦 , 大礼包 , commitfest 背景 早上送给大家的新年大礼包,一年一个大版本是PostgreSQL社区的传统,虽然发布时间通常为秋天,还有一段时间,但是已经迫不及待地想看看2017金秋将要发布的10.0版本已经装备了哪些核武器. 放心,还会有一波又一波的feature和增强搭上开往2017金秋的列车,本文提到的可能只是其中的某一节车厢沃,PGer是不是开始有一点振奋人心的感觉啦. 1. 并行计算专属动态共享内存区,(加速索引扫

PostgreSQL 10.0 preview 功能增强 - 备库支持"时间、字节"六维延迟

标签 PostgreSQL , 10.0 , 时间度量备库延迟 , pg_stat_replication 背景 pg_stat_replication视图中有4个字段记录了从备库反馈的WAL位点.如下: postgres=# \d pg_stat_replication View "pg_catalog.pg_stat_replication" Column | Type | Modifiers ------------------+-------------------------

PostgreSQL 10.0 解读

背景 本文参考当前的release notes以及git, committe fest编写,10.0还没有正式release,部分内容在正式release时可能会修改,同时会新增新的内容. 迁移到10.0的注意事项 迁移时,请注意不兼容的地方. 1. 使用pg_upgrade升级时,hash index 需要重建.(因为10.0为了支持hash index WAL,存储结构改变了.) 2. $PGDATA/pg_log, pg_xlog, pg_clog目录分别重命名为log, pg_wal,

PostgreSQL 10.0 preview 功能增强 - 客户端ACL(pg_hba.conf动态视图)

标签 PostgreSQL , ACL , pg_hba.conf 背景 pg_hba.conf文件是用于控制客户端访问PostgreSQL数据库的防火墙配置(ACL),以往我们要了解数据库配置的ACL,必须打开这个文件进行查看. 例如 cat $PGDATA/pg_hba.conf # PostgreSQL Client Authentication Configuration File # ===================================================

PostgreSQL 10.0 preview 功能增强 - 动态视图pg_stat_activity新增数据库管理进程信息

标签 PostgreSQL , 10.0 , pg_stat_activity , 管理进程 , 后台进程 , 工作进程 , 并行计算进程 背景 PostgreSQL为进程模型,启动时.启动后会fork一些管理进程,以及用户连接时会产生用户的服侍进程. 例如 1. postmaster,负责监听 2. startup进程,负责recovery 3. logger, 负责写日志 4. shared buffer writer,负责通过LRU算法刷脏页,持久化数据文件 5. wal buffer w

PostgreSQL 10.0 preview 功能增强 - libpq支持多主机连接(failover,LB)让数据库HA和应用配合更紧密

标签 PostgreSQL , 10.0 , libpq , jdbc , failover , loadbalance , multi host , target_session_attrs 背景 数据库一主多备,这个词在互联网应该不陌生.但是主备切换和应用程序如何配合才能天衣无缝呢?你可能会有这样的疑问. 1. 什么类型的QUERY发给主库,什么类型的QUERY发给备库? 2. 主库和备库发生了角色切换之后,客户端连接如何配合? 业界有一些做法可以回答这两个问题. 1. 通常使用集群软件,使

PostgreSQL 10.0 逻辑复制原理与最佳实践

标签 PostgreSQL , logical replication , 逻辑复制 , 最佳实践 背景 PostgreSQL 从2010年发布的9.0开始支持流式物理复制,备库可以作为只读库打开,提供给用户使用. 物理复制的好处 1. 物理层面完全一致,这是许多商业数据库的惯用手段.例如Oracle的DG. 2. 延迟低,事务执行过程中产生REDO record,实时的在备库apply,事务结束时,备库立马能见到数据.不论事务多大,都一样. 3. 物理复制的一致性.可靠性达到了金融级的需求,不