drbd(三):drbd的状态说明

1.几种获取状态信息的方法

drbd有很多获取信息的方式。在drbd84和之前的版本,大多都使用cat /proc/drbd来获取信息,多数情况下,这个文件展示的信息对于管理和维护drbd来说已经足够。

例如以下是drbd84上两个volume的节点状态信息:

[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:220: 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:01: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:4957732 nr:0 dw:76324 dr:4883249 al:29 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

但从drbd9开始,/proc/drbd文件已经废弃了(其实从drbd84就已经废弃了,只不过仍然能获取信息),因为drbd9中添加了几个新状态信息,也修改了一些信息的显示名称,而这个文件并没有"跟上脚步"。以下是drbd9中该文件展示的信息。

[root@drbd91 ~]# cat /proc/drbd 
version: 9.0.9-1 (api:2/proto:86-112)
GIT-hash: f7b979e7af01813e031aac579140237640c94569 build by mockbuild@, 2017-09-14 17:45:45
Transports (api:16): tcp (9.0.9-1)

在drbd9中,更多的是使用drbdadmdrbdsetup来获取节点的状态信息。当然,在drbd84中也可以使用它们来获取详细的信息,只不过使用/proc/drbd既方便,又简洁,多数人都直接更愿意使用/proc/drbd。

例如,使用drbdadm获取节点的基本信息。

######### drbdadm status [--verbose] RESOURCE[root@drbd90 ~]# drbdadm status rs0         
rs0 role:Primaryvolume:0 disk:UpToDatevolume:1 disk:UpToDatedrbd91.longshuai.com role:Secondaryvolume:0 replication:SyncSource peer-disk:Inconsistent done:0.43volume:1 replication:SyncSource peer-disk:Inconsistent done:23.72[root@drbd90 ~]# drbdadm status rs0 --verbose
drbdsetup status rs0 
rs0 role:Primaryvolume:0 disk:UpToDatevolume:1 disk:UpToDatedrbd91.longshuai.com role:Secondaryvolume:0 replication:SyncSource peer-disk:Inconsistent done:7.04volume:1 replication:SyncSource peer-disk:Inconsistent done:48.44

使用drbdsetup获取更详细的信息:

######### drbdsetup status [--verbose] [--statistics] RESOURCE`[root@drbd90 ~]# drbdsetup status rs0 --verbose --statistics    
rs0 node-id:0 role:Primary suspended:nowrite-ordering:flushvolume:0 minor:0 disk:UpToDatesize:4882432 read:537552 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:novolume:1 minor:1 disk:UpToDatesize:4882432 read:2811712 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:nodrbd91.longshuai.com node-id:1 connection:Connected role:Secondary congested:novolume:0 replication:SyncSource peer-disk:Inconsistent done:11.00 resync-suspended:noreceived:0 sent:537096 out-of-sync:4345336 pending:0 unacked:0volume:1 replication:SyncSource peer-disk:Inconsistent done:57.58 resync-suspended:noreceived:0 sent:2811256 out-of-sync:2071176 pending:0 unacked:0

除此之外,还可以使用drbd-overview获取一些简单的信息。

[root@drbd91 ~]# drbd-overview 
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.0:rs0/0  Connected(2*) Second/Primar UpToDa/UpToDa 1:rs0/1  Connected(2*) Second/Primar UpToDa/UpToDa

2.状态

/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:220: 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同步过程中的状态,总体概括为"性能指标"。

以下翻译自官方手册: users-guide-8.4users-guide-9.0 。如果有疑问,可从官方手册自行查找答案。

2.1 连接状态(connect state,cs)和复制状态

节点间通过TCP连接进行通信,在建立连接、断开连接、特殊情况下有很多种连接状态。

建立TCP连接后,还有称为"DRBD"的连接DRBD连接建立完成,表示元数据区、数据区等一切都已准备好,可以进行任何数据同步的操作。

节点间的连接状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。

[root@drbd91 ~]# drbdadm cstate rs0
Connected

drbd84中,将连接状态和复制状态全部都归类为连接状态。但在drbd9中,由于可以通过net指令定义多个drbd节点,它更网络对端和volume的概念。因此它将和连接关系不大的状态独立划分为"复制状态(replication)"中,例如同步、验证相关的状态。本文就懒得去区分它们了,都放在一起解释吧。

有以下几种连接状态,其中最常捕获到的状态已经加粗显示。

  • 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:正在进行在线设备验证,且本节点将成为验证的目标端。

在drbd9中,WFConnection状态改为connecting状态。删除了WFReportParams状态。添加了以下几个同步相关的状态:

  • Off:该卷组还未同步,因为连接未建立。
  • Established所有对该卷组的写操作已经在线完成同步。这是drbd正常运行时的状态。
  • Ahead:数据同步操作被挂起,因为网络套接字中达到了一定的堵塞程度,无法应付更多的负载。该状态需要配置"on-congestion"选项来启用。
  • Behind:对端将数据同步操作挂起,因为网络套接字中达到了一定的堵塞程度,无法应付更多的负载。该状态需要在对端节点上配置"on-congestion"选项来启用。

2.2 角色状态(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状态。

2.3 磁盘状态(disk state,ds)

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

# drbdadm dstate <resource>
UpToDate/UpToDate

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

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

2.4 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,请无视本标记)

2.5 性能指标

主要是一些计数器和计量器的值。

请结合drbd原理图进行理解:

drbd84中使用缩写符号来标记性能指标,而drbd9中使用全称来表示。例如drbd84中的ns和drbd9中的send是同一个意思。

  • ns/send (network send):通过网络连接发送给对端的数据量,单位为Kb。
  • nr/receive (network receive):通过网络连接接收到对端发送来的数据量,单位为Kb。
  • dw/written (disk write):该卷(volume)写入本地磁盘的数据量,单位为Kb。
  • dr/read (disk read):该卷(volume)从本地磁盘读取的数据量,单位为Kb。
  • al/al-writes (activity log):元数据区中al更新的次数。
  • bm/bm-writes (bit map):元数据区中bitmap更新的次数。
  • lo/lower-pending (local count):DRBD发起的打开本地IO子系统的请求次数。
  • pe/pending (pending):本地发送给对端但却没有回复的次数。
  • ua/unacked (unacknowledged):接收到对端发送的请求但却没有给予回复的请求数量。
  • ap/upper-pending (application pending):转发给DRBD的IO块的请求,但DRBD还没给予回复的请求数量。
  • ep (epochs):epoch对象的数量。通常为1。drbd9中没有该指标。
  • wo/write-ordering (write order):当前正在使用的write order方法:b(barrier), f(flush), d(drain)或n(none)。
  • oos/out-of-sync (out of sync):当前不同步的数据量,单位为Kb。

上面所有"未给予回复"的指标数量都表示动作还未完成,需要回复后才表示操作完成。这些未回复数值不能太大。

此外,drbd9中添加了以下几个指标:

  • resync-suspended:重新同步操作当前是否被挂起。可能的值为no/user/peer/dependency。
  • blocked:本地IO的拥挤情况。
    • no:本地IO不拥挤。
    • upper:DRBD层之上的IO被阻塞。例如到文件系统上的IO阻塞。可能有以下几种原因:
      • 管理员使用drbdadm suspend-io命令挂起了IO操作。
      • 短暂的IO阻塞,例如attach/detach导致的。
      • 删除了缓冲区。
      • bitmap的IO等待。
    • lower:底层设备处于拥挤状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lock的lock()方法

ReentrantLock是JDK唯一实现了Lock接口的类 lock() 是平常使用得最多的一个方法&#xff0c;就是用来获取锁。如果锁已被其他线程获取&#xff0c;则进行等待。 由于在前面讲到如果采用Lock&#xff0c;必须主动去释放锁&#xff0c;并且在发生异常时&#xff0c;不会自动释放锁…

Lock的tryLock()方法

概述 tryLock()方法是有返回值的&#xff0c;它表示用来尝试获取锁&#xff0c;如果获取成功&#xff0c;则返回true&#xff0c;如果获取失败&#xff08;即锁已被其他线程获取&#xff09;&#xff0c;则返回false&#xff0c;这个方法无论如何都会立即返回。在拿不到锁时不…

python requests库详解_python的requests库详解

快速上手迫不及待了吗&#xff1f;本页内容为如何入门 Requests 提供了很好的指引。其假设你已经安装了 Requests。如果还没有&#xff0c;去安装一节看看吧。首先&#xff0c;确认一下&#xff1a;Requests 已安装Requests 是最新的让我们从一些简单的示例开始吧。发送请求使用…

python QTreeWidgetItem下面有几个子tree_python-nlp ch1笔记:nlp的基础应用、高级应用、python优势、nltk环境搭建...

本帖是对(印度)Jalaj Thanaki作品《python自然语言处理》的翻译、缩减及改编~nlp的基础应用NLP是AI的子分支&#xff0c;其相关概念可以用于以下专家系统中&#xff1a;语音识别系统问答系统机器翻译文本摘要情感分析基于模板的聊天机器人文本分类主题分割nlp的高级应用理解自然…

C#使用ListView更新数据出现闪烁解决办法

C#使用ListView更新数据出现闪烁解决办法 在使用vs自动控件ListView控件时候&#xff0c;更新里面的部分代码时候出现闪烁的情况 如图&#xff1a; 解决以后&#xff1a; 解决办法使用双缓冲&#xff1a;添加新类继承ListView 对其重写 1 public class DoubleBufferListView : …

Lock的tryLock(long time, TimeUnit unit)方法

概述 tryLock(long time, TimeUnit unit)方法和tryLock()方法是类似的&#xff0c;只不过区别在于这个方法在拿不到锁时会等待一定的时间&#xff0c;在时间期限之内如果还拿不到锁&#xff0c;就返回false。如果一开始拿到锁或者在等待期间内拿到了锁&#xff0c;则返回true。…

python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理

python标准库内置函数第三方库 欲善其事&#xff0c;必先利其器 这其器必是python的标准库内置函数&#xff0c;话说许多第三方库&#xff0c; 也是对标准库的使用&#xff0c;进行封装&#xff0c;使得使用起来更方便。 这些库以使用场景来分类: 7、音频处理 音频处理主要适用…

SperingBoot+vue文件上传下载预览

上传文件&#xff1a; 前端&#xff1a; 整个过程&#xff0c;就是在使用FormData 添加 上File&#xff08;这个Blob&#xff09;&#xff0c;并且key要和后台的名字对应上在点击上传按钮开始上传之前&#xff0c;使用了URL.createObjectURL(File)创建blobUrl&#xff0c;给了…

keepalived脑裂问题查找

在自己环境做keepalivedredis实验时&#xff0c;当重启了备用redies机器后&#xff0c;发现两台redies主机都拿到了VIP [plain] view plaincopy [rootredis2 ~]# ip addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopbac…

python 多线程并行 矩阵乘法_python实现简单的并行矩阵乘法

python实现简单的并行矩阵乘法python实现简单的并行矩阵乘法本文采用的矩阵乘法方式是利用一个矩阵的行和二个矩阵的列相乘时不会互相影响。假设A(m,n)表示矩阵的m行&#xff0c;n列。那么C(m,m)A(m,n) * B(n,m) &#xff1a;计算C矩阵时候分解成&#xff1a;process-1&#xf…

停止Java线程,小心interrupt()方法

转自http://www.blogjava.NET/jinfeng_wang/archive/2008/04/27/196477.html ---------------------------------------------------------------------------------------------------- 程序是很简易的。然而&#xff0c;在编程人员面前&#xff0c;多线程呈现出了一组新的难…

python输入数学表达式并求值_用Python3实现表达式求值

一、题目描述 请用 python3编写一个计算器的控制台程序&#xff0c;支持加减乘除、乘方、括号、小数点&#xff0c;运算符优先级为括号>乘方>乘除>加减&#xff0c;同级别运算按照从左向右的顺序计算。 二、输入描述 数字包括"0123456789"&#xff0c;小数点…

mac上的mysql管理工具sequel pro

https://blog.csdn.net/wan_zaiyunduan/article/details/54909389 以前用过Plsql、Navicat、Workbench&#xff0c;现在换到mac上&#xff0c;用了现在这一款管理工具&#xff0c;很好用&#xff0c;所以推荐给大家。 完整的MySQL支持 Sequel Pro是一个快速,易于使用的Mac数据库…

报错 classes 拒绝访问_3种方式“移除”快速访问;为什么移除?你懂的...

Windows 10 在文件资源管理器中引入了"快速访问"这个功能&#xff0c;每当打开文件资源管理器窗口时&#xff0c;您都会看到常用文件夹和最近访问的文件的列表&#xff0c;这个功能虽然方便了日常使用&#xff0c;可能会提高工作效率&#xff0c;但是如果是公司的电脑…

java set是重复_java算法题,set内出现重复元素

题目将数字 1…9 填入一个33 的九宫格中&#xff0c;使得格子中每一横行和的值全部相等&#xff0c;每一竖列和的值全部相等。请你计算有多少种填数字的方案。这个是计蒜客上面的一个模拟题&#xff0c;我采用暴力。public class _3 {/** 将数字 1…9 填入一个33 的九宫格中&am…

Lock的lockInterruptibly()

概述 lockInterruptibly()方法比较特殊&#xff0c;当通过这个方法去获取锁时&#xff0c;如果其他线程正在等待获取锁&#xff0c;则这个线程能够响应中断&#xff0c;即中断线程的等待状态。也就使说&#xff0c;当两个线程同时通过lock.lockInterruptibly()想获取某个锁时&…

python中把输出结果写到一个文件中_Python3.6笔记之将程序运行结果输出到文件的方法...

Python3.6笔记之将程序运行结果输出到文件的方法 更新时间&#xff1a;2018年04月22日 14:27:32 投稿&#xff1a;jingxian 下面小编就为大家分享一篇Python3.6笔记之将程序运行结果输出到文件的方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小…

hangfire.mysql.core_abp 使用 hangfire结合mysql

abp 官方使用的hangfire 默认使用的是sqlserver的存储mysql须要引入支持mysql的类库sql我这边使用的是Hangfire.MySql.Core数据库直接用nuget安装便可app首先按照官方文档要求&#xff0c;改几个地方sqlserver分别是 Startup 文件下serverservices.AddHangfire(config >{con…

python 图标题上移_Python-Matplotlib将图形标题移动到y轴

我目前在python中使用matplotlib来绘制一些数据,但是我希望图表的标题位于Y轴上,因为没有足够的空间来存储一个图形的标题和另一个图形的x轴标签.我知道我可以将hspace设置为更大的数字但是,我不想这样做,因为我计划将几个图表堆叠在一起,如果我调整hspace,那么图表将是真的简短…

solr的基础使用

查询运算符 例如&#xff1a;http://localhost:8984/solr/mycore/select?q*:* : 指定字段查指定值&#xff0c;如返回所有值q*:* ? 匹配单个字符&#xff0c; 例如: qtitle:??拳 可以匹配标题为“形意拳”的文档 * 匹配零个或多个字符, 例如: qtitle:*形意拳 或者 qtitl…