博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)双机HA与块级备份部署
阅读量:6831 次
发布时间:2019-06-26

本文共 2235 字,大约阅读时间需要 7 分钟。

背景

基于流复制的HA, 采样如下方案.

本文介绍一下, 在没有其他主机的情况下, 如何实施块级别的增量备份.

(假设主机为了性能, 未直接使用ZFS作为文件系统)

主要用到的是chroot, zfs. 当前, 现在btrfs 也支持snapshot, 所以随便你的选择了.

实现方法也比较多, 我们可以用容器, 例如docker, 也可用虚拟机.

本文采用KVM虚拟机, 在虚拟机中使用ZFS文件系统, 在虚拟机中创建以宿主机数据库为primary的第三个standby.

然后在zfs上做快照.

宿主机的归档如何传递给虚拟机

我这里虚拟机和宿主机用的不同网段, 虚拟机出外网使用NAT转发通讯.

# iptables -L -v -n -t nat  Chain PREROUTING (policy ACCEPT 22449 packets, 1310K bytes)   pkts bytes target     prot opt in     out     source               destination             Chain POSTROUTING (policy ACCEPT 25464 packets, 1325K bytes)   pkts bytes target     prot opt in     out     source               destination             116  6960 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535     337 23214 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24    masq ports: 1024-65535       0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24        Chain OUTPUT (policy ACCEPT 25464 packets, 1325K bytes)   pkts bytes target     prot opt in     out     source               destination

这种通讯方式, 要直接挂载远端的NFS是有问题的, 所以需要用其他方式来获取远端归档.

我这里选择的方法是scp, 将虚拟机的postgres 用户下的key拷贝到2台宿主机, 使用scp来拷贝归档.

假设宿主机的物理IP分别为172.16.18.25,172.16.18.26.

restore_command = 'ping -c 1 -W 1 172.16.18.25 && scp root@172.16.18.25:/data04/pgdata/arch/*/%f %p; ping -c 1 -W 1 172.16.18.26 && scp root@172.16.18.26:/data04/pgdata/arch/*/%f %p'  primary_conninfo = 'host=192.168.122.1 port=1921 user=replica keepalives_idle=60'

为什么不直接使用primary VIP呢?

假设primary VIP是172.16.18.27.

因为VIP会漂移, 一旦漂移, 虚拟机的~/.ssh/known_hosts里面的条目就会失效, 需要重新编写, 比较麻烦.

配置宿主机

自动启动虚拟机

# cat /etc/rc.local  # kvm  /usr/bin/virsh start centos6_6_x64

配置虚拟机自动启动数据库

# cat /etc/rc.local  su - postgres -c "pg_ctl start"

配置虚拟机自动快照

# crontab -l  8 * * * * /usr/sbin/ntpdate asia.pool.ntp.org && /sbin/hwclock --systohc  1 4 * * * /root/script/zfs_snap.sh    # cat /root/script/zfs_snap.sh   #!/bin/bash    DATE="`date +%Y%m%d`"  # 注意, 第一个快照的位置是$PGDATA 即控制文件所在的zfs  /sbin/zfs snapshot zp1/data02@$DATE  /sbin/zfs snapshot zp1/data01@$DATE  /sbin/zfs snapshot zp1/data03@$DATE  /sbin/zfs snapshot zp1/data04@$DATE

现在快照有了, 加上宿主机上的归档也在, 完全可以实现基于时间点的恢复 .

最后, 强烈建议pg_xlog不要放在zfs文件系统中. 宁愿放在虚拟机的系统盘里面也不要放在ZFS里面.

转载地址:http://inikl.baihongyu.com/

你可能感兴趣的文章
echart3 文档参数不全,如何查看全面的参数
查看>>
【新产品】.NET条形码控件 Spire.Barcode for .NET发布
查看>>
Github上推出的区块链项目92%濒临死亡
查看>>
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
查看>>
存储过程
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
如何成为一个Xamarin专家
查看>>
如何禁止root用户远程登录
查看>>
eigrp在数据中心应用案例
查看>>
NetCore MVC 静态文件生成
查看>>
文件系统的简单介绍及路径概念详解、FHS及文件类型区分
查看>>
ubuntu 12.04 san存储配置
查看>>
angularjs分页
查看>>
Linux 切分文件名或文件扩展名
查看>>
Linux 添加启动项 rc.local
查看>>
npoi设置Excel边框
查看>>
Java提高篇(二六)-----hashCode
查看>>
如何用zabbix创建自定义监控项
查看>>
PHP json_encode Unicode 解决办法
查看>>