DRBD配置文件参数解析
1DRBD配置文件
DRBD配置文件/etc/drbd.conf控制DRBD的所有方方面面。正常情况下此配置文件就是一个包含以下两行内容的构架:
include “/etc/drbd.d/global_common.conf”;
include “/etc/drbd.d/*.res”;
按照惯例,/etc/drbd.d/global_common.conf包括DRBD配置的global和common这个两部分。而每个.res文件都只包含一个resource部分。
2/etc/drbd.d/global_common.conf
global_common.conf配置内容如下:
global {
usage-count yes; #是否参加DRBD 使用者统计,默认参加
}
common {
protocol C; #使用DRBD 的第三种同步协议(A B C),大多数用C,表示收到远程主机的写入确认后认为写入完成
startup {
wfc-timeout 120; #在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待
degr-wfc-timeout 120; #也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。
outdated-wfc-timeout 120;
}
disk {
on-io-error detach; #策略:发生I/O错误的节点将放弃底层设备,以diskless mode继续工作
resync-rate 30M; #设置主用节点和备用节点同步时的网络速率最大值,单位是字节
no-disk-flushes; #直接写入磁盘
no-md-flushes;
al-extents 517;
}
net {
sndbuf-size 512k;
timeout 60; #如果搭档节点没有在此时间内发来应答包,那么就认为搭档节点已经死亡
connect-int 10; #如果无法立即连接上远程DRBD设备,系统将断续尝试连接
ping-int 10; #如果连接到远程DRBD设备的TCP/IP的空闲时间超过此值,系统将生成一个keep-alive包来检测对等节点是否还存活
max-buffers 2048; #该选项设定一个由drbd分配的最大请求数,单位是页面大小(PAGE_SIZE),大多数系统中,页面大小为4KB。这些buffer用来存储那些即将写入磁盘的数据。最小值为32(即128KB)。这个值大一点好。
max-epoch-size 2048; #该选项设定了两次write barriers之间最大的数据块数。如果选项的值小于10,将影响系统性能。大一点好
unplug-watermark 1024;
cram-hmac-alg sha1 ; #该选项设定内核支持的一个算法,用于网络上的用户数据的一致性校验。通常的数据一致性校验,由TCP/IP头中所包含的16位校验和来进行,而该选项可以使用内核所支持的任一算法。该功能默认关闭。
shared-secret “drbd”; #用来设定在对待节点授权中使用的密码,最长64个字符
verify-alg sha1;
after-sb-0pri disconnect; #防止脑裂
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
}
2.1global配置部分
如果所有配置段都在同一个drbd.conf文件中,则该配置必须放在最顶端。
常用选项:
minor-count:从(设备)个数,取值范围1~255,默认值为32。该选项设定了允许定义的resource个数,当要定义的resource超过了此选项的设定时,需要重新载入drbd内核模块。
dialog-refresh time:time取值0,或任一正数。默认值为1。我没理解官方对该选项的解释。很少见到此选项被启用。
disable-ip-verification:是否禁用ip检查
usage-count:是否参加用户统计,合法参数为yes、no或ask。根据官方示例的说法,一般只配置usage-count选项即可。
2.2common部分
2.2.1startup部分
wfc-timeout:该选项设定一个时间值,单位是秒。在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待。
degr-wfc-timeout:该选项也设定一个时间值,单位为秒。也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。
outdated-wfc-timeout:同上,也是用来设定等待时间,单位为秒。它用于设定等待过期节点的时间。
2.2.2disk部分
常用选项:
on-io-error选项:此选项设定了一个策略,如果底层设备向上层设备报告发生I/O错误,将按照该策略进行处理。有效的策略包括:
pass_on: 把I/O错误报告给上层设备。如果错误发生在primary节点,把它报告给文件系统,由上层设备处理这些错误(例如,它会导致文件系统以只读方式重新挂 载),它可能会导致drbd停止提供服务;如果发生在secondary节点,则忽略该错误(因为secondary节点没有上层设备可以报告)。该策略 曾经是默认策略,但现在已被detach所取代。
call-local-io-error:调用预定义的本地local-io-error脚 本进行处理。该策略需要在resource配置段的handlers部分,预定义一个相应的local-io-error命令调用。该策略完全由管理员通 过local-io-error命令(或脚本)调用来控制如何处理I/O错误。
detach:发生I/O错误的节点将放弃底层设备,以 diskless mode继续工作。在diskless mode下,只要还有网络连接,drbd将从secondary node读写数据,而不需要failover。该策略会导致一定的损失,但好处也很明显,drbd服务不会中断。官方推荐和默认策略。
fencing选项:该选项设定一个策略来避免split brain的状况。有效的策略包括:
dont-care:默认策略。不采取任何隔离措施。
resource- only:在此策略下,如果一个节点处于split brain状态,它将尝试隔离对等端的磁盘。这个操作通过调用fence-peer处理器来实现。fence-peer处理器将通过其它通信路径到达对等 节点,并在这个对等节点上调用drbdadm outdate res命令。
resource-and-stonith:在此策略下,如果一 个节点处于split brain状态,它将停止I/O操作,并调用fence-peer处理器。处理器通过其它通信路径到达对等节点,并在这个对等节点上调用drbdadm outdate res命令。如果无法到达对等节点,它将向对等端发送关机命令。一旦问题解决,I/O操作将重新进行。如果处理器失败,你可以使用resume-io命令 来重新开始I/O操作。
resync-rate选项:设置同步时的速率,默认为250KB。默认的单位是KB/sec,也允许使用K、M和G,如40M。注意:syncer中的速率是以bytes,而不是bits来设定的。配置文件中的这个选项设置的速率是永久性的,但可使用下列命令临时地改变rate的值:
drbdsetup /dev/drbdnum syncer -r 100M
把上述命令中的num替换成你的drbd设备的从设备号。只能在所有节点的其中一个节点上运行此命令。
如果想重新恢复成drbd.conf配置文件中设定的速率,执行如下命令:
drbdadm adjust resource
官方提示:速率的设定,最好设为有效可用带宽的30%。所谓有效可用带宽,是指网络带宽和磁盘读写速度中的最小者。有两个示例:如果I/O子系统所能维持的读写速度为180MB/s,而千兆网络所能维持的网络吞吐速度为110MB/s,那么有效可用带宽为110MB/s,该选项的推荐值为110 x 0.3 = 33MB/s。如果I/O速度为80MB/s,而网络连接速度可达千兆,那么有效可用带宽为80MB/s,推荐的rate速率应该为80 x 0.3 = 24MB/s
al- extents选项:该选项用来设定hot area(即active set)的块数,取值范围是7~3843,默认为127,每个块标志4M大小的底层存储(即底层设备)。DRBD会自动检测host area,如果主节点意外地从集群中断开,当该节点重新加入集群时,hot area所覆盖的区域必须被重新同步。hot area的每次变化,实际上都是对metadata区域的写操作,因此,该选项的值越大,重新同步的时间越长,但需要更新的meta-data也越少。
而用户手册的另外一部分提到,al-extents调整的是Activity Log的大小。如果使用DRBD设备的应用程序的写操作比较密集,那么,一般建议使用较大的Activity Log(active set),否则metadata频繁的更新操作会影响到写操作的性能。建议值:3389。
verify-alg选项:该选项指定一个用于在线校验的算法,内核一般都会支持md5、sha1和crc32c校验算法。在线校验默认关闭,必须在此选项设定参数,以明确启用在线设备校验。 DRBD支持在线设备校验,它以一种高效的方式对不同节点的数据进行一致性校验。在线校验会影响CPU负载和使用,但影响比较轻微。drbd 8.2.5及以后版本支持此功能。
一旦启用了该功能,你就可以使用下列命令进行一个在线校验:
drbdadm verify resource
该命令对指定的resource进行检验,如果检测到有数据块没有同步,它会标记这些块,并往内核日志中写入一条信息。这个过程不会影响正在使用该设备的程序。
如果检测到未同步的块,当检验结束后,你就可以如下命令重新同步它们:
drbdadm disconnect resource
drbdadm connetc resource
可以安排一个cron任务来自动执行在线校验,如:
42 0 * * 0 root /sbin/drbdadm verify resource
如果开启了所有资源的在线检验,可以使用如下命令:
42 0 * * 0 root /sbin/drbdadm verify all
csums- alg选项:该选项指定一个校验算法,用来标志数据块。如果不启用该选项,resync会从source发送所有的数据块到destination;而如果启 用了此选项,那么resync将只交换那些校验值不同的数据块,当网络带宽有限时,此选项非常有用。而且,在重启一个崩溃的primary节点时,该选项 会降低CPU带宽的占用。
2.2.3net部分
net部分的常用的选项有:
sndbuf-size选项:该选项用来调节TCP send buffer的大小,drbd 8.2.7以前的版本,默认值为0,意味着自动调节大小;新版本的drbd的默认值为128KB。高吞吐量的网络(例如专用的千兆网卡,或负载均衡中绑 定的连接)中,增加到512K比较合适,或者可以更高,但是最好不要超过2M。
timeout选项:该选项设定一个时间值,单位为0.1秒。如果搭档节点没有在此时间内发来应答包,那么就认为搭档节点已经死亡,因此将断开这次TCP/IP连接。默认值为60,即6秒。该选项的值必须小于connect-int和ping-int的值。
connect-int选项:如果无法立即连接上远程DRBD设备,系统将断续尝试连接。该选项设定的就是两次尝试间隔时间。单位为秒,默认值为10秒。
ping-int选项:该选项设定一个时间值,单位为秒。如果连接到远程DRBD设备的TCP/IP的空闲时间超过此值,系统将生成一个keep-alive包来检测对等节点是否还存活。默认值为10秒。
ping-timeout选项:该选项设定一个时间值,单位是0.1秒。如果对等端没有在此时间内应答keep-alive包,它将被认为已经死亡。默认值是500ms。
max-buffers选项:该选项设定一个由drbd分配的最大请求数,单位是页面大小(PAGE_SIZE),大多数系统中,页面大小为4KB。这些buffer用来存储那些即将写入磁盘的数据。最小值为32(即128KB)。这个值大一点好。
max-epoch-size选项:该选项设定了两次write barriers之间最大的数据块数。如果选项的值小于10,将影响系统性能。大一点好。
用户手册的另外一部分也提到了max-buffers选项和max-epoch-size选项,跟drbd.conf部分的解释稍有不同:drbd.conf的帮助文档中说,max-buffers设定的是最大请求数,max-epoch-size设定的是最高的数据块数;而这部分的帮助文档说,这两个选项影响的是 secondary节点写操作的性能,max-buffers设定的是最大的buffers数,这些buffers是drbd系统是为即将写入磁盘的数据而分配的;max-epoch-size设定的是两次write barrier之间所允许的最大请求数。多数情况下,这两个选项应该并行地设置,而且两个选项的值应该保持一致。两个选项的默认值都是2048,在大多数合理的高性能硬件RAID控制器中,把它们设定为8000比较好。两个部分的解释结合起来看,max-buffers设定的是最大的数据块数,max-epoch-size设定的是所能请求的最大块数。
ko- count选项:该选项设定一个值,把该选项设定的值乘以 timeout设定的值,得到一个数字N,如果secondary节点没有在此时间内完成单次写请求,它将从集群中被移除(即,primary node进入StandAlong模式)。取值范围0~200,默认值为0,即禁用该功能。
allow-two-primaries选项:这个是drbd8.0及以后版本才支持的新特性,允许一个集群中有两个primary node。该模式需要特定文件系统的支撑,目前只有OCFS2和GFS可以,传统的ext3、ext4、xfs等都不行!
cram-hmac-alg选项:该选项可以用来指定HMAC算法来启用对等节点授权。drbd强烈建议启用对等节点授权机制。可以指定/proc/crypto文件中识别的任一算法。必须在此指定算法,以明确启用对等节点授权机制。
shared-secret选项:该选项用来设定在对待节点授权中使用的密码,最长64个字符。
data-integrity-alg选项:该选项设定内核支持的一个算法,用于网络上的用户数据的一致性校验。通常的数据一致性校验,由TCP/IP头中所包含的16位校验和来进行,而该选项可以使用内核所支持的任一算法。该功能默认关闭。
3/etc/drbd.d/*.res
resource res1 {
net {
protocol C;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
}
on node1 {
device /dev/drbd1;
disk /dev/hda7;
meta-disk /dev/hda6;
address ipv4 10.254.254.1:7802;
}
on node2 {
device /dev/drbd1;
disk /dev/hda7;
meta-disk /dev/hda6;
address ipv4 10.254.254.2:7802;
}
disk {
on-io-error call-local-io-error;
resync-rate 100M;
c-max-rate 1000M;
c-min-rate 4M;
}
handlers {
after-resync-target "/etc/drbd.d/after-resync-target.sh ";
before-resync-target "/etc/drbd.d/before-resync-target.sh ";
}
}
3.1Protocol三种协议
协议A:本地完成写入,且数据包已在发送队列中,则认为写入完成。 在一个节点发生故障时,可能发生数据丢失。常用与物理上分开的节点。
协议B.本地完成写入,并收到远程主机的收到数据确认后,则认为写入完成。 在两个节点同时发生故障时,可能发生数据丢失。因为在数据传输过程中,数据未必能提交到磁盘。
协议C.本地完成写入,并收到远程主机的写入确认后,则认为写入完成。没有任何数据丢失,因此这是最常用的模式。
3.2元数据形式
metadata有两种存储方式:internally和externally.存储方式是在每个resource配置段中指定的。
Internal metadata:
一个resource被配置成使用internal metadata,意味着DRBD把它的metadata,和实际生产数据存储于相同的底层物理设备中。该存储方式是在设备的最后位置留出一个区域来存储metadata。
优点:因为metadata是和实际生产数据紧密联系在一起的,如果发生了硬盘损坏,不需要管理员做额外的工作,因为metadata会随实际生产数据的丢失而丢失,同样会随着生产数据的恢复而恢复。
缺点:如果底层设备只有一块物理硬盘(和RAID相反),这种存储方式对写操作的吞吐量有负面影响,因为应用程序的写操作请求会触发DRBD的metadata的更新。如果metadata存储于硬盘的同一块盘片上,那么,写操作会导致额外的两次磁头读写移动。
要注意的是:如果你打算在已有数据的底层设备中使用internal metadata,需要计算并留出DRBD的metadata所占的空间大小,并采取一些特殊的操作,否则很有可能会破坏掉原有的数据!
external metadata:
该存储方式比较简单,就是把metadata存储于一个和生产数据分开的专门的设备块中。
优点:对某些写操作,提供某些潜在的改进。
缺点:因为metadata和生产数据是分开的,如果发生了硬盘损坏,在更换硬盘后,需要管理员进行人工干预,从其它存活的节点向刚替换的硬盘进行完全的数据同步。什么时候应该使用exteranl的存储方式:设备中已经存有数据,而该设备不支持扩展(如LVM),也不支持收缩(shrinking)。
4连接状态参数
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:以本地节点为验证目标的线上设备验证正在执行
5磁盘状态参数
Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离
Attaching:读取无数据时候的瞬间状态
Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘
Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态
Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态
Outdated:数据资源是一致的,但是已经过时
DUnknown:当对等节点网络连接不可用时出现这种状态
Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated
UpToDate:一致的最新的数据状态,这个状态为正常状态