SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
PostgreSQL 9 高性能集群实施手册

                        刘鑫 <liuxin2@kingsoft.com>

                              August 24, 2010



1     PostgreSQL standby

    对于大规模数据库应用,如何提供读写分离和热同步集群,是非常重要的内容。PostgreSQL
有多种不同的实施方案,这里我们讨论 standby 技术的特色和实现。


1.1    standby 简介

    standby 技术基于 PostgreSQL 的预写入日志(wal)同步,建立服务器级的数据同步节点。
它的节点间直接传递写操作的二进制预写入事务,传输效率高、性能好,一致性强,自动同步
DDL 操作。
    standby 组件是 PostgreSQL 的官方发行版内置功能。
    standby 节点的核心机制并不复杂,即通过操作系统命令(或 pg standby 命令),将服务器
节点间的二进制日志同步到同一个状态。设定备份节点处于恢复状态。当主节点可访问时,不
断有新的预写入日志产生并同步到备份节点。备份节点就一直处于恢复状态。一旦这个同步过
程因某些原因终止1 ,备份节点即认为恢复过程结束,自动切换到可访问的状态。
    通 常 我 们 会 使 用 PostgreSQL 配 置 项 archive command 将 wal 存 档 于 一 个 特 定 的 路 径,
standby 使用 recovery 配置项 restore command 指定一个系统命令,自行获取需要恢复的 wal
,如果文件不存在,会等待直到 timout 。
    archive 和 restore 的原本是为了通过 wal 实现增量备份和恢复。
    因此我们需要注意这样几点:
    过去的 standby 组件性能很好,但是也有其不足,其中一个很重要的问题是 standby 节点不
能读。这使它只能限于作为份节点存在。


1.2    PostgreSQL 9 的 standby 增进

    PostgreSQL 9 对于 standby 功能进行了多方面的增进:

快速同步 允许“尽快的”将处理中的 WAL 发布出去。

流式同步 允许 standby 节点联接到 primary 节点上,以流式获取新的 WAL 数据,达到真正的
      “hot standby”。
    1 在生产环境中,往往是因为主节点    down 机导致访问超时。


                                      1
1 POST RESQL STA DBY                                                               2




                         Figure 1: PostgreSQL 9 之前的 standby


压缩传输 允许使用压缩方式传输 WAL,更为节省带宽。近期见到的几个高负载的数据库服务
      器,普遍 CPU 资源比较充足,对于此类应用,这个功能相当实用。

replication 联接 虽然 PostgreSQL 9 要求用于流式同步的登录帐户必需是 superuser,但是在
      pg hba 中,可以限定该用户只能在 primary 节点执行同步复制,提高了安全性。

性能提升 文档声称新的基于 WAL 文件的复制可以得到一个数量级以上的性能提升,这一点我
      还没有确认。

standby 节点可读 当 standby 节点打开 hot standby 选项,可以实时进行只读的查询。这使得
      standby 成为一个兼具增量备份/维护、实时同步备用节点和负载均衡能力的多功能组件。



1.3   基于文件的同步

   基于文件的同步原理相当简单,可以依据以下的步骤执行:


1.3.1 修改 primary 的选项

   编辑 primary 节点的 postgres.conf 文件,设定 `archive mode` 为'on'。设定 archive command
为'cp -i %p /mnt/server/archivedir/%f </dev/null' 2 。并且将 wal level 设为 `archive` 。
   服务器调用 archive command 时,会将 %p 替换为最新被归档的 WAL 文件路径全名, %f
替换为文件名。
  2 这是最简单的写法,在并发环境下,文档建议预先使用              test 判断文件是否存在。如果需要将归档文件备份到远程存
储,通常 DBA 们会倾向使用更为高效的 rsync。
1 POST RESQL STA DBY                                                             3




                              Figure 2: PostgreSQL 9 的 standby


1.3.2 将 primary 节点设定为备份状态

  将 primary 节点 restart ,以 superuser 登录到 postgres 库,执行:

  select pg start backup ( ' ' ) ;

  服务器即进入“备份”状态。停止从 WAL 向数据区的写入。此时所有对 primary 的访问仍
可正常进行。
  从 pg start backup 函数的参数可以看出,我们可以给备份过程起一个好记的名字。


1.3.3 建立 standby 节点

  在 standby 主机上建立一个空的数据目录,可以以 postgres 身份 mkdir 后设定读写权限为
700。
  将 primary 主机的 data 目录中的内容 scp 到这里——同样道理,rsync 或手工调用 gzip 都
会提高传输效率。
  这样复制过来的目录中会有 primary 节点的 pid 文件。删除 postmaster.pid。
  修改 postgresql.conf 和 pg hba.conf ,将网络访问权限、缓存设置等都设定为适应本地环
境的配置。将 archive mode 和 archive command 项注释掉。
  建立 recovery.conf 文件,内容如下:

  standby mode = ' on '
  restore command = ' cp / mnt / s e r v e r / a r c h i v e d i r /% f %p '

  同样,在实用环境中,往往会使用 rsync 作为从远程归档存储中同步数据的命令。
1 POST RESQL STA DBY                                                    4


  需要注意的是,无论是 primary 向 standby 直接推送 WAL,还是 standby 主动去获取,必
须要 super user 帐号有远程访问权限,服务器默认使用的总是 postgres。为了安全起见,最好
为 postgres 用户颁发 RSA 密钥,使用 SSL 方式登录远程主机进行复制。
  为了更有效的进行工作,可以预先准备好 standby 主机的 postgresql.conf、pg hba.conf、
recovery.conf 等文件,此时复制过去即可。
  此时启动 standby 节点,会看到一系列关于 standby 启动的提示。该节点会依据 recov-
ery.conf 的设定 3 去获取 WAL 文件,直至 timeout 条件达成,即自动切换到正常工作模式。


1.3.4 正式启动主从模式

  回到 primary 的管理界面,执行:

s e l e c t ∗ from pg stop backup ( ) ;

  如果没有设定错误,此时可以看到主从节点的日志都提示同步过程开始。此时可以在
primary 节点上执行各种 DDL 和 DML ,数据变更会很快到达 standby 节点。


1.3.5 hot standby

  如果将主从节点的 wal level 都设定为'hot standby'。则从节点处于可读状态。此时可以做
为负载均衡服务器提供读服务。
  更进一步,如果直接归档 primary 节点数据区中的 backup in progress 文件,可以得到更高
的同步率。


1.3.6 基于归档文件的复制

  可以看出此配置方式其实简单的利用了归档文件和增量恢复过程。通过利用 recovery.conf
和 archive 的配置,其实可以组合出多种不同的维护方案。


1.4   基于流式同步的集群实施

  postgresql 9 允许用户流式的同步主从节点。而且设定更为简单4 。


1.4.1 预设 primary 环境

  在 primary 上建立一个用于复制的超级用户,需要注意的是这个用户的用户名不能为
“replication”。这里我设定的用户名为 repl。

  c r e a t e user r e p l superuser l o g i n password ' 1 q2w3e ' ;

  在 primary 的 pg hba.conf 文件中,加入一行:
  3 实际上从   primary 复制来的文件中已经携带了一些必要的,关于 primary 的信息。
  4 应当注意的一点是,基于文件的同步可以提供更为丰富的功能,而且基于流的同步提供了最大可能的同步速度。两

者并非简单的更新换代。
1 POST RESQL STA DBY                                                             5



# TYPE DATABASE               USER CIDR−ADDRESS                      METHOD
host      r e p l i c a t i o n r e p l 1 9 2 . 1 6 8 . 1 . 1 0 0 / 3 2 md5

   CIDR-ADDRESS 一栏设定为 standby 主机的地址。
   wal level 设定为 hot standby。
   archive mode 设定为 on。
   max wal senders 是允许接入的 standby 流连接个数,想允许多少个 standby 进行流式同
步,就设为几,默认为 0,不允许接入。


1.4.2 建立 standby 节点

   在 standby 主机上建立一个空的数据目录,可以以 postgres 身份 mkdir 后设定读写权限为
700。
   将 primary 主机的 data 目录中的内容 scp 到这里——同样道理,rsync 或手工调用 gzip 都
会提高传输效率。
   这样复制过来的目录中会有 primary 节点的 pid 文件。删除 postmaster.pid。
   修改 postgresql.conf 和 pg hba.conf ,将网络访问权限、缓存设置等都设定为适应本地环境
的配置。将 archive mode 和 archive command 项注释掉。设定 wal level 为 hot standby。设
定 hot standby 为 on。
   建立 recovery.conf 文件,内容如下:

standby mode = ' on '
p r i ma ry c on ni n f o = 
' host = 1 0 . 2 0 . 1 3 4 . 5 1 port =5432 user = r e p l password=1q2w3e '

   此时启动 standby 节点,会看到一系列关于 standby 启动的提示。该节点会依据 recov-
ery.conf 的设定联接 priamry 节点,直至 timeout 条件达成 5 。


1.4.3 正式启动主从模式

   回到 primary 的管理界面,执行:

s e l e c t ∗ from pg stop backup ( ) ;

   如果没有设定错误,此时可以看到主从节点的日志都提示同步过程开始。此时可以在
primary 节点上执行各种 DDL 和 DML ,数据变更会同步到达 standby 节点。6




  5 其实我们总是可以在          recovery.conf 中指定 tigger file 文件名,这样,只要我们 touch 出一个触发文件,就可以让
standby 节点进入正常模式。
   6 当然,远程的 standby 总是比 primary 慢那么一点,但是 WAL 层相当于同步向各节点发送数据,这个同步过程远

比基于文件的方式要快。

Weitere ähnliche Inhalte

Was ist angesagt?

Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)haiyuan ning
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStackRongze Zhu
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术团队
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建Liyang Tang
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术团队
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 
Node cluster
Node clusterNode cluster
Node clusteraleafs
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220Jinrong Ye
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期frogd
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練Bo-Yi Wu
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践rewinx
 
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011Yiwei Ma
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer CacheSky Jian
 

Was ist angesagt? (20)

Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStack
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
Node cluster
Node clusterNode cluster
Node cluster
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220
 
数据库内核分享——第一期
数据库内核分享——第一期数据库内核分享——第一期
数据库内核分享——第一期
 
Mysql集群
Mysql集群Mysql集群
Mysql集群
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer Cache
 

Ähnlich wie PostgreSQL 9 Standby

Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析baggioss
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作maclean liu
 
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...acelyc1112009
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
第一讲 My sql初步
第一讲 My sql初步第一讲 My sql初步
第一讲 My sql初步hjl888666
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面Tianwei Liu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delaymaclean liu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
TSM6培训教程
TSM6培训教程TSM6培训教程
TSM6培训教程acqua young
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器Leyi (Kamus) Zhang
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy clusterYiwei Ma
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)Cyril Wang
 
如何使用 Xhprof 分析網站效能 (真實案例)
如何使用 Xhprof 分析網站效能 (真實案例)如何使用 Xhprof 分析網站效能 (真實案例)
如何使用 Xhprof 分析網站效能 (真實案例)Cyril Wang
 
IoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudyIoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudyJialinQiao
 

Ähnlich wie PostgreSQL 9 Standby (20)

Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作
 
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
第一讲 My sql初步
第一讲 My sql初步第一讲 My sql初步
第一讲 My sql初步
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
TSM6培训教程
TSM6培训教程TSM6培训教程
TSM6培训教程
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
 
如何使用 Xhprof 分析網站效能 (真實案例)
如何使用 Xhprof 分析網站效能 (真實案例)如何使用 Xhprof 分析網站效能 (真實案例)
如何使用 Xhprof 分析網站效能 (真實案例)
 
IoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudyIoTDB OptimizeAndCaseStudy
IoTDB OptimizeAndCaseStudy
 

Mehr von March Liu

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core ParsecMarch Liu
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集March Liu
 
奇点与未来
奇点与未来奇点与未来
奇点与未来March Liu
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神March Liu
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务March Liu
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长March Liu
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorialMarch Liu
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemyMarch Liu
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性March Liu
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs IntroductionMarch Liu
 
软件开发工程化的个人体验
软件开发工程化的个人体验软件开发工程化的个人体验
软件开发工程化的个人体验March Liu
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 
Python 数据库技术第三讲
Python 数据库技术第三讲Python 数据库技术第三讲
Python 数据库技术第三讲March Liu
 
Python 数据库技术讲座(二)
Python 数据库技术讲座(二)Python 数据库技术讲座(二)
Python 数据库技术讲座(二)March Liu
 
Python 数据库技术讲座(一)
Python 数据库技术讲座(一)Python 数据库技术讲座(一)
Python 数据库技术讲座(一)March Liu
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术March Liu
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践March Liu
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案March Liu
 
1 Python简介
1 Python简介1 Python简介
1 Python简介March Liu
 

Mehr von March Liu (20)

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core Parsec
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集
 
奇点与未来
奇点与未来奇点与未来
奇点与未来
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorial
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemy
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs Introduction
 
软件开发工程化的个人体验
软件开发工程化的个人体验软件开发工程化的个人体验
软件开发工程化的个人体验
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
Python 数据库技术第三讲
Python 数据库技术第三讲Python 数据库技术第三讲
Python 数据库技术第三讲
 
Python 数据库技术讲座(二)
Python 数据库技术讲座(二)Python 数据库技术讲座(二)
Python 数据库技术讲座(二)
 
Python 数据库技术讲座(一)
Python 数据库技术讲座(一)Python 数据库技术讲座(一)
Python 数据库技术讲座(一)
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案
 
About Me
About MeAbout Me
About Me
 
1 Python简介
1 Python简介1 Python简介
1 Python简介
 

Kürzlich hochgeladen

SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLPJamie (Taka) Wang
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven designJamie (Taka) Wang
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_patternJamie (Taka) Wang
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 

Kürzlich hochgeladen (15)

SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 
20200323 - AI Intro
20200323 - AI Intro20200323 - AI Intro
20200323 - AI Intro
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven design
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 

PostgreSQL 9 Standby

  • 1. PostgreSQL 9 高性能集群实施手册 刘鑫 <liuxin2@kingsoft.com> August 24, 2010 1 PostgreSQL standby 对于大规模数据库应用,如何提供读写分离和热同步集群,是非常重要的内容。PostgreSQL 有多种不同的实施方案,这里我们讨论 standby 技术的特色和实现。 1.1 standby 简介 standby 技术基于 PostgreSQL 的预写入日志(wal)同步,建立服务器级的数据同步节点。 它的节点间直接传递写操作的二进制预写入事务,传输效率高、性能好,一致性强,自动同步 DDL 操作。 standby 组件是 PostgreSQL 的官方发行版内置功能。 standby 节点的核心机制并不复杂,即通过操作系统命令(或 pg standby 命令),将服务器 节点间的二进制日志同步到同一个状态。设定备份节点处于恢复状态。当主节点可访问时,不 断有新的预写入日志产生并同步到备份节点。备份节点就一直处于恢复状态。一旦这个同步过 程因某些原因终止1 ,备份节点即认为恢复过程结束,自动切换到可访问的状态。 通 常 我 们 会 使 用 PostgreSQL 配 置 项 archive command 将 wal 存 档 于 一 个 特 定 的 路 径, standby 使用 recovery 配置项 restore command 指定一个系统命令,自行获取需要恢复的 wal ,如果文件不存在,会等待直到 timout 。 archive 和 restore 的原本是为了通过 wal 实现增量备份和恢复。 因此我们需要注意这样几点: 过去的 standby 组件性能很好,但是也有其不足,其中一个很重要的问题是 standby 节点不 能读。这使它只能限于作为份节点存在。 1.2 PostgreSQL 9 的 standby 增进 PostgreSQL 9 对于 standby 功能进行了多方面的增进: 快速同步 允许“尽快的”将处理中的 WAL 发布出去。 流式同步 允许 standby 节点联接到 primary 节点上,以流式获取新的 WAL 数据,达到真正的 “hot standby”。 1 在生产环境中,往往是因为主节点 down 机导致访问超时。 1
  • 2. 1 POST RESQL STA DBY 2 Figure 1: PostgreSQL 9 之前的 standby 压缩传输 允许使用压缩方式传输 WAL,更为节省带宽。近期见到的几个高负载的数据库服务 器,普遍 CPU 资源比较充足,对于此类应用,这个功能相当实用。 replication 联接 虽然 PostgreSQL 9 要求用于流式同步的登录帐户必需是 superuser,但是在 pg hba 中,可以限定该用户只能在 primary 节点执行同步复制,提高了安全性。 性能提升 文档声称新的基于 WAL 文件的复制可以得到一个数量级以上的性能提升,这一点我 还没有确认。 standby 节点可读 当 standby 节点打开 hot standby 选项,可以实时进行只读的查询。这使得 standby 成为一个兼具增量备份/维护、实时同步备用节点和负载均衡能力的多功能组件。 1.3 基于文件的同步 基于文件的同步原理相当简单,可以依据以下的步骤执行: 1.3.1 修改 primary 的选项 编辑 primary 节点的 postgres.conf 文件,设定 `archive mode` 为'on'。设定 archive command 为'cp -i %p /mnt/server/archivedir/%f </dev/null' 2 。并且将 wal level 设为 `archive` 。 服务器调用 archive command 时,会将 %p 替换为最新被归档的 WAL 文件路径全名, %f 替换为文件名。 2 这是最简单的写法,在并发环境下,文档建议预先使用 test 判断文件是否存在。如果需要将归档文件备份到远程存 储,通常 DBA 们会倾向使用更为高效的 rsync。
  • 3. 1 POST RESQL STA DBY 3 Figure 2: PostgreSQL 9 的 standby 1.3.2 将 primary 节点设定为备份状态 将 primary 节点 restart ,以 superuser 登录到 postgres 库,执行: select pg start backup ( ' ' ) ; 服务器即进入“备份”状态。停止从 WAL 向数据区的写入。此时所有对 primary 的访问仍 可正常进行。 从 pg start backup 函数的参数可以看出,我们可以给备份过程起一个好记的名字。 1.3.3 建立 standby 节点 在 standby 主机上建立一个空的数据目录,可以以 postgres 身份 mkdir 后设定读写权限为 700。 将 primary 主机的 data 目录中的内容 scp 到这里——同样道理,rsync 或手工调用 gzip 都 会提高传输效率。 这样复制过来的目录中会有 primary 节点的 pid 文件。删除 postmaster.pid。 修改 postgresql.conf 和 pg hba.conf ,将网络访问权限、缓存设置等都设定为适应本地环 境的配置。将 archive mode 和 archive command 项注释掉。 建立 recovery.conf 文件,内容如下: standby mode = ' on ' restore command = ' cp / mnt / s e r v e r / a r c h i v e d i r /% f %p ' 同样,在实用环境中,往往会使用 rsync 作为从远程归档存储中同步数据的命令。
  • 4. 1 POST RESQL STA DBY 4 需要注意的是,无论是 primary 向 standby 直接推送 WAL,还是 standby 主动去获取,必 须要 super user 帐号有远程访问权限,服务器默认使用的总是 postgres。为了安全起见,最好 为 postgres 用户颁发 RSA 密钥,使用 SSL 方式登录远程主机进行复制。 为了更有效的进行工作,可以预先准备好 standby 主机的 postgresql.conf、pg hba.conf、 recovery.conf 等文件,此时复制过去即可。 此时启动 standby 节点,会看到一系列关于 standby 启动的提示。该节点会依据 recov- ery.conf 的设定 3 去获取 WAL 文件,直至 timeout 条件达成,即自动切换到正常工作模式。 1.3.4 正式启动主从模式 回到 primary 的管理界面,执行: s e l e c t ∗ from pg stop backup ( ) ; 如果没有设定错误,此时可以看到主从节点的日志都提示同步过程开始。此时可以在 primary 节点上执行各种 DDL 和 DML ,数据变更会很快到达 standby 节点。 1.3.5 hot standby 如果将主从节点的 wal level 都设定为'hot standby'。则从节点处于可读状态。此时可以做 为负载均衡服务器提供读服务。 更进一步,如果直接归档 primary 节点数据区中的 backup in progress 文件,可以得到更高 的同步率。 1.3.6 基于归档文件的复制 可以看出此配置方式其实简单的利用了归档文件和增量恢复过程。通过利用 recovery.conf 和 archive 的配置,其实可以组合出多种不同的维护方案。 1.4 基于流式同步的集群实施 postgresql 9 允许用户流式的同步主从节点。而且设定更为简单4 。 1.4.1 预设 primary 环境 在 primary 上建立一个用于复制的超级用户,需要注意的是这个用户的用户名不能为 “replication”。这里我设定的用户名为 repl。 c r e a t e user r e p l superuser l o g i n password ' 1 q2w3e ' ; 在 primary 的 pg hba.conf 文件中,加入一行: 3 实际上从 primary 复制来的文件中已经携带了一些必要的,关于 primary 的信息。 4 应当注意的一点是,基于文件的同步可以提供更为丰富的功能,而且基于流的同步提供了最大可能的同步速度。两 者并非简单的更新换代。
  • 5. 1 POST RESQL STA DBY 5 # TYPE DATABASE USER CIDR−ADDRESS METHOD host r e p l i c a t i o n r e p l 1 9 2 . 1 6 8 . 1 . 1 0 0 / 3 2 md5 CIDR-ADDRESS 一栏设定为 standby 主机的地址。 wal level 设定为 hot standby。 archive mode 设定为 on。 max wal senders 是允许接入的 standby 流连接个数,想允许多少个 standby 进行流式同 步,就设为几,默认为 0,不允许接入。 1.4.2 建立 standby 节点 在 standby 主机上建立一个空的数据目录,可以以 postgres 身份 mkdir 后设定读写权限为 700。 将 primary 主机的 data 目录中的内容 scp 到这里——同样道理,rsync 或手工调用 gzip 都 会提高传输效率。 这样复制过来的目录中会有 primary 节点的 pid 文件。删除 postmaster.pid。 修改 postgresql.conf 和 pg hba.conf ,将网络访问权限、缓存设置等都设定为适应本地环境 的配置。将 archive mode 和 archive command 项注释掉。设定 wal level 为 hot standby。设 定 hot standby 为 on。 建立 recovery.conf 文件,内容如下: standby mode = ' on ' p r i ma ry c on ni n f o = ' host = 1 0 . 2 0 . 1 3 4 . 5 1 port =5432 user = r e p l password=1q2w3e ' 此时启动 standby 节点,会看到一系列关于 standby 启动的提示。该节点会依据 recov- ery.conf 的设定联接 priamry 节点,直至 timeout 条件达成 5 。 1.4.3 正式启动主从模式 回到 primary 的管理界面,执行: s e l e c t ∗ from pg stop backup ( ) ; 如果没有设定错误,此时可以看到主从节点的日志都提示同步过程开始。此时可以在 primary 节点上执行各种 DDL 和 DML ,数据变更会同步到达 standby 节点。6 5 其实我们总是可以在 recovery.conf 中指定 tigger file 文件名,这样,只要我们 touch 出一个触发文件,就可以让 standby 节点进入正常模式。 6 当然,远程的 standby 总是比 primary 慢那么一点,但是 WAL 层相当于同步向各节点发送数据,这个同步过程远 比基于文件的方式要快。