九、数据量较大的集群备份

背景:mongodb大量数据情况下备份难问题

痛点:由于业务增长,数据量增长到百G或者T级别,使用传统的mongodump已经无法满足,使用延时节点备份也只能保存很短时间的数据。针对这种情况只能着手从存储布局。如果对硬盘读写速度没有很强烈的需求,那么使用ceph rbd块或者云盘上很不错的选择。可以使用rbd或者云盘的快照功能进行文件系统级别快照备份。但是到达T级别数据量显然ssd是更好的选择。大多数情况下只能使用物理ssd盘,无法像rbd或者云盘等方便快照。

解决思路:从文件系统布局,使用lvm snapshot功能对文件系统进行快照

环境介绍:
系统k8s版本mongo地址规划盘符(容量均为20G)lvm配置
CentOS Linux release 7.7.1908 (Core)v1.18.10192.168.86.36:27017sdb
CentOS Linux release 7.7.1908 (Core)v1.18.10192.168.86.36:27018sdc
CentOS Linux release 7.7.1908 (Core)v1.18.10192.168.86.36:27019sdd、sde
CentOS Linux release 7.7.1908 (Core)v1.18.10192.168.86.36:27020sdd、sde挂载快照数据使用
1、环境部署

1、硬盘配置

#mongodb01和mongodb02数据目录配置
mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc
mkdir -p /data/mongodb01
mkdir -p /data/mongodb02
mount /dev/sdb /data/mongodb01
mount /dev/sdc /data/mongodb02

#mongodb03数据目录配置
pvcreate /dev/sdd
vgcreate mongodb03 /dev/sdd
lvcreate -L 19.5G -n mongodb03 mongodb03
vgextend mongodb03 /dev/sde

mkfs.xfs /dev/mongodb03/mongodb03
mkdir -p /data/mongodb03
mount /dev/mongodb03/mongodb03 /data/mongodb03

2、部署mongodb ,只部署mongodb27017-27019 ;参考:静态pod+hostPath部署高可用集群

3、数据准备

use duanshuaixing-mongodb
for(i=1; i<=50000;i++){   db.user.insert( {name:'mongodb-lvmtest'+i, age:i} ) }

use duanshuaixing-mongodb02
for(i=1; i<=50000;i++){   db.user.insert( {name:'mongodb-lvmtest02'+i, age:i} ) }

二、备份和恢复
1、使用lvm对mongodb03打快照

#创建快照
lvcreate -L +19G -n mongodb03snapsrc -s /dev/mongodb03/mongodb03

#查看快照
lvdisplay
lsblk

2、误删除数据

rs0:PRIMARY> use duanshuaixing-mongodb02
rs0:PRIMARY> db.dropDatabase()

3、下线所有mongodb节点

4、挂载mongodb03 lvm快照到文件系统

mkdir /data/mongodb03-lvm-snapshot
mount -o rw,nouuid /dev/mongodb03/mongodb03snapsrc /data/mongodb03-lvm-snapshot

5、恢复方式1
直接拷贝数目录到原有数据库目录,拷贝完成后启动全部节点

6、恢复方式2、启动192.168.86.36:27020,数据目录使用/data/mongodb03-lvm-snapshot ,在新启动数据库内修改主节点信息并删除其余从节点(节点网络互通的情况下会导致原有集群内节点被移除,请慎重操作)

mongo 192.168.86.36:27020
rs0:OTHER> rs.slaveOk()
rs0:OTHER> use admin
rs0:OTHER> db.auth('root','rootPassw0rd')

1>获取副本集配置
rs0:OTHER> cfg=rs.conf()

2>查看配置节点
rs0:OTHER> printjson(cfg)

3>重新配置节点
rs0:OTHER> cfg.members[0].host="192.168.86.36:27020"
rs0:OTHER> rs.reconfig(cfg, {force : true})

4>查看数据库是否存在且数据正常

rs0:SECONDARY> show dbs
rs0:SECONDARY> use duanshuaixing-mongodb02
rs0:SECONDARY> db.user.find().count()

5>删除member为1、2的节点
rs0:SECONDARY> cfg.members.splice(1,1)
rs0:SECONDARY> rs.reconfig(cfg, {force : true})
rs0:SECONDARY> cfg.members.splice(2,1)
rs0:SECONDARY> rs.reconfig(cfg, {force : true})
rs0:PRIMARY> rs.status()

6.1、关于删除节点的恢复的相关问题:
1>重新配置节点后可以不移除节点, 把丢失的库或者数据使用mongodump导出再导入到原有的集群
2>不移除节点需要在mongodump完成后停掉新启动的mongodb,并卸载快照挂载
3>如果使用移除节点方法需要重新加回节点,加回节点后从集群移除新启动的mongodb,同时下线服务并卸载快照挂载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值