DRBD 双主障碍

DRBD 双主障碍

我在两台不同的服务器上安装并配置了 DRBD,一切都按预期工作,但我的 I/O 磁盘读/写速度非常糟糕,网络延迟非常快,我的共享分区是 35 GB,我需要几天时间才能在两台服务器之间完全同步,需要 15 分钟才能复制 100 MB 的目录,我还配置了自动裂脑恢复,它工作正常,但当它发生时,其中一个磁盘(有故障的磁盘)获得了辅助标记,因此它不会自动安装,除非手动将其提升为主磁盘,有没有想过如何克服速度慢的问题,并在从裂脑中恢复后自动将节点提升为主节点,并与另一个节点完全同步,以便我可以在启动期间甚至启动后自动安装它们,我不想每次重启时都照看服务器?

global { usage-count no; }
common { syncer { al-extents 3389; rate 150M; } }
resource web {
  protocol C;
  startup {
    wfc-timeout 30;
    outdated-wfc-timeout 20;
    degr-wfc-timeout 30;
    become-primary-on both;
  }
  net {
    sndbuf-size 0;
    max-buffers 8000;
    max-epoch-size 8000;
    unplug-watermark 16;
    # cram-hmac-alg sha1;
    # shared-secret PASSWORD;
    allow-two-primaries;
    after-sb-0pri discard-zero-changes;
    after-sb-1pri discard-secondary;
    after-sb-2pri disconnect;
    rr-conflict disconnect;
  }
  on first-node {
    device /dev/drbd0;
    disk /dev/xvdc0;
    address 192.168.1.11:7789;
    meta-disk internal;
  }
  on second-node {
    device /dev/drbd0;
    disk /dev/xvdc0;
    address 192.168.1.12:7789;
    meta-disk internal;
  }
  disk {
    no-disk-barrier;
    no-disk-flushes;
    on-io-error detach;
    fencing resource-and-stonith;
  }
  handlers {
    split-brain "/usr/lib/drbd/notify-split-brain.sh root";
  #  fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
    out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
  #  after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
  #  local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emerg$
  #  pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/$
  #  pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/$
  }
}

答案1

排除一些可能出现错误的区域。首先检查网络接口是否运行正常,检查错误并纠正速度。

ifconfig -a   # (some lines removed)
 eth0      Link encap:Ethernet  HWaddr f0:X
      inet addr:172.2.2.11  Bcast:172.2.2.255  Mask:255.255.252.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:1345026 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1465184 errors:2 dropped:0 overruns:0 carrier:2
      collisions:35456 txqueuelen:1000 
      RX bytes:897944732 (897.9 MB)  TX bytes:185044496 (185.0 MB)

检查是否存在太多错误,我总共传输了 1465184 个错误,但只有 2 个,这并不令人担忧。我的冲突次数比我想要的要高。

# mii-tool eth0
eth0: negotiated 100baseTx-HD, link ok  

只有 100 Mb。对我来说,如果我能使用千兆交换机,网络拓扑结构会有所改善。另外,我还有 HD,它是半双工的,也很糟糕。我的网络接口支持 1000baseT-FD,所以瓶颈是交换机。

对于您来说,如果服务器上有第二个网络接口,您可以直接将它们连接在一起。此外,ethtool eth0 会提供更好的输出。

如果没有网络问题,请检查硬盘错误。

# smartctl -t short /dev/sda    # test the harddisk

# smartctl -H /dev/sda           
smartctl 6.2 2013-04-20 r3812 [x86_64-linux-3.11.0-15-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

# smartctl --all  /dev/sda   # for all information

之后,检查日志文件是否有错误,CPU 负载过高?也许加密需要很长时间。

答案2

您未设置缓冲区并且正在驱动协议 C。

因此,您需要等待每个 IO 在远程端完成,然后才能在本地写入。

将缓冲区设置为 8 MB 并使用协议 A。

相关内容