PostgreSQL 9 Hot Standby

 刘鑫 <march.liu@gmail.com>

       standby 技术实践


      August 24, 2010




                        .   .   .   .   .   .
Standby 集群知识




               .   .   .   .   .   .
PostgreSQL 内置的集群方案




               .     .   .   .   .   .
基于预写入机制




          .   .   .   .   .   .
DML or DDL
client − − − − [switch file → archive file]wal level − data storage
        − − −→              −                        →




                                             .    .   .    .    .     .
高性能




      .   .   .   .   .   .
同步差可控




        .   .   .   .   .   .
流式同步




       .   .   .   .   .   .
基于交换文件的快同步:backup in progress




                     .   .   .   .   .   .
较低负载压力的“温备”模式




           .    .   .   .   .   .
基于归档文件的增量恢复:archive/restore




                    .   .   .   .   .   .
实施




     .   .   .   .   .   .
基本步骤




       .   .   .   .   .   .
预备 standby 配置文件




              .   .   .   .   .   .
预设 primary 节点。




                 .   .   .   .   .   .
primary 进入备份模式




                 .   .   .   .   .   .
建立 standby 环境




                .   .   .   .   .   .
配置 standby




             .   .   .   .   .   .
启动 standby




             .   .   .   .   .   .
将 primary 转入正常模式。




              .     .   .   .   .   .
standby 实施




             .   .   .   .   .   .
计划与设计




        .   .   .   .   .   .
采用何种架构?




          .   .   .   .   .   .
读写分离 or Standlone?




                .    .   .   .   .   .
根据同步率和性能要求采用不同的方案。




             .   .   .   .   .   .
文件 or 流?




           .   .   .   .   .   .
希望回溯?




        .   .   .   .   .   .
预备 standby 配置




                .   .   .   .   .   .
编辑 postgresql.conf




                     .   .   .   .   .   .
hot standby?




               hot standby = on/off




                                     .   .   .   .   .   .
建立 recovery.conf




                   .   .   .   .   .   .
文件同步




 standby mode = ’on’ restore command = ’cp $ARCHIVEDIR/%f
                              %p’




                                      .   .   .   .   .     .
流式同步




   standby mode = ’on’ primary conninfo = ’host=primary
                  port=5432 user=repl’




                                       .   .    .   .     .   .
预备 primary




             .   .   .   .   .   .
编辑 postgresql.conf




                     .   .   .   .   .   .
wal level = archive/hot standby




                          .       .   .   .   .   .
基于 archive 模式




                archive mode = on




                                    .   .   .   .   .   .
基于归档文件




  archive command = ’test ! -f $ARCHIVEDIR/%f && cp %p
                   $ARCHIVEDIR/%f’




                                     .   .   .   .   .   .
基于 switch file




   archive command = ’test ! -f $PGDATA/backup in progress &&
                   cp %p $ARCHIVEDIR/%f’




                                          .   .   .   .   .     .
基于流




      max wal sender = n (n>0)




                            .    .   .   .   .   .
基于流




      编辑 pg hba.conf




                       .   .   .   .   .   .
基于流




 # 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




                                                  .     .    .    .    .       .
进入备份模式




         .   .   .   .   .   .
superuser 登录 primary




                   .   .   .   .   .   .
第二参数可以提示尽快完成事务




       select pg start backup(”);




                               .    .   .   .   .   .
建立 standby 环境




                .   .   .   .   .   .
以 postgres 用户身份




              mkdir /standby/path




                                    .   .   .   .   .   .
chmod -R 700 /standby/path




                       .     .   .   .   .   .
tar 或 rsync




              将 primary 数据区复制过来




                             .    .   .   .   .   .
删除 postmaster.pid




                    .   .   .   .   .   .
将预设的 standby 文件,postgresql.conf 和 recovery.conf 放到数
                    据区。




                                  .   .   .   .   .   .
根据实际情况,调整 pg hba.conf




                 .   .   .   .   .   .
启动 standby




             .   .   .   .   .   .
pg ctl -D $PGSTANDPATH start




                       .   .   .   .   .   .
primary 转为正常工作模式




              .    .   .   .   .   .
select pg stop backup();




                       .   .   .   .   .   .
发散讨论




       .   .   .   .   .   .
可以使用 clean command 清理过期的归档文件。




                         .   .   .   .   .   .
利用归档文件,可以建立可回溯的高可靠性备份机制。




                  .   .   .   .   .   .
利用 hot standby 机制,可以方便的实现单写多读的负载均衡机
制。




                       .   .   .   .   .   .
压缩传输可以利用宽裕的 CPU 资源换取有限的带宽。




                    .   .   .   .   .   .
刘鑫 @ 金山快盘




            再见!




                  .   .   .   .   .   .

PostgreSQL 9 的 standby 集群实践