一、He3DB备份
He3DB进行备份,需要对主节点的推进节点进行备份,其拥有全量数据(不用备份日志,日志在tikv集群中)。 备份方式如下:
- 部署He3DB主节点 (mn)
- 部署He3DB推进节点 (pn)
- 利用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
- 部署,主,备节点
- 执行pg_basebackup基础备份
- 测试,主节点执行
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;
- 关闭主节点,备节点
- 执行下面的测试脚本,由备份节点构造主节点
- 配置主节点,参数设置参考:
he3_point_in_time_recovery = true
recovery_target_time = '2023-07-14 11:14:03.911151+08'
- 启动备份的主节点,推进节点
- 检查是否恢复到指定时间点。
当然涉及到的参数还有其他的,可参考文档: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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




