暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

He3DB知识点-备份与恢复

原创 有木名凌霄 2023-09-28
214

一、He3DB备份

He3DB进行备份,需要对主节点的推进节点进行备份,其拥有全量数据(不用备份日志,日志在tikv集群中)。 备份方式如下:

  1. 部署He3DB主节点 (mn)
  2. 部署He3DB推进节点 (pn)
  3. 利用pg_basebackup进行备份,命令示例:pg_basebackup -h 192.168.109.131 -p 9431 -U repl -F p -P -X none -D pnbak

备份后,需要注意其配置文件为copy的推进节点的配置文件,如果需要将之作为备节点或者作为主节点,需要由推进节点构造主节点或者备节点,并修改配置文件中的部分参数,不能直接启动节点。

He3DB部署方法可参考:
He3DB安装-(2)部署He3DB集群主节点
He3DB安装-(3)部署He3DB集群备节点

二、He3DB恢复

支持通过备份文件+tikv中的wal日志进行数据恢复(支持按时间点恢复,如果不指定时间,将回放完所有wal日志)
涉及到相关的配置参数:

  • recovery_target_time 用于指定恢复到的时间点(将恢复到>=这个时间点的第一个事务)
  • he3_point_in_time_recovery用于指定是否需要按时间点恢复

我们看一下怎么进行恢复,先停掉原主节点mn,推进节点pn

pg_ctl stop -D pn
pg_ctl stop -D mn

由推进节点的备份构造出主节点

rsync -av --exclude=pnbak/base --exclude=pnbak/global --exclude=pnbak/standby.signal pnbak/ mnbak

chmod 700 mnbak
cd mnbak
ln -s ../pushbak/base/ base
ln -s ../pushbak/global/ global

修改推进节点配置文件,参考配置如下:

wal_recycle = off
fsync = off
full_page_writes = off
log_min_messages = info
listen_addresses = '*'
max_connections = 300
shared_buffers = 512MB
min_wal_size = 512MB
max_wal_size = 128MB
logging_collector = on
effective_cache_size = 4GB
second_buffers = 512MB
hot_standby = on
push_standby = on
port = 9431
mpush = on
lmdb_page_directory = '/home/postgres/he3db/tmp/pnbak/pagedb'
lmdb_wal_directory = '/home/postgres/he3db/tmp/pnbak/waldb'
primary_conninfo = 'application_name=push dbname=postgres user=repl password=123456 host=127.0.0.1 port=9432 sslmode=disable sslcompression=0 gssencmode=disable target_session_attrs=any'

修改主节点配置,设置角色为主节点,设置he3_point_in_time_recovery = true,如果需要恢复到指定时间点则设置recovery_target_time,否则不用设置,参数含义与PostgreSQL相同。

参考配置如下:

wal_recycle = off
fsync = off
full_page_writes = off
log_min_messages = debug3
listen_addresses = '*'
max_connections = 300
shared_buffers = 512MB
min_wal_size = 512MB
max_wal_size = 128MB
logging_collector = on
effective_cache_size = 4GB
second_buffers = 512MB
hot_standby = off
push_standby = off
port = 9432
he3_point_in_time_recovery = true
lmdb_page_directory = '/home/postgres/he3db/tmp/mnbak/pagedb'
lmdb_wal_directory = '/home/postgres/he3db/tmp/mnbak/waldb'

三、PITR

  1. 部署,主,备节点
  2. 执行pg_basebackup基础备份
  3. 测试,主节点执行
create table users1(id int4, name varchar(64)); insert into users1(id, name) select n, 'user_'||n from generate_series(1,1000) n; begin; insert into users1(id, name) select n, 'user_'||n from generate_series(1001,2000) n; select now(); commit; insert into users1(id, name) select n, 'user_'||n from generate_series(2001,3000) n;
  1. 关闭主节点,备节点
  2. 执行下面的测试脚本,由备份节点构造主节点
  3. 配置主节点,参数设置参考:
he3_point_in_time_recovery = true
recovery_target_time = '2023-07-14 11:14:03.911151+08'
  1. 启动备份的主节点,推进节点
  2. 检查是否恢复到指定时间点。

当然涉及到的参数还有其他的,可参考文档:27.2. 恢复目标设置

四、测试脚本

#!/bin/bash # he3db备份恢复 # 原 master node and push node dir data=/home/postgres/he3db mn=/home/postgres/he3db/mn pn=/home/postgres/he3db/pn # 备份后master node and push node dir pn2=/home/postgres/he3db/pn2 mn2=/home/postgres/he3db/mn2 # lmdb dir tmp=/home/postgres/he3db/tmp host=192.168.109.131 masterPort=9432 pushPort=9431 cd $data if [ -d $mn2 ] then rm -rf $mn2 fi if [ -d $pn2 ] then rm -rf $pn2 fi echo "开始备份" pg_basebackup -h $host -p $pushPort -U repl -F p -P -X none -D $pn2 chmod 700 $pn2 sleep 5 echo "关闭老的主备节点" pg_ctl stop -D $pn sleep 2 pg_ctl stop -D $mn sleep 2 rm $tmp/* -rf echo "构造主节点" cd $pn2 rsync -av --exclude=base --exclude=global --exclude=standby.signal * $mn2 chmod 700 $mn2 cd $mn2 ln -s $pn2/base/ base ln -s $pn2/global/ global echo "修改主节点配置文件" sed -i 's/^primary_conninfo/#primary_conninfo/g' postgresql.conf sed -i 's/^mpush/#mpush/g' postgresql.conf sed -i 's/^push_standby/#push_standby/g' postgresql.conf sed -i 's/^hot_standby/#hot_standby/g' postgresql.conf sed -i 's/^port/#port/g' postgresql.conf sed -i 's/^lmdb_page_directory/#lmdb_page_directory/g' postgresql.conf sed -i 's/^lmdb_wal_directory/#lmdb_wal_directory/g' postgresql.conf echo "push_standby=off" >> postgresql.conf echo "hot_standby=off" >> postgresql.conf echo "port=$masterPort" >> postgresql.conf echo "lmdb_page_directory = '$tmp/mn2/pagedb'" >> postgresql.conf echo "lmdb_wal_directory = '$tmp/mn2/waldb'" >> postgresql.conf echo "he3_point_in_time_recovery = true" >> postgresql.conf #tail postgresql.conf echo "修改推进节点配置文件" cd $pn2 #tail postgresql.conf cd $data echo "启动主节点" pg_ctl start -D $mn2 sleep 5 echo "启动推进节点" pg_ctl start -D $pn2 echo "done!"
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论