DRBD通过/proc/drbd文件监控DRBD设备的运行情况。
/proc/drbd 文件分为两大块,分别是当前配置的所有drbd资源的实时状态和DRBD性能指标。
其中,第一行是状态标志:
- cs: Connection state,网络连接状态
- ro: Resource roles, 节点的角色。格式:本地节点/对等节点
- ds: Disk states, 磁盘状态
- 同步协议 : protocol A、B和C
- I/O状态标志位 : 表示格式为 [r/s][a/-][p/-][u/-][d/b/n/a/-][s/-]
第二行是性能指标(详细指标的说明参见 ):
nns:** nr:** dw:** dr :** al :** bm :** lo :** pe :** ua :** ap :** ep :** wo :** oos :**
(1) DRBD 网络连接状态
网络连接状态就是上述的性能指标中的 "cs:Connnect" 这一列信息,DRBD中所有的状态如下图所示,其中红色部分表示是临时状态。
- StandAlone 独立的:网络配置不可用。资源还没有被连接或者是被管理断开(使用drbdadm disconnect命令),或者是由于出现认证失败或者是裂脑的情况。
- Disconnecting 断开。
- Timeout超时:与对等节点连接超时。
- BrokerPipe:与对等节点连接丢失。
- NetworkFailure:与对等节点失去连接后的临时状态。
- ProtocolError. 与对等节点失去连接后的临时状态。
- TearDown:对等节点连接关闭。
- Unconnected :是尝试连接前的临时状态
- WFConnection.等待和对等节点建立网络连接。
- WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包。
- Connected 连接:Drbd已经建立连接,数据镜像现在可用,节点处于正常状态。
- VerifyS:以本地节点为验证源的线上设备验证正在执行。
- StartingSyncS:由管理者发起的完全同步开始同步。
- WFBitMapS:部分同步刚刚开始
- SyncSource:以本节点为同步源的同步正在进行。
- PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停。可能是因为另外一个同步正在进行或者是使用命令drbdadm pause-sync暂停了同步
- VerifyT:以本地节点为目标源的线上设备验证正在执行
- StartingSyncT:由管理者发起的完全同步刚刚开始
- WFBitMapT:部分同步刚刚开始
- WFSyncUUID:同步即将开始
- SyncTarget:以本节点为同步目标的同步正在进行。
- PausedSyncT:以本地节点为持续的同步目标,但是目前同步已经暂停,这可能是因为另外一个同步正在进行或者是使用命令drbdadm pause-sync暂停了同步。
其实,这些状态在DRBD源码中也可以看到:
/* The order of these constants is important.
* The lower ones (<C_WF_REPORT_PARAMS) indicate * that there is no socket! * >=C_WF_REPORT_PARAMS ==> There is a socket */enum drbd_conns { C_STANDALONE, C_DISCONNECTING, /* Temporal state on the way to StandAlone. */ C_UNCONNECTED, /* >= C_UNCONNECTED -> inc_net() succeeds *//* These temporal states are all used on the way
* from >= C_CONNECTED to Unconnected. * The 'disconnect reason' states * I do not allow to change between them. */ C_TIMEOUT, C_BROKEN_PIPE, C_NETWORK_FAILURE, C_PROTOCOL_ERROR, C_TEAR_DOWN,C_WF_CONNECTION,
C_WF_REPORT_PARAMS, /* we have a socket */ C_CONNECTED, /* we have introduced each other */ C_STARTING_SYNC_S, /* starting full sync by admin request. */ C_STARTING_SYNC_T, /* starting full sync by admin request. */ C_WF_BITMAP_S, C_WF_BITMAP_T, C_WF_SYNC_UUID,/* All SyncStates are tested with this comparison
* xx >= C_SYNC_SOURCE && xx <= C_PAUSED_SYNC_T */ C_SYNC_SOURCE, C_SYNC_TARGET, C_VERIFY_S, C_VERIFY_T, C_PAUSED_SYNC_S, C_PAUSED_SYNC_T,C_AHEAD,
C_BEHIND,C_MASK = 31
};
(2) DRBD 磁盘状态
可以通过查看/proc/drbd 或者是使用命令drbdadm dstate查看资源的磁盘状态,主要有如下的磁盘状态:
- Failed :本地块设备报告I/O 错误的下一个状态。其下一个状态为Diskless无盘。
- Diskless:本地没有块设备分配给DRBD使用,这就意味着没有可用的备用设备,或者使用drbdadm detach命令手工分离或者是底层的I/O 错误导致自动分离。
- Negotiating:在已经连接的DRBD设备进行Attach读取元数据前的瞬间状态。
- Attaching :读取元数据时候的瞬间状态。
- DUnknown :对等节点(peer)网络不可用
- Consistent :数据一致但是没有连接。当建立连接时,它决定数据是UpToDate 或者是Outdated。
- Outdated : 数据一致但是已经过时
- Inconsistent : 数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态。
- UpToDate : 一致的最新的数据状态,这个状态是正常的状态。
同时,这些状态在DRBD源码中也可以看到
enum drbd_disk_state {
D_DISKLESS, D_ATTACHING, /* In the process of reading the meta-data */ D_FAILED, /* Becomes D_DISKLESS as soon as we told it the peer */ /* when >= D_FAILED it is legal to access device->ldev */ D_NEGOTIATING, /* Late attaching state, we need to talk to the peer */ D_INCONSISTENT, D_OUTDATED, D_UNKNOWN, /* Only used for the peer, never for myself */ D_CONSISTENT, /* Might be D_OUTDATED, might be D_UP_TO_DATE ... */ D_UP_TO_DATE, /* Only this disk state allows applications' IO ! */ D_MASK = 15};
(3) DRBD I/O状态标志位
通过查看/proc/drbd 的如下图所示的数据,包含有关I/O 操作的当前资源的信息。
其具体表示的信息如下:
从左到右分别表示:
1. I/O suspension,r表示运行I/O,s表示suspended I/O,正常情况下为r
2. Serial resynchronization 串行同步:当资源等待同步时却推迟了重新同步,这则个标志变成A,正常情况为 –
3. Peer-initiated sync suspension 对等节点发起的同步暂停:当资源正在等待重新同步时,对等节点因为一些原因发起暂停同步。这个标志变成p。正常为–
4. Locally initiated sync suspension 本地发起的同步暂停:当资源等待重新同步时,在本地节点上用户发起同步暂停,这个标志变成u。正常为 –
5. Locally blocked I/O 。正常为 -。可能会是一下标志:
d:如因为一个短暂的磁盘状态导致的drbd内部出现I/O 阻塞 b:备用设备的I/O 阻塞 n:网络socket出现阻塞 a:设备的I/O 阻塞和网络阻塞的组合 6. Activity Log update suspension 活动日志更新暂停:当活动日志更新暂停,这个标志变成s。正常为 –
(4) DRBD 性能指标
/proc/drbd 第二行包含每个资源的计数器和仪表状况的信息,如下图所示:
每个状态指标的含义如下所示。
- ns(network send 网络发送):net数据以kibyte通过网络连接发送到对等节点
- nr(network receive 网络接收):通过网络连接以kibyte接收net数据
- dw(disk write 磁盘写入):net数据以kibyte写入本地磁盘 、
- dr(disk read 磁盘读取):net数据以kibyte读取本地磁盘数据
- al(activity log 活动日志):活动日志区的元数据更新
- bm(bit map 位图):位图区元数据更新
- lo(local count 本地计数):DRBD请求的开放本地I/O 子系统的数量
- pe(pending 待定):发送到对等节点但是尚未节点对方回答的请求的数目
- ua(unacknowledged 未确认):通过网络连接接收到对等节点的请求,但是尚未得到回复
- ap(application pending应用程序挂起):数据块I/O 请求转发到DRBD,但是DRBD尚未回答
- ep(epochs):一定数量的epoch对象,通常为1,使用阻碍或者是没有排序写的方法时可能增加I/O 负载。
- wo(write order 写入顺序)目前使用的写入顺序的方法:b(barrier障碍)、f (flush 刷新)、d(drain 漏)或者是n(none无)
- oos(out of sync):以Kibibytes同步当前存储