假定一个 I/O 子系统能支持 80MB/s 的吞吐量,而千兆网络可支持 110MB/s,
此时磁盘I/O会成为瓶颈,可以计算出,同步速率:80*0.3=24MB/s
脑裂通知和自动恢复
split brain实际上是指在某种情况下,造成drbd的两个节点断开连接,都以primary的身份来运行。当drbd某primary节点连接对方节点准备发送信息的时候如果发现对方也是primary状态,那么会立刻自行断开连接,并认定当前已经发生split brain了,这时候他会在系统日志中记录以下信息:“Split-Brain detected,dropping connection!”当发生split brain之后,如果查看连接状态,其中至少会有一个是StandAlone状态,另外一个可能也是StandAlone(如果是同时发现split brain状态),也有可能是WFConnection的状态。
自动处理:
a、 Discarding modifications made on the younger primary
---后切换成primary角色的节点数据将会被丢弃
b、 Discarding modifications made on the older primary
---先切换成primary角色的节点数据将会被丢弃
c、 Discarding modifications on the primary with fewer changes
--–哪个节点更改的数据少就丢弃
d、 Graceful recovery from split brain if one host has had no intermediate changes
---如果有节点根本没有更新数据,就直接恢复
drbd 脑裂主要在 net 配置,有以下关键字:
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 <resource> {
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root" //<handler>可能是目前系统中一个可执行的文件。
... //e.g. split-brain "/usr/lib/drbd/notify-split-brain.sh root";
} //如上通过电子邮件的方式发送到指定的地址。
net {
after-sb-0pri discard-zero-changes; //脑裂的相关自动修复策略
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
...
}
...