为什么我看到 DRBD 的性能受到很大影响?

BHS*_*BHS 6 linux performance drbd

我看到 DRBD 对性能的影响比他们的用户手册说的要大得多。我使用的是 DRBD 8.3.7(Fedora 13 RPM)。

我已经设置了一个 DRBD 测试并测量了没有 DRBD 的磁盘和网络的吞吐量:

dd if=/dev/zero of=/data.tmp bs=512M count=1 oflag=direct
536870912 bytes (537 MB) copied, 4.62985 s, 116 MB/s
Run Code Online (Sandbox Code Playgroud)

/ 是我正在测试的磁盘上的逻辑卷,没有 DRBD 挂载

iperf:

[  4]  0.0-10.0 sec  1.10 GBytes   941 Mbits/sec
Run Code Online (Sandbox Code Playgroud)

根据吞吐量开销预期,瓶颈将是较慢的,网络或磁盘和 DRBD 应该有 3% 的开销。就我而言,网络和 I/O 似乎非常匹配。听起来我应该能够达到 100 MB/s 左右。

所以,使用原始 drbd 设备,我得到

dd if=/dev/zero of=/dev/drbd2 bs=512M count=1 oflag=direct
536870912 bytes (537 MB) copied, 6.61362 s, 81.2 MB/s
Run Code Online (Sandbox Code Playgroud)

这比我预期的要慢。然后,一旦我用 ext4 格式化设备,我就会得到

dd if=/dev/zero of=/mnt/data.tmp bs=512M count=1 oflag=direct
536870912 bytes (537 MB) copied, 9.60918 s, 55.9 MB/s
Run Code Online (Sandbox Code Playgroud)

这似乎不对。一定有其他一些我不知道的因素在起作用。

global_common.conf

global {
usage-count yes;
}

common {
protocol C;
}

syncer {
al-extents 1801;
rate 33M;
}
Run Code Online (Sandbox Code Playgroud)

data_mirror.res

resource data_mirror {
    device /dev/drbd1;
    disk   /dev/sdb1;

    meta-disk internal;

    on cluster1 {
       address 192.168.33.10:7789;
    }

    on cluster2 {
       address 192.168.33.12:7789;
    }
}
Run Code Online (Sandbox Code Playgroud)

对于硬件,我有两台相同的机器:

  • 6 GB 内存
  • 四核 AMD Phenom 3.2Ghz
  • 主板SATA控制器
  • 7200 RPM 64MB 缓存 1TB WD 驱动器

网络是通过交换机连接的 1Gb。我知道建议使用直接连接,但这会产生很大的不同吗?

已编辑

我只是尝试监视用于尝试查看发生了什么的带宽。当我运行 dd 测试 10 次时,我使用了ibmonitor并测量了平均带宽。我有:

  • 平均 ~450Mbits 写入 ext4
  • 平均 ~800Mbits 写入原始设备

看起来对于 ext4,drbd 使用的带宽大约是原始设备使用的带宽的一半,因此存在一个不是网络的瓶颈。

Nil*_*ils 2

你用“rate=33M”限制带宽,为什么?你为什么使用同步协议“C”?

我通常使用协议“A”和 8 MB 缓冲区。对于千兆线路和大流量,我限制为“rate = 90M”。

  • 千兆线路流量大,你把速率设置成90M?!您可能需要仔细检查一下。DRBD 用户手册中写道:“对于该值,一个好的经验法则是使用大约 30% 的可用复制带宽。” 原因是“速率”是同步速率,即同步不一致设备时要使用多少 B/W。将同步速率设置得太高可能会导致目标应用程序带宽不足。此外,DRBD 用户手册建议 Gig 线路使用 33M,这可能就是他选择该值的原因。 (3认同)
  • @Kendall - 我不通过应用程序界面进行复制。我使用专用接口/网络来处理此类流量。 (2认同)