1、在线调整参数: 对现有资源的配置文件进行修改,两个对等节点要保持一致,然后执行 drbdadm adjust <resource> 在两个节点上都要执行; 2、在线校验数据完整性;(这个对性能还是有很大影响的) 它通过验证源对每个底层的设备某一资源的块存储设备一次计算出加密摘要,传输到对等节点,对摘要对应的本地副本块进行验证,若不匹配,则进行标识并进行重新同步,在线验证过程中不会阻塞资源的复制,不会造成系统的中断; 操作方式: 配置文件中修改:
resource <resource> net{ verify-alg <algorithm> } }(ps:也可以配置到common区块,对所有资源都适用)
执行命令:
drbdadm verify <resource> 在验证运行时如果出现out-of-sync 块,那需要在验证完毕之后使用: drbdadm disconnect <resource> drbdadm connect <resource> 这个方式用的还是少,不过可以配置为每周,或者每个月进行一次校验; 3、配置同步的速率: 总的来说还是适合就好,大致取决于磁盘的转速和网卡的IO,后台带宽被占满影响复制,影响程序; 比较好的大小是,可用带宽的30% 固定的同步速率: resource <resource> disk { sync-rate 40M; } (ps:可配置到common区块中,对所有资源通用)
临时调整速率: 在预期维护之后加快同步这样的时候可能会用到:
drbdadm disk-options --resync-rate=200M <resource>
若要恢复到原先的同步速率: drbdadm adjust <resource> 在两个node执行 对于多个资源配置同步速率的一个范围【略过暂不讨论】 拥堵策略和暂停复制多在广域网中出现,暂不讨论;
4、磁盘IO错误处理 resource <resouce>{ disk { on-io-error <strategy>; }
}(ps:可在common区块中进行设置,对所有资源有效)
处理磁盘错误的几个选项:
detach 分离:默认的选项,如果node发生底层磁盘IO错误,会将设备运行在diskless无盘模式下;
pass_on : drbd 会将错误报告到上层,即文件系统,但是往往会被忽略;
local-io-error 调用本地磁盘IO处理程序中定义的命令;需要 local-io-error 定义处理错误的命令;
5、磁盘刷写功能 只要磁盘控制器支持DRBD刷写磁盘即可(大部分还是支持的), 在含有BBC的RAID环境中,可以禁用DRBD磁盘刷写功能来获得更高的性能; resource <resource> disk { disk-flushes no; ... } 6、脑裂通知: handlers { split-brain "/usr/lib/drbd/notify-split-brain.sh root"; ... } 7、脑裂修复策略: 大部分情况下还是手动来修复: after-sb-0pri:裂脑已经被探测到,但是现在没有节点处于主角色,对于这个选项,drbd有以下关键字: disconnect:不需要自动恢复,仅仅是调用裂脑处理程序的脚本(如果配置了),断开连接并出在断开模式。 discard-younger-primary:放弃和回滚最后成为主的上面所做的修改。 discard-least-changes:放弃和回滚,变动比较少的主机上的修改。 discard-zero-changes:如果任何节点都没有发生任何变化,仅仅申请在一个节点上做出继续修改即可。 after-sb-1pri:裂脑已经被探测到,现有有一个节点处于主角色,对于这个选项,drbd有以下关键字: disconnect:和after-sb-0pri一样,调用裂脑处理程序的脚本(如果配置了),断开连接并出在断开模式。 consensus:和after-sb-0pri中同样的修复策略。如果利用这些策略裂脑危害能选择,那就能自动解决。否则,同样断开指定的动作。 call-pri-lost-after-sb:和after-sb-0pri中同样的修复策略。如果利用这些策略裂脑危害能选择,就在受危害的节点上调用pri-lost-after-sb程序。这个程序必须确认在handlers中配置,并考虑到从集群中移除该节点。 discard-secondary:不管哪个主机只要处于次角色,都是裂脑的危害者。 after-sb-2pri:在两个节点都处于主角色时,裂脑被发现。次选项使用和after-sb-1pri同样的关键字,丢弃次节点并达成共识 一个简短配置: resource data { protocol C; handlers { split-brain "/usr/lib/drbd/notify-split-brain.sh root"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; } startup { wfc-timeout 0; degr-wfc-timeout 120; } disk { on-io-error detach; } net { cram-hmac-alg sha1; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; max-buffers 8000; max-epoch-size 8000; sndbuf-size 0; } syncer { rate 90M; al-extents 257; } on BGP-LF-1MS2232{ device /dev/drbd0; disk /dev/sda4; address 192.168.1.104:7788; meta-disk internal; } on BGP-LF-1MS2233{ device /dev/drbd0; disk /dev/sda4; address 192.168.1.105:7788; meta-disk internal; } }