10GigE पर DRBD भयानक सिंक प्रदर्शन


15

मैंने कुछ अत्यधिक उपलब्ध सेवाओं की मेजबानी करने के लिए RAID सरणियों (8 कोर, 16 जीबी रैम, 12x2 टीबी RAID6), 3 10 गीगा इंटरफेस के साथ समान सर्वर की एक जोड़ी स्थापित की है।

वर्तमान में सिस्टम डेबियन 7.9 व्हीजेईस्टेबल के रूप में चल रहे हैं (क्योंकि कोरोसिंक्स / पेसमेकर 8.x स्थिर या परीक्षण पर उपलब्ध नहीं हैं)।

  • स्थानीय डिस्क प्रदर्शन लगभग 900 एमबी / एस है, 1600 एमबी / एस पढ़ा है।
  • मशीनों के बीच नेटवर्क थ्रूपुट 700MB / s से अधिक है।
  • iSCSI के माध्यम से, प्रत्येक मशीन 700 MB / s से अधिक पर दूसरे के स्टोरेज को लिख सकती है।

हालांकि, कोई फर्क नहीं पड़ता कि मैं DRBD को कैसे कॉन्फ़िगर करता हूं, थ्रूपुट 100MB / s तक सीमित है। यह वास्तव में कुछ हार्डकोड सीमा जैसा दिखता है। मैं मज़बूती से सेटिंग्स को कम करके प्रदर्शन को कम कर सकता हूं, लेकिन यह 1Gbit (122MB / s एक समय में कुछ सेकंड के लिए पहुंच जाता है) पर नहीं जाता है। मैं वास्तव में इस पर अपने बाल खींच रहा हूं।

  • सादे वेनिला कर्नेल 3.18.24 amd64
  • drbd 8.9.2 ~ rc1-1 ~ bpo70 + 1

कॉन्फ़िगरेशन दो फ़ाइलों में विभाजित है 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;
        }
}

cat /proc/drbdगुलाम से उत्पादन :

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

vmstat 2मास्टर से आउटपुट (दोनों मशीनें लगभग पूरी तरह से निष्क्रिय हैं):

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

iperfदो सर्वरों के बीच से आउटपुट :

------------------------------------------------------------
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

जाहिरा तौर पर प्रारंभिक तुल्यकालन कुछ हद तक धीमा माना जाता है, लेकिन यह धीमा नहीं है ... इसके अलावा यह वास्तव में सिंक दर की तरह थ्रॉटल करने के किसी भी प्रयास पर प्रतिक्रिया नहीं करता है drbdadm disk-options --resync-rate=800M all


1
क्या आपने इसे async बनाने की कोशिश की है, फिर इसे रोककर इसे फिर से सिंक किया है?
जेवियर निकोलेट

जवाबों:


11

DRBD (8.3.9 और नए) के नए संस्करणों में एक डायनेमिक रेसक्यू नियंत्रक है जिसे ट्यूनिंग की आवश्यकता है। DRBD सेटिंग के पुराने संस्करणों में syncer {rate;}पर्याप्त था; अब इसे डायनामिक रेसक्यू स्पीड के लिए हल्के ढंग से शुरू की गई जगह के रूप में अधिक उपयोग किया जाता है।

गतिशील सिंक नियंत्रक को DRBD के कॉन्फ़िगरेशन के डिस्क अनुभाग में "सी-सेटिंग्स" के साथ ट्यून किया गया है ( $ man drbd.confइनमें से प्रत्येक सेटिंग्स पर विवरण देखें )।

इन नोड्स के बीच 10Gbe के साथ, और प्रोटोकॉल C का उपयोग किए जाने के बाद से कम विलंबता मानकर, निम्नलिखित कॉन्फ़िगर चीजों को तेज़ी से आगे बढ़ाना चाहिए:

संसाधन rd0 {
        प्रोटोकॉल सी;
        डिस्क {
                c-fill-target 10M;
                सी-मैक्स-रेट 700M;
                सी-प्लान-फॉरवर्ड 7;
                सी-मिन-दर 4M;
        }
        cl1 पर {
                डिवाइस / देव / drbd0;
                डिस्क / देव / sda4;
                पता 192.168.42.1:7788;
                मेटा-डिस्क आंतरिक;
        }

        cl2 पर {
                डिवाइस / देव / drbd0;
                डिस्क / देव / sda4;
                पता 192.168.42.2:7788;
                मेटा-डिस्क आंतरिक;
        }
}

यदि आप अभी भी खुश नहीं हैं, तो max-buffers12k तक की कोशिश करें । यदि आप अभी भी खुश नहीं हैं, तो आप c-fill-target2M वेतन वृद्धि में बदलाव का प्रयास कर सकते हैं ।


वास्तव में इस कॉन्फ़िगरेशन के प्रदर्शन के साथ 3 एमबी / एस तक गिर जाता है। मैं इन सेटिंग्स के साथ खिलौना करने की कोशिश कर रहा हूं, लेकिन संभावनाएं गंभीर हैं।
वज़ोक्स

अब तक, सी-प्लान-फॉरवर्ड को शून्य पर सेट करना और मैक्स-एपोच-आकार और अधिकतम-बफ़र्स को बढ़ा-चढ़ाकर करना ट्रिक का काम लगता है।
वज़ोक्स 14

2
यदि आप अधिकतम बफ़र्स को 20k तक बढ़ाते हैं, और सी-फिल-टारगेट को 20M तक बढ़ाते हैं? मेरा मानना ​​है कि इन दोनों मूल्यों को धीरे-धीरे बढ़ाना आपको अंततः वे परिणाम देगा जिनकी आप तलाश कर रहे हैं।
मैट केर्केमैन

यह ज़्यादा बेहतर है! यह लिंक को संतृप्त नहीं करता है (जो समर्पित है और हालांकि इसे भरना ठीक है) लेकिन मैं पहले से ही 400 एमबी / एस पर हूं। मैं इन सेटिंग्स के साथ थोड़ा खेल रहा हूं ...
wazoox

1
अधिकतम बफ़र्स को 250 से 2500 तक करने से मेरे लिए (मेरे गैर-महत्वपूर्ण प्रदर्शन सेटअप में) रात-दिन का अंतर बना रहा
davidgo

7

किसी और ने सुझाव दिया कि मैं इन सेटिंग्स का उपयोग करता हूं:

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

और प्रदर्शन उत्कृष्ट है।

संपादित करें: @Matt Kereczman और अन्य सुझावों के अनुसार, मैंने अंत में इसे बदल दिया है:

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;
}

Resync गति अधिक है:

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

इन सेटिंग्स (80% स्थानीय लेखन गति, पूर्ण तार गति) के साथ resync के दौरान लिखें गति उत्कृष्ट है:

# 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

पढ़ें गति ठीक है:

# 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

बाद में संपादित करें:

एक पूर्ण resync के बाद, प्रदर्शन बहुत अच्छा है (तार गति लेखन, स्थानीय गति पढ़ना)। Resync त्वरित (5/6 घंटे) है और प्रदर्शन को बहुत ज्यादा नुकसान नहीं पहुँचाता है (वायर स्पीड रीडिंग, वायर स्पीड राइटिंग)। मैं निश्चित रूप से शून्य पर सी-प्लान-फॉरवर्ड के साथ रहूंगा। गैर-शून्य मानों के साथ, resync बहुत लंबा है।


अधिकतम बफ़र्स को 131K तक बढ़ाना आपके मुद्दे को हल करने का सबसे सुंदर दृष्टिकोण नहीं है। आप अनिवार्य रूप से सिस्टम बफ़र्स के DRBD 512MiB का उपयोग कर रहे हैं, इसके लिए इसका उपयोग करने के लिए resync है, जो बहुत सारे बफर स्थान है। मैंने देखा है कि चीजें अधिकतम-बफ़र्स के साथ 80k से बड़ी होती हैं। जब तक आप खुश नहीं होते तब तक मैं छोटे वेतन वृद्धि पर अधिकतम-बफ़र्स बढ़ाते हुए, रेसक्यूक्स कंट्रोलर सेटिंग्स को ट्यून करने की सलाह दूंगा।
मैट केर्केमैन 16

@MattKereczman मैं सेटिंग्स बदल दूंगा, लेकिन मैं उत्पादन सेटिंग्स के साथ खेलने से पहले जितनी जल्दी हो सके एक इष्टतम (सिंक'ड) क्लस्टर करना चाहूंगा .... चूक सेटिंग्स का मतलब है कि सिंक कम से कम कई दिनों और ऊपर ले जाता है कई हफ्तों के लिए, यह बस स्वीकार्य नहीं है। आवश्यक उत्पादन थ्रूपुट 500MB / s है।
वाज़ोक्स

4

सी-प्लान-फॉरवर्ड को गतिशील सिंक दर नियंत्रक को सक्षम करने के लिए एक सकारात्मक मूल्य निर्धारित करना होगा। डिस्क c-plan-ahead 15; // 5 * RTT / 0.1s unit,in my case is 15 c-fill-target 24; c-max-rate 720M;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.