DRBD状态

Posted ghl666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRBD状态相关的知识,希望对你有一定的参考价值。

状态

/proc/drbd文件中的状态信息如下:

[root@drbd1 ~]# cat /proc/drbd 
version: 8.4.10-1 (api:1/proto:86-101)
GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:76408 nr:0 dw:76408 dr:3441 al:22 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

其中第三行中:

  • 0是drbd的次设备号(minor),表示该行是/dev/drbd0资源的信息。
  • cs是connect state,即节点的连接状态。
  • ro是roles,即节点的角色状态。
  • ds是disk state,即磁盘的状态,也即drbd底层设备的状态。
  • C是drbd的复制协议,即A、B、C协议。
  • r-----是IO标记,反应的是该资源的IO状态信息。共有6种IO状态标记符号。

第四行是drbd同步过程中的状态,总体概括为"性能指标"。

DRBD连接状态

  • WFConnection当前节点正在等待对端节点出现。例如对方节点drbdadm down后,本节点将处于本状态。
  • StandAlone无连接。出现这种状态可能是因为:未连接过、使用drbdadm disconnect断开连接、节点由于身份验证的原因未成功加入drbd集群使得连接被删除、脑裂后断开连接。
  • Disconnecting:断开连接的一个临时过渡状态。它很快就会切入下一状态就是StandAlone。
  • Unconnected:尝试再次发起TCP连接时的一个临时连接状态(是连接超时后再次发送连接请求产生的状态),它的下一个状态可能是WFConnection,也可能是WFReportParams。
  • Timeout:和对端通信超时时的临时状态。下一个状态就是Unconnection。
  • BrokenPipe:和对端连接丢失时的临时状态。下一个状态是Unconnection。
  • NetworkFailure:和对端连接丢失时的临时状态。下一个状态是Unconnection。(没错,和上面的一样)
  • ProtocolError:和对端连接丢失时的临时状态。下一个状态是Unconnection。(没错,还是和上面的一样)
  • TearDown:对端关闭TCP连接时的临时状态。下一个状态是Unconnection。
  • ConnectedDRBD连接已经建立完成,数据镜像已经激活成功。这个状态是drbd正常运行时的状态。
  • WFReportParams:TCP连接已经建立完成,该节点正在等待对端的第一个数据包。
  • StartingSyncS:全盘数据同步中。只有在初始化时才应该全盘同步。下一个状态是:SyncSource或PauseSyncS。
  • StartingSyncT:全盘数据同步中。只有在初始化时才应该全盘同步。下一个状态是:WFSyncUUID。
  • WFBitMapS:部分数据正在同步。下一个状态是:SyncSource或PauseSyncS。
  • WFBitMapT:部分数据正在同步。下一个状态是:WFSyncUUID。
  • WFSyncUUID:同步马上就要开始了。下一个状态:SyncTarget或PauseSyncT。
  • SyncSource正在同步,且本节点是数据同步的源端。
  • SyncTartget正在同步,且本节点是数据同步的目标端。
  • PauseSyncS:本节点是同步的源端节点,但同步过程当前被暂停。出现这种状态的原因可能是当前同步进程依赖于另一个同步进程完成,或者使用drbdadm pause-sync手动中断了同步操作。
  • PauseSyncT:本节点是同步的目标端,但同步过程当前被暂停。出现这种状态的原因可能是当前同步进程依赖于另一个同步进程完成,或者使用drbdadm pause-sync手动中断了同步操作。
  • VerifyS:正在进行在线设备验证,且本节点将成为验证的源端。
  • VerifyT:正在进行在线设备验证,且本节点将成为验证的目标端。

磁盘状态

磁盘的状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。

# drbdadm dstate <resource>
UpToDate/UpToDate

在磁盘状态信息中,本地节点的磁盘状态总是标记在第一位,远程节点标记在结尾。这两端节点的状态信息都可能为以下值:

  • Diskless:没有为DRBD驱动分配底层块设备。这意味着资源可能从没有和它的底层块设备进行关联绑定(attach),也可能是手动detach解除了关联,还可能是出现了底层IO错误时自动detach。
  • Attaching:读取元数据时的一个短暂的状态。
  • Failed:本地块设备故障时的一个短暂的状态,下一个状态是:Diskless。
  • Negotiating:在已连接的DRBD设备上还要进行Attach时的一个短暂的状态。
  • Inconsistent:数据不一致。在双方节点(还未进行全盘同步之前)刚创建新的资源时会立即进入此状态。在某一端(目标段)正接收同步数据时,也会进入不一致状态。
  • Outdated:资源的数据是一致的,但是数据过期了。
  • DUnknown:用于标识对端节点没有连接时的磁盘状态。
  • Consistent:连接断开时的数据处于一致性状态,当连接建立后,将决定数据是UpToDate还是Outdated状态。
  • UpToDate:资源的数据是一致的,且数据是最新的。这是drbd数据正常时的状态。

角色状态(roles,ro)

资源的角色状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。

[root@drbd1 ~]# drbdadm role data1
Primary/Unknown
Primary/Unknown

在角色状态信息中,本地节点总是标记在第一位,远程节点标记在结尾。

可能的节点角色状态有:

  • Primary:资源的primary角色,该角色状态下的drbd设备可以进行挂载、读、写等。在没有启用多主复制模型(dual-primary mode),只能有一个primary节点。
  • Secondary:资源的secondary角色。该角色状态下的drbd设备会接收来自primary端的数据更新(除非和对端不是primary)。且该角色的drbd设备不可挂载、不可读、不可写。
  • Unknown:资源的角色未知。本地节点的角色状态绝对不可能会是这种状态。只有对端节点断开连接时对端节点才处于Unknown状态。

IO状态标记

IO状态标记表示的是当前资源的IO操作状态。共有6种状态:

  • IO挂起:r或s都可能表示IO挂起,一般是r。r=running,s=suspended。
  • 串行重新同步:资源正在等待进行重新同步,但被resync-after选项延迟了同步进度。该状态标记为"a",通常该状态栏应该处于"-"。
  • 对端初始化同步挂起:资源正在等待进行重新同步,但对端节点因为某些原因而IO挂起。该状态标记为"p",通常该状态栏应该处于"-"。
  • 本地初始化同步挂起:资源正在等待进行重新同步,但本节点因为某些原因而IO挂起。该状态标记为"u",通常该状态栏应该处于"-"。
  • 本地IO阻塞:通常该状态栏应该处于"-"。可能有以下几种标记:
    • d:因为DRBD内部原因导致的IO阻塞。
    • b:后端设备正处于IO阻塞。
    • n:网络套接字阻塞。
    • a:网络套接字和后端块设备同时处于阻塞状态。
  • Activity Log更新挂起:当al更新被挂起时,处于该状态,标记为"s",通常该状态栏应该处于"-"。(如果不知道什么是Active Log,请无视本标记)

以上是关于DRBD状态的主要内容,如果未能解决你的问题,请参考以下文章

DRBD状态

drbd主服务器ds状态变成了Diskless(磁盘IO错误引起)

DRBD

Heartbeat+Drbd实现

(HA)DRBD原理简介到实战配置

DRBD实现文件同步详解