我在两台不同的服务器上安装并配置了 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。