drbd 简介
1. drbd 是什么?
DRBD(Distributed Replicated Block Device,分布式复制块设备)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是镜像块设备,是按数据位镜像成一样的数据块。
2. DRBD与RAID1区别
RAID1也是实现不同存储设备间的数据镜像备份的,不同的是RAID1各存储设备是连接一个RAID控制器接入到一台主机上的,而DRBD是通过网络实现不同节点主机存储设备数据的镜像备份。
基本操作
这里不叙述安装流程。
-
如何查看drbd 状态
drbd-overview
各个字段根据本机实际准,释义如下:
0:test1/0 drbd盘id Connected 连接状态 Primary/Secondary 本地盘角色/对端盘角色 UpToDate/UpToDate 本地同步状态/对端盘同步状态 /data/test 挂载点(盘被挂载才会显示) xfs 文件系统(盘被挂载才会显示) 4.1T 总容量(盘被挂载才会显示) 485G 已用容量(盘被挂载才会显示) 3.7T 剩余容量(盘被挂载才会显示) 12% 使用率(盘被挂载才会显示)
2.内核查看
root@sr01n02:~# cat /proc/drbd version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by root@c165, 2019-08-19 15:26:38 0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless A r----- ns:1607893187 nr:0 dw:865871622 dr:1018289021 al:19682555 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:204143444 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate A r----- ns:0 nr:438102284 dw:2129640104 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
cs: connect state
ro:表示角色信息
ds: 磁盘状态信息Inconsistent/UpToDate
ns/nr:网络发送/接收的数据包信息
dw/dr:设备读写信息3.查看资源连接状态
drbdadm cstate 资源名
- 资源连接状态;因为情况不同,表现的状态不一样可能是以下的一种:
资源的连接状态;一个资源可能有以下连接状态中的一种
StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况
Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的
Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams
Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空
BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空
NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空
ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空
TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空
WFConnection:等待和对等节点建立网络连接
WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包
Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态
StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS
StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID
WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS
WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID
WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT
SyncSource:以本节点为同步源的同步正在进行
SyncTarget:以本节点为同步目标的同步正在进行
PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步
PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步
VerifyS:以本地节点为验证源的线上设备验证正在执行
VerifyT:以本地节点为验证目标的线上设备验证正在执行
- 查看硬盘状态
drbdadm dstate 资源名
本地和对等节点的硬盘有可能为下列状态之一:
- Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离
Attaching:读取无数据时候的瞬间状态
Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘
Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态
Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态
Outdated:数据资源是一致的,但是已经过时
DUnknown:当对等节点网络连接不可用时出现这种状态
Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated
UpToDate:一致的最新的数据状态,这个状态为正常状态
drbd 常见故障处理
-
Unconfigured状态的处理
root@test01:~# drbd-overview 0:test01/0 WFConnection Primary/Unknown UpToDate/DUnknown /data/test xfs 4.1T 322G 3.8T 8% 1:test02/0 Connected Secondary/Primary UpToDate/UpToDate root@test02:~# drbd-overview 0:test02/0 Connected Primary/Secondary UpToDate/UpToDate /data/test xfs 4.1T 485G 3.7T 12% 1:test01/0 Unconfigured . .
可以看到02上的从盘状态为Unconfigured,这说明该盘处于down的状态,可以用 “drbdadm up 盘id” 命令来修改状态,执行
root@test02:~# drbdadm up test01
之后用drbd-overview 再次查看状态是否为同步状态
-
主、备盘角色正确,主盘WFConnection,备盘StandAlone 状态的处理
root@r01n02:~#drbd-overview 0:s01n02/0 SyncSource Primary/Secondary UpToDate/Inconsistent C r----- /data xfs 19T 209G 18T 2% [==========>.........] sync'ed: 57.9% (8120/19272)Mfinish: 0:03:57 speed: 34,976 (25,716) K/sec 1:s01n03/0 StandAlone Secondary/Unknown UpToDate/DUnknown r----- root@r01n03:~#drbd-overview 0:s01n03/0 WFConnection Primary/Unknown UpToDate/DUnknown C r----- /data xfs 19T 107G 19T 1% 1:s01n02/0 SyncTarget Secondary/Primary Inconsistent/UpToDate C r----- [===========>........] sync'ed: 62.3% (7272/19272)Mfinish: 0:03:31 speed: 35,224 (26,144) want: 71,720 K/sec
可以看到sr01n03/0 这组盘没有同步,主盘角色为Primary,备盘角色为Secondary,说明主、备盘角色是正确的,不需要调整,这时只要丢弃备盘中的数据即可使之同步。示例如下
root@s1r01n02:~#drbdadm connect --discard-my-data s1r01n03
-
主、备盘角色不正确的处理
主、备盘角色不正确有以下几种情况,修改盘角色之前,需要先将盘卸载掉。
3.1 主备盘都为Primary/Unknown
处理方法,将备盘状态修改正确root@备盘节点:~# drbdadm secondary 备盘id
3.2 主备盘都为Secondary/Unknown
处理方法,将主盘状态修改正确root@主盘节点:~# drbdadm primary --force 主盘id
3.3 主盘状态为Secondary/Unknown,备盘状态为Primary/Unknown
这种情况要保证备盘数据都已经迁移走,先调整主盘角色为Primary,再调整备盘角色为Secondaryroot@主盘节点:~# drbdadm primary --force 主盘id root@备盘节点:~# drbdadm secondary 备盘id
-
drbd盘修改状态失败,提示Device is held open by someone 或 busy 的处理
root@test01:~# drbdadm secondary test02 1: State change failed: (-12) Device is held open by someone Command 'drbdsetup-84 secondary 1' terminated with exit code 11
先看是否有进程占用盘
lsof /dev/drbd1 -
Diskless 状态的处理
root@s01n02:~#drbd-overview 0:s01n02/0 Connected Primary/Secondary UpToDate/Diskless C r----- data/ xfs 19T 205G 18T 2% 1:s01n03/0 Connected Secondary/Primary UpToDate/Diskless C r-----
diskless原因通常是磁盘故障/raid卡故障,或者是操作系统kernel panic引起的,任何操作都会hang,所以无法远程重启,必须现场手工重启硬件。
-
挂载故障盘
root@test03:~# drbd-overview
0:test03/0 WFConnection Primary/Unknown UpToDate/DUnknown /data xfs 19T 459G 18T 3%
1:test02/0 StandAlone Secondary/Unknown UpToDate/DUnknowntest02 故障
挂载drbd1:
drbdadm primary --force test02 # 将这块drbd1设置为primary才能挂载
mount /dev/drbd1 /path
drbd 同步加速
如果开启了限速,可手动加速
drbdadm disk-options --c-plan-ahead=0 --resync-rate=250M <resource_id>