我在 2 个节点上设置了 DRBD,并于昨天开始使用它。大约一小时后,它已重新同步了 50% 的分区。又过了 12 个小时,它已同步到 79%,而且速度非常慢。
以下是 cat /proc/drbd 显示的内容:
1: cs:SyncTarget ro:Primary/Secondary ds:Inconsistent/UpToDate C r-----
ns:464931976 nr:191087032 dw:656013660 dr:214780588 al:100703 bm:21100 lo:7 pe:0 ua:0 ap:7 ep:1 wo:f oos:92241852
[==============>.....] sync'ed: 79.2% (90076/431396)M
finish: 76:13:38 speed: 332 (8,680) want: 19,480 K/sec
我查看了网络流量,在 1G 接口上使用 1M 到 20M。尝试在发生这一切时运行 iperf,结果读数为 930M。尝试将同步速率调整为 10M、50M、500M,但无济于事。调整数据包大小也无济于事。
现在,从状态中可以看出,需要注意的是,我的主节点不一致。因此,我假设在重新同步时,操作系统实际上是与辅助节点一起工作的。但考虑到吞吐量如此之低,我不明白为什么同步速度不快。
有什么想法可以尝试下一步吗?预计 76 小时完成并不是我所期待的 :( 尤其是不知道原因,所以发生某种中断,我不知道如何快速使阵列保持一致。
谢谢!
编辑:我尝试在网络部分进行以下设置,但无济于事:
sndbuf-size 512k;
max-buffers 20480;
max-epoch-size 16384;
unplug-watermark 20480;
编辑2:在我停止调整所有配置后,速度不知何故突然跃升至 10~30M。同步率达到 98.8%,然后又降回约 300K。两台服务器的日志中均无消息。巧合的是,我看到 MySQL 数据库上的 INSERT 活动激增,该数据库运行于此分区。有什么想法吗?
编辑3:版本:8.4.2(api:1/proto:86-101)
答案1
在 @Nils 评论之后,我开始研究磁盘的利用率。并注意到我获得的读取次数比系统重新配置为 DRBD 之前多得多。进一步的研究表明磁盘利用率接近 100%,并且当时正在运行的批处理进程速度变慢。修复 MySQL 配置以增加缓冲池大小以消除大多数读取似乎解决了该问题。
所以问题在于驱动器太忙,它们无法处理 DRBD 想要交给它们的大量重新同步工作。
答案2
尝试强制同步速率
drbdsetup /dev/drbd0 syncer -r 100M
您还可以通过配置中的 syncer {} 进行重启后设置
答案3
您已经找到问题的根源 - 大量读取 IO。调整确实sndbuf-size
有助于解决大量写入 IO(但会增加协议 A 模式下的异步性),rcvbuf-size
可能对您的情况有所帮助。
但更好的解决办法是消除问题的根源。
更多的读取可能也与 DRBD 元设备有关(尽管我也期望在写入情况下有更多读取)。