1 介绍
DRBD distrubuted replicated block device,为分布式数据库一致性设备,类似于openstack的服务多节点,kube/docker的多节点,功能类似于RAID,镜像的功能。模式有主备模式,单主模式,双主模式等
1.1 基本功能
数据库镜像,冗余盘可防容灾,高可用,可理解类似于RAID
1.2 组成
内核模板:用于虚拟一个块设备
用户空间管理程序:主要用于和DRBD模块通信
1.3 特点
主从节点不是固定不变的,可自动升降级,也可手动设置级别
只有主节点可以读写,备节点不行,备节点只能接受主节点请求
1.4 结构
1.5 原理
类似HA集群,可用于高可用和负载均衡的共享设备,节点间流量传输通过IP网络
1.6 主要模式与特性
单主 支持ext3,ext4,xfs
双主 双主共读写存在同步问题,支持GFS,OCFS2,提供了分布式锁机制解决了同步读写
主备 主备有三种协议 1本地节点写完即算写入完成,存在数据丢失风险 2本地节点写完且其他节点写入完成算写入完成,风险小点 3本地写完,其他节点也写完且成功发送写入成功确认,无数据丢失风险
完整性校验 8.2.0版本以后支持
脑裂自动修复 8.0版本以后实现,即主备时因为网络故障等原因,备升主导致多主共存,该现象导致主无法给备发消息
2 安装与配置
2.1 安装
apt install drbd-doc drbd-utils drbd8-utils drbdlinks
加入kernel modprobe drbd
检查是否加入kernel成功 lsmod|grep -i drbd
2.2 配置
配置文件有三部分,global,common,resource
global和common主要放在/etc/drbd.d/global_common.conf
resource在drbd.conf中,装完没有这文件,只有个example,需要复制到/etc/drbd.d下
2.3 管理与维护
2.3.1 启动
1 在节点创建drbd记录信息的数据块
drbdadm create-md r0
2 启动服务
/etc/init.d/drbd start
3 查看节点状态
cat /proc/drbd 任一操作状态均可在此文件查看
4 设置主节点,同步数据
默认无主,需手动配,设置完默认开始同步数据
drbdsetup /dev/drbd0 primary -o
5 挂载drbd设备
只能在主节点挂载,不能在备节点挂,除非停了备节点或将备升主
格式化分区后,挂载
mkfd.ext3 /dev/drbd0
mount /dev/drbd0 /mnt
2.3.2 测试镜像数据
在master dd if=/dev/zero of=/mnt/test.tmp bs=10M count=10
操作完成后,去备节点,停掉drbd,然后挂盘,看盘里是否有在master创建的/mnt/test.tmp
测试完后,要先unmount再重启备节点drbd服务
2.3.3 主备节点切换
1 停服务切换
将主stop,主节点的drbd分区也自动卸载了,看备节点drbd状态,发现主的状态为unknown,备状态还是备 查看状态用cat /proc/drbd
改备节点为主 drbdadm primary all
由于主是unknown,所以切主会报错,此时执行下列命令任意一个
drbdsetup /dev/drbd0 primary -o或drbdadm -- --oerwrite-date-of-peer primary all
cat /proc/drbd可看到备节点已经变成主,此时若启动主节点,主节点会自动变成备
最后,在新的主挂载drbd设备即完成主备切换:mount /dev/drbd0 /mnt
2 正常切换
在主节点卸载分区 unmount /mnt
在主执行 drbdadm secondary all # 执行完,cat /proc/drbd发现两个都是备 不能先在备升主,因为此时主还存在会报错,可先停主再升备
在备节点执行:drbdadm primary all # 查看/proc/drbd检查是否升主
备升主后,挂载drbd设备 mount /dev/drbd0 /mnt
3 extundelete
3.1 介绍
用来恢复误删数据
3.2 安装
apt install extundelete
3.3 extundelete与ext3grep区别
恢复数据开源工具有很多 debugfs,R-Linux,ext3grep,extundelete等,extundelete功能更强大。速度快:扫描和恢复文件同时进行,ext3grep得先扫再恢复
3.4 原理
通过文件inode和日志恢复文件block位置,然后根据block恢复文件,最后通过dd恢复文件,恢复文件不依赖特定文件格式
查看某目录inode:ls -id
3.5 使用
3.5.1 环境准备
误删文件后,仅是将文件inode节点的扇区指针清零,实际文件可能还在盘上,如果盘以读写模式挂载,新写入文件可能覆盖这些误删文件,这时文件就真恢复不了了
搭测试环境
给虚拟机加个盘,linux显示是sdb,然后fdisk:
fdisk /dev/sdb
输入n创建分区, 输入p创主分区
回车跳过分期起始位置,填终止盘位置时,填入盘大小 如+100M
确定信息正确,按w确定修改
格式化sdb:mkfs.xt4 /dev/sdb
mount盘:mount /dev/sdb1 /testsmith
df -h|grep smith检查挂载是否ok
在新挂路径下创几个文件,往里写点东西,不然空文件好像恢复不了,然后删除
3.5.2 卸载文件所在挂载盘
umount /testsmith
3.5.3 恢复单个文件
查看挂载盘是否有可恢复文件
发现bob可以恢复,则试图恢复bob
恢复的文件会存放在当前目录的名为RECOVERED_FILES目录内,对恢复的文件进行完整校验,检验文件是否正常恢复
md5一致,bob已正常恢复, 将bob复制至目标路径即可
3.5.4 恢复目录
类似于恢复文件,命令:extundelete /dev/sdb --restore-directory dir_name
3.5.5 恢复所有文件
extundelete /dev/sdb --restore-all
3.5.6 恢复某个时间段所有数据
extundelete /dev/sdb --after 1563742855 --restore-all