PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)双机HA与块级备份部署

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

背景

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

https://github.com/digoal/PostgreSQL_HA_with_primary_standby_2vip

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

(假设主机为了性能, 未直接使用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里面.

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
4月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
184 4
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
193 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
92 3
|
3月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
264 5
|
3月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
86 3
|
3月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
295 3
|
5月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
5月前
|
SQL 数据可视化 关系型数据库
MySQL 备份可视化巡检系统
MySQL 备份可视化巡检系统
|
5月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
5月前
|
存储 Ubuntu 关系型数据库
如何在 Ubuntu VPS 上备份 PostgreSQL 数据库
如何在 Ubuntu VPS 上备份 PostgreSQL 数据库
42 1