Hiệu suất đồng bộ hóa khủng khiếp của DRBD trên 10GigE


15

Tôi đã thiết lập một cặp máy chủ giống hệt nhau với mảng RAID (8 lõi, RAM 16 GB, RAID6 12x2 TB), 3 giao diện 10GigE, để lưu trữ một số dịch vụ khả dụng cao.

Các hệ thống hiện đang chạy Debian 7.9 Wheezy cũ ổn định (vì corosync / máy tạo nhịp tim không khả dụng trên 8.x ổn định cũng như không thử nghiệm).

  • Hiệu suất đĩa cục bộ là khoảng 900 MB / s ghi, 1600 MB / s đọc.
  • thông lượng mạng giữa các máy là hơn 700MB / s.
  • thông qua iSCSI, mỗi máy có thể ghi vào bộ lưu trữ của máy khác với tốc độ hơn 700 MB / s.

Tuy nhiên, bất kể cách tôi định cấu hình DRBD, thông lượng được giới hạn ở 100MB / s. Nó thực sự trông giống như một số giới hạn mã hóa cứng. Tôi có thể giảm hiệu suất một cách đáng tin cậy bằng cách điều chỉnh các cài đặt, nhưng nó không bao giờ vượt quá 1Gbit (đạt tới 122 MB / giây trong một vài giây mỗi lần). Tôi thực sự kéo tóc của tôi trên này.

  • hạt nhân vani đồng bằng 3.18.24 amd64
  • drbd 8,9.2 ~ RC1-1 ~ bpo70 + 1

Cấu hình được chia thành hai tệp global-common.conf::

global {
        usage-count no;
}

common {
        handlers {
        }

        startup {
        }

        disk {
                on-io-error             detach;
         #       no-disk-flushes ;
        }
        net {
                max-epoch-size          8192;
                max-buffers             8192;
                sndbuf-size             2097152;
        }
        syncer {
                rate                    4194304k;
                al-extents              6433;
        }
}

cluster.res:

resource rd0 {
        protocol C;
        on cl1 {
                device /dev/drbd0;
                disk /dev/sda4;
                address 192.168.42.1:7788;
                meta-disk internal;
        }

        on cl2 {
                device /dev/drbd0;
                disk /dev/sda4;
                address 192.168.42.2:7788;
                meta-disk internal;
        }
}

Đầu ra từ cat /proc/drbdtrên nô lệ:

version: 8.4.5 (api:1/proto:86-101)
srcversion: EDE19BAA3D4D4A0BEFD8CDE 
 0: cs:SyncTarget ro:Secondary/Secondary ds:Inconsistent/UpToDate C r-----
    ns:0 nr:4462592 dw:4462592 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:16489499884
        [>....................] sync'ed:  0.1% (16103024/16107384)M
        finish: 49:20:03 speed: 92,828 (92,968) want: 102,400 K/sec

Đầu ra từ vmstat 2chủ (cả hai máy gần như hoàn toàn không hoạt động):

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 14952768 108712 446108    0    0   213   254   16    9  0  0 100  0
 0  0      0 14952484 108712 446136    0    0     0     4 10063 1361  0  0 99  0
 0  0      0 14952608 108712 446136    0    0     0     4 10057 1356  0  0 99  0
 0  0      0 14952608 108720 446128    0    0     0    10 10063 1352  0  1 99  0
 0  0      0 14951616 108720 446136    0    0     0     6 10175 1417  0  1 99  0
 0  0      0 14951748 108720 446136    0    0     0     4 10172 1426  0  1 99  0

Đầu ra từ iperfgiữa hai máy chủ:

------------------------------------------------------------
Client connecting to cl2, TCP port 5001
TCP window size:  325 KByte (default)
------------------------------------------------------------
[  3] local 192.168.42.1 port 47900 connected with 192.168.42.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  6.87 GBytes  5.90 Gbits/sec

Rõ ràng đồng bộ hóa ban đầu được cho là hơi chậm, nhưng không chậm như vậy ... Hơn nữa, nó không thực sự phản ứng với bất kỳ nỗ lực nào để điều chỉnh tốc độ đồng bộ hóa như thế nào drbdadm disk-options --resync-rate=800M all.


1
Bạn đã cố gắng xây dựng nó không đồng bộ, sau đó dừng nó và xây dựng lại nó được đồng bộ hóa?
Xavier Nicollet

Câu trả lời:


11

Trong các phiên bản mới hơn của DRBD (8.3.9 và mới hơn) có bộ điều khiển đồng bộ lại động cần điều chỉnh. Trong các phiên bản cũ hơn của DRBD, cài đặt syncer {rate;}là đủ; bây giờ nó được sử dụng nhiều hơn làm nơi bắt đầu được đề xuất nhẹ cho tốc độ đồng bộ lại động.

Bộ điều khiển đồng bộ động được điều chỉnh với "c-settings" trong phần đĩa trong cấu hình của DRBD (xem $ man drbd.confchi tiết về từng cài đặt này).

Với 10Gbe giữa các nút này và giả sử độ trễ thấp do giao thức C được sử dụng, cấu hình sau sẽ giúp mọi thứ chuyển động nhanh hơn:

tài nguyên
        giao thức C;
        đĩa {
                c-điền mục tiêu 10M;
                c-tốc độ tối đa 700M;
                c-kế hoạch trước 7;
                c-min-Rate 4M;
        }
        trên cl1 {
                thiết bị / dev / drbd0;
                đĩa / dev / sda4;
                địa chỉ 192.168.42.1:7788;
                nội bộ đĩa meta;
        }

        trên cl2 {
                thiết bị / dev / drbd0;
                đĩa / dev / sda4;
                địa chỉ 192.168.42.2:7788;
                nội bộ đĩa meta;
        }
}

Nếu bạn vẫn không hài lòng, hãy thử chuyển max-bufferslên 12k. Nếu bạn vẫn không hài lòng, bạn có thể thử tăng lên c-fill-targettheo gia số 2M.


Trên thực tế với hiệu suất cấu hình này giảm xuống còn 3 MB / s. Tôi đang cố gắng để chơi đồ chơi với các cài đặt này nhưng triển vọng là nghiệt ngã.
wazoox

Cho đến nay, việc vô hiệu hóa c-plan-before bằng cách đặt nó ở mức 0 và tăng kích thước tối đa epoch và bộ đệm tối đa dường như thực hiện thủ thuật.
wazoox

2
Điều gì xảy ra nếu bạn tăng bộ đệm tối đa lên 20k và c-fill-target lên 20M? Tôi tin rằng việc tăng dần hai giá trị này cuối cùng sẽ cho bạn kết quả mà bạn đang tìm kiếm.
Matt Kereczman

Điều đó tốt hơn nhiều! Nó không bão hòa liên kết (được dành riêng và mặc dù nó vẫn ổn để lấp đầy) nhưng tôi đã ở mức 400MB / s. Tôi đang chơi một chút với các cài đặt này ...
wazoox

1
Upping bộ đệm tối đa từ 250 đến 2500 đã tạo ra sự khác biệt giữa ngày và đêm đối với tôi (trong thiết lập hiệu suất không quan trọng của tôi)
davidgo

7

Một số người khác đề nghị tôi sử dụng các cài đặt này:

        disk {
                on-io-error             detach;
                c-plan-ahead 0;
        }
        net {
                max-epoch-size          20000;
                max-buffers             131072;
        }

Và hiệu suất là tuyệt vời.

Chỉnh sửa: Theo đề xuất của @Matt Kereczman và những người khác, cuối cùng tôi đã thay đổi thành:

disk {
        on-io-error             detach;
        no-disk-flushes ;
        no-disk-barrier;
        c-plan-ahead 0;
        c-fill-target 24M;
        c-min-rate 80M;
        c-max-rate 720M;
} 
net {
        # max-epoch-size          20000;
        max-buffers             36k;
        sndbuf-size            1024k ;
        rcvbuf-size            2048k;
}

Tốc độ đồng bộ hóa cao:

cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
srcversion: EDE19BAA3D4D4A0BEFD8CDE
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
    ns:133246146 nr:0 dw:2087494 dr:131187797 al:530 bm:0 lo:0 pe:5 ua:106 ap:0 ep:1 wo:d oos:4602377004
        [>....................] sync'ed:  2.8% (4494508/4622592)M
        finish: 1:52:27 speed: 682,064 (646,096) K/sec

Tốc độ ghi là tuyệt vời trong khi đồng bộ lại với các cài đặt này (80% tốc độ ghi cục bộ, tốc độ dây đầy đủ):

# dd if=/dev/zero of=./testdd bs=1M count=20k
20480+0 enregistrements lus
20480+0 enregistrements écrits
21474836480 octets (21 GB) copiés, 29,3731 s, 731 MB/s

Tốc độ đọc là OK:

# dd if=testdd bs=1M count=20k of=/dev/null
20480+0 enregistrements lus
20480+0 enregistrements écrits
21474836480 octets (21 GB) copiés, 29,4538 s, 729 MB/s

Chỉnh sửa sau:

Sau khi đồng bộ lại đầy đủ, hiệu suất rất tốt (ghi tốc độ dây, đọc tốc độ cục bộ). Resync nhanh chóng (5/6 giờ) và không ảnh hưởng đến hiệu suất quá nhiều (đọc tốc độ dây, ghi tốc độ dây). Tôi chắc chắn sẽ ở lại với c-plan-before ở mức 0. Với các giá trị khác không, đồng bộ hóa lại quá dài.


Tăng bộ đệm tối đa lên 131K không phải là cách tiếp cận duyên dáng nhất để giải quyết vấn đề của bạn. Về cơ bản, bạn đang cho DRBD 512MiB bộ đệm hệ thống để sử dụng cho nó đồng bộ lại, đó là rất nhiều không gian bộ đệm. Tôi đã thấy mọi thứ xảy ra với bộ đệm tối đa lớn hơn 80k. Tôi đặc biệt khuyên bạn nên điều chỉnh cài đặt bộ điều khiển đồng bộ lại, đồng thời tăng bộ đệm tối đa ở mức tăng nhỏ cho đến khi bạn hài lòng.
Matt Kereczman

@MattKereczman Tôi sẽ thay đổi cài đặt, nhưng tôi muốn có một cụm (đồng bộ hóa) tối ưu càng nhanh càng tốt trước khi chơi với cài đặt sản xuất .... Cài đặt mặc định có nghĩa là đồng bộ hóa mất ít nhất vài ngày trở lên đến vài tuần, điều này chỉ đơn giản là không thể chấp nhận được. Thông lượng sản xuất cần thiết là 500MB / s.
wazoox

4

c-plan-before phải đặt giá trị dương để bật bộ điều khiển tốc độ đồng bộ động. đĩa c-plan-ahead 15; // 5 * RTT / 0.1s unit,in my case is 15 c-fill-target 24; c-max-rate 720M;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.