recovery test script for zfs snapshot clone + postgresql stream replication + archive
来源:互联网 发布:js省市区三级联动 编辑:程序博客网 时间:2024/09/21 13:15
Postgres2015全国用户大会将于11月20至21日在北京丽亭华苑酒店召开。本次大会嘉宾阵容强大,国内顶级PostgreSQL数据库专家将悉数到场,并特邀欧洲、俄罗斯、日本、美国等国家和地区的数据库方面专家助阵:
- Postgres-XC项目的发起人铃木市一(SUZUKI Koichi)
- Postgres-XL的项目发起人Mason Sharp
- pgpool的作者石井达夫(Tatsuo Ishii)
- PG-Strom的作者海外浩平(Kaigai Kohei)
- Greenplum研发总监姚延栋
- 周正中(德哥), PostgreSQL中国用户会创始人之一
- 汪洋,平安科技数据库技术部经理
- ……
前面我写过一篇关于使用ZFS的快照特性和PostgreSQL流复制来完成数据库增量PITR备份的文章 :
http://blog.163.com/digoal@126/blog/static/163877040201451894734122/
本文将基于这个备份机, 写一个自动的恢复测试脚本.
(假设快照每天一个, 并规则命名)
2个脚本如下 :
# mkdir /root/test_recovery[root@db-pitr test_recovery]# cat recovery_entry.sh#!/bin/bash/root/test_recovery/recovery_test.sh pg000001 >>/root/test_recovery/pg000001.log 2>&1sleep 10/root/test_recovery/recovery_test.sh pg000002 >>/root/test_recovery/pg000002.log 2>&1[root@db-pitr test_recovery]# cat recovery_test.sh#!/bin/bashif [ $# -ne 1 ]; thenecho "for exp: ./sh pg000001"exit 1fiUN="$1"date +%F%Techo $UN. /etc/profile. /home/${UN}/.bash_profileDATE=`date -d '-1 day' +%Y%m%d`zfs clone -o mountpoint=/test_recovery zp1/${UN}@$DATE zp1/test_recoveryrm -f /test_recovery/pg_root/postgresql.confrm -f /test_recovery/pg_root/recovery.confrm -f /test_recovery/pg_root/postmaster.pidrm -f /test_recovery/pg_root/pg_xlog/*cp -p /root/test_recovery/${UN}_postgresql.conf /test_recovery/pg_root/postgresql.confcp -p /root/test_recovery/${UN}_recovery.conf /test_recovery/pg_root/recovery.confsu - ${UN} -c "postgres -D /test_recovery/pg_root &"for ((i=1;i<180;i++)) doecho $isleep 20/pg_home/${UN}/pgsql/bin/psql -h 127.0.0.1 -p 11111 postgres postgres -c "select now(),* from pg_database;"ret=$?if [ $ret -eq 0 ]; thenbreakfidonesu - ${UN} -c "pg_ctl stop -w -t 6000 -m immediate -D /test_recovery/pg_root"sleep 60zfs destroy zp1/test_recovery
并且为了防止恢复测试时, 一些参数冲突, 我们需要事先准备好恢复文件和配置文件, 如下 :
[root@db-pitr test_recovery]# pwd/root/test_recovery[root@db-pitr test_recovery]# lltotal 164-rw-r--r-- 1 root root 3267 Dec 10 10:54 pg000001.log-rw------- 1 pg000001 pg000001 20415 Dec 10 10:38 pg000001_postgresql.conf-rw-r--r-- 1 pg000001 pg000001 4793 Dec 10 10:39 pg000001_recovery.conf-rw-r--r-- 1 root root 4520 Dec 10 10:58 pg000002.log-rw------- 1 pg000002 pg000002 19767 Dec 10 10:41 pg000002_postgresql.conf-rw-r--r-- 1 pg000002 pg000002 4795 Dec 10 10:41 pg000002_recovery.conf-r-x------ 1 root root 478 Dec 10 10:50 recovery_entry.sh-r-x------ 1 root root 985 Dec 10 10:32 recovery_test.sh
与本机standby的配置相比, 主要修改几个地方, 防止冲突, max_connections是为了防止不可启动hot standby :
例如 :
pg000001_postgresql.confport = 11111max_connections = 10000shared_buffers = 4096MBarchive_mode = offhot_standby = onlog_directory = 'pg_log'pg000001_recovery.confrestore_command = 'cp /pg_arch/pg000001/arch/*/%f %p'standby_mode = on#primary_conninfo
测试 :
# crontab -e52 10 10 6 * /root/test_recovery/recovery_entry.sh52 10 10 12 * /root/test_recovery/recovery_entry.sh
每年6月10日10点52, 12月10日10点52自动执行.
执行恢复脚本的日志输出举例 :
# cat pg000001.log2014-12-1010:52:02pg000001rm: cannot remove `/test_recovery/pg_root/pg_xlog/archive_status': Is a directory1LOG: 00000: loaded library "pg_stat_statements"LOCATION: load_libraries, miscinit.c:1296LOG: 00000: redirecting log output to logging collector processHINT: Future log output will appear in directory "pg_log".LOCATION: SysLogger_Start, syslogger.c:649now | datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace | datacl------------------------------+----------------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+------------+---------------+--------------------------------------------------------------------------------------------------------------------------------------2014-12-10 10:54:11.77975+08 | template0 | 10 | 6 | C | C | t | f | -1 | 12809 | 1674 | 1 | 1663 | {=c/postgres,postgres=CTc/postgres}2014-12-10 10:54:11.77975+08 | postgres | 10 | 6 | C | C | f | t | -1 | 12809 | 1674 | 1 | 1663 |2014-12-10 10:54:11.77975+08 | digoal | 16396 | 6 | C | C | f | t | -1 | 12809 | 1674 | 1 | 1663 |(3 rows)waiting for server to shut down.... doneserver stopped
1. http://blog.163.com/digoal@126/blog/static/163877040201451894734122/
0 0
- recovery test script for zfs snapshot clone + postgresql stream replication + archive
- CASE : zfs snapshot backup for PostgreSQL when use multi-zfs filesystem
- londiste3 copy table' snapshot & PostgreSQL logical replication's snapshot 不同之处
- Why PostgreSQL stream replication standby so fast
- java clone demo for stream
- PostgreSQL xlog $PGDATA and zfs snapshot based central backup & PITR case
- 配置PostgreSQL数据库流复制(replication stream)环境
- Postgresql从源代码安装以及配置Stream Replication
- Why MySQL replication is better than mysqlbinlog for recovery
- kiss mv for test(stream video)
- A bash script for tool version test
- Oracle Stream Replication技术
- Oracle Stream Replication技术
- Oracle Stream Replication
- Oracle Stream Replication技术
- Oracle Stream Replication 技术
- Oracle Stream Replication技术
- Oracle Stream Replication技术
- 2.Xamarin.Forms里的文本控制
- UFT对象库的使用
- hdu 1824 Let's go home (2-sat)
- C++文件操作
- 马士兵Java课堂笔记-3-Switch循环语句小细节
- recovery test script for zfs snapshot clone + postgresql stream replication + archive
- 影像去条带
- 整理IOS9适配
- CASE : zfs snapshot backup for PostgreSQL when use multi-zfs filesystem
- 黑马程序员——Java基础----IO(File类、Properties类、打印流、序列流、合并流)(3)
- DDL,DML
- GDT、GDTR、LDT、LDTR的学习
- java.util.ConcurrentModificationException 解决办法
- 跟着男票写程序1--opencv遍历图像像素