
مرحبًا مرة أخرى ، أليكسي بريستافكو على اتصال ، وهذا هو الجزء الثاني من قصتي حول تخزين كائن S3 DataLine استنادًا إلى Cloudian HyperStore.
اليوم سأتحدث بالتفصيل عن كيفية ترتيب تخزين S3 لدينا والصعوبات التي واجهناها في عملية إنشائه. تأكد من لمس موضوع "الحديد" وتحليل المعدات التي انتهى بنا المطاف بالبقاء فيها.
دعنا نذهب!
إذا كنت ترغب أثناء القراءة في التعرف على بنية تطبيق الحل السحابي ، فستجد تحليله المفصل في
المقالة السابقة . هناك ناقشنا بالتفصيل الجهاز الداخلي Cloudian ، والتسامح مع الخطأ ومنطق SDS المدمج.
المخطط النهائي للمعدات المادية
منذ ذلك الحين سنتحدث عن "عذاب الاختيار" ، سأعطي على الفور القائمة النهائية للحديد التي وصلنا إليها. إخلاء مسؤولية صغير: كان اختيار معدات الشبكة يرجع إلى حد كبير إلى وجودها في مستودعاتنا (بالمناسبة ، صلبة جدًا).
لذلك ، على المستوى المادي للتخزين ، لدينا المعدات التالية:
الاسم
| الوظيفة
| التكوين
| الكمية
|
خادم Lenovo System x3650 M5 Server
| عقدة العمل
| 1x Xeon E5-2630v4 2.2 جيجا هرتز ، 4x 16 جيجابايت DDR4 ، 14x 10 تيرابايت 7.2 كيلو 6Gbps SATA 3.5 "، 2x 480 جيجابايت SSD ، Intel x520 Dual Port 10GbE SFP + ، 2 × 750 واط HS PSU
| 4
|
خادم HP ProLiant DL360 G9
| عقدة موازن التحميل
| 2 E5-2620 v3 ، 128 جيجا رام 2 SSD بسعة 600 جيجابايت ، 4 SAS HDD ، Intel x520 Dual Port 10GbE SFP +
| 2
|
Cisco C4500 Switch
| بوابة الحدود
| Catalyst WS-C4500X-16SFP +
| 2
|
Cisco C3750 Switch
| موسع المنفذ
| Catalyst WS-C3750X-24T مع C3KX-NM-10G
| 2
|
Cisco C2960 Switch
| طائرة تحكم
| محفز WS-C2960 + 48PST-L
| 1
|
لفهم أفضل للهندسة المعمارية ، سنلقي نظرة على جميع العناصر بدورها ونتحدث عن ميزاتها ومهامها.
لنبدأ بالخوادم. تمتلك خوادم Lenovo تكوينًا خاصًا يتم تنفيذه بشكل مشترك وبامتثال كامل لتوصيات ومواصفات Cloudian. على سبيل المثال ، يستخدمون وحدة تحكم مع الوصول المباشر إلى القرص. نظرًا لأن RAID في حالتنا منظم على مستوى برنامج التطبيق ، فإن هذا الوضع يزيد من الموثوقية ويسرع النظام الفرعي للقرص. يمكن شراء نفس الخوادم تمامًا كجهاز Cloudian Appliance مع جميع التراخيص.
تضمن خوادم موازنة التحميل مع Nginx لـ CentOS توزيعًا متساويًا للحمل على عقد العمل وتجريد المستخدم من منظمة حركة المرور الداخلية. وكمكافأة سارة - إذا لزم الأمر ، يمكنك تنظيم ذاكرة التخزين المؤقت عليها.
يعمل زوج Cisco 4500X sixteen 10GB SFP + كنواة وحدود لشبكة التخزين الصغيرة ولكن الفخورة. بالطبع ، الحديد قديم الطراز قليلاً ، لكنه ليس أقل من الموثوقية "الجديدة" ، ولديه فائض داخلي ، ووظائفه تلبي جميع متطلباتنا. يلعب C3750 دور موسع المصنع ، ليست هناك حاجة إلى دفع أجهزة الإرسال والاستقبال 1G إلى فتحات 10G. والتبديل تمامًا إلى روابط 10 غيغابايت ليس له أي معنى حتى الآن. كما أظهرت الاختبارات ، نركض إلى المعالج والأقراص في وقت سابق.
يوضح الرسم البياني أدناه بتفصيل كافٍ التنظيم المادي الذي وصفته:
1. مخطط تنظيم التخزين الماديدعنا نذهب من خلال المخطط. كما ترون ، يتم تحقيق التسامح مع الخطأ على المستوى المادي من خلال تكرار وربط كل جهاز مع ارتباطين بصريين على الأقل ، واحد لكل جهاز في زوج. وهذا يمنحنا ضمانًا للحفاظ على الاتصال المادي في الدائرة أثناء حادث أي جهاز شبكة أو جهازين من أزواج مختلفة في نفس الوقت.
نذهب تحت المخطط. يتم دمج أزواج Cisco (4500/4500 ، 3750/3750) في جهاز منطقي واحد باستخدام المكدس و VSS. يتم تجميع المكدس مع كبلين مكدسين ، VSS من خلال ثلاثة وصلات بصرية 10G. يتيح لك ذلك التأكد من أن كلا الجهازين في كل زوج يتفاعلان بشكل كامل. يسمح لنا هذا التجميع بالعمل ضمن إطار مقطع L2 شفاف واحد من خلال كلا الجهازين من الزوج وإنشاء تجميع ارتباط عام باستخدام LACP ، حيث أن هذه التقنية مدعومة أصلاً من قبل كل من نظام تشغيل الخادم و Cisco IOS. من جانب الخادم ، يبدو أنه يعمل مع مفتاح واحد بدلاً من مفتاحين ، وفوق التطبيق توجد قناة مجمعة ذات سعة مزدوجة.
يتم تبديل جميع معدات الشبكة فيما بينها والقنوات الواردة باستخدام روابط بصرية 10G ، ويتم توصيل معدات الخادم باستخدام كابلات Twinax Cisco 10G ونحاس 1G.
يتم استخدام BGP لتحمل الخطأ في القناة الواردة ، ويتم استخدام Round Robin DNS للموازنة بين عناوين IP الخارجية. العناوين الخارجية نفسها متوقفة على خوادم موازنة الحمل ، وإذا لزم الأمر ، تنتقل بين العقد باستخدام حزمة Pacemaker / Corosync.
تتم المراقبة والتحكم عبر IPMI عبر رابط داخلي مباشر. يتم توصيل جميع واجهات الإدارة (كل من الخوادم و Cisco) من خلال محولات مستوى التحكم المنفصلة. وهي بدورها مشمولة في شبكة التحكم بمركز البيانات. هذا يضمن لنا استحالة فقدان الاتصال مع المعدات أثناء العمل أو نتيجة لحادث على شبكة خارجية. بالنسبة للحالة الأكثر تطرفًا ، هناك حاضرون مع KVM.
شبكة منطقية
لفهم كيفية عمل الشبكة المنطقية S3 لتخزين DataLine ، دعنا ننتقل إلى مخطط آخر:
2. مخطط شبكة التخزين المنطقيكما ترى ، يتكون منطق الشبكة من عدة أجزاء.
يتم توصيل شبكة خارجية (Q) بسعة إجمالية تصل إلى 20G مباشرةً مع Provider Edge. ويلي ذلك Cisco 4500 والموازنات.
الكتلة المنطقية التالية (X) هي VLAN بين الموازن وعقد العمل. تستخدم الموازنات نفس الاتصال المستخدم لحركة المرور الواردة. يتم توصيل عُقد العمل عبر مكدس 3750 مع 4 ارتباطات 1G (اثنان لكل 3750). يتم تجميع جميع الارتباطات المادية في ارتباط منطقي واحد باستخدام LACP أيضًا. يتم استخدام هذه الشبكة فقط لمعالجة حركة مرور العميل.
تمر جميع الاتصالات داخل مجموعة Cloudian (Y) من خلال قطعة منطقية ثالثة مبنية على أعلى 10G. تساعد هذه المنظمة على تجنب المشاكل على القناة الخارجية بسبب حركة المرور الداخلية والعكس صحيح. هذا جزء محمل ومهم للغاية لتشغيل الكتلة. من خلاله يتم نسخ البيانات والبيانات الوصفية ، ويتم استخدامها من قبل أي إجراءات لإعادة التوازن ، وما إلى ذلك ، وبالتالي ، قمنا بتمييز "عدم إمكانية الغرق" كمهمة منفصلة.
القليل من الجمال
هكذا يبدو كل شيء:
3. معدات الشبكات وموازين الوجه الكامل
4. نفس ، المنظر الخلفيانتبه إلى التبديل. في مقالات سابقة ، كتب زملائي عن أهمية كبلات تمييز الألوان ، ولكن لن يكون من المناسب التطرق إلى هذا الموضوع هنا.
نحن نستخدم تبديل الألوان ليس فقط للشبكة ، ولكن أيضًا للطاقة. وهذا يسمح لمهندسينا بالتنقل بسرعة في الحامل ويقلل من تأثير العامل البشري أثناء التبديل.
5. عقد العمل
6. المنظر الخلفيفي هذه الصورة ، يمكنك أن ترى بوضوح مدى إحكام ملء الخوادم العاملة بالأقراص - لا توجد فتحات فارغة عمليا حتى في الخلف. بالمناسبة ، لا يؤدي تنظيم هذه الكابلات في حزم مدمجة وظيفة جمالية فحسب ، بل يتجنب أيضًا تداخل مراوح مصادر الطاقة ، مما يوفر الحديد من الحرارة الزائدة.
القائمة البيضاء
في التعليقات على المقالة الأخيرة ، وعدت بالتحدث أكثر عن جهاز القائمة البيضاء.
إذا اتفقنا مع العميل لسبب ما على استبعاد جميع الحسابات من التخزين من داخل مركز البيانات أو من خلال القنوات المباشرة إلى معداته ، فمن الضروري تنظيم اتصال خاص للتخزين.
تذكر ، في الرسم البياني الأول كان هناك فرع على DIST's و Cloud؟ بالإضافة إلى قناة الإنترنت الرئيسية بسرعة 20 جيجا بايت ، نستخدم قناة مجمعة للتبديل ، والتي نربط جميع العملاء بها على مستوى مركز البيانات. إذا كان العميل يريد رابطًا مباشرًا للتخزين ، يمكننا تكوين VLAN من العميل إلى 4500X من خلال إنشاء مسار منفصل (أو بدونه) وبدء L3. بعد ذلك ، يتم تكوين الربط لخطة التعرفة على عناوين العميل الموجودة بالفعل في Cloudian نفسها. بعد ذلك ، بالنسبة لكل شخص متصل بخطة التعرفة هذه ، لن يتم النظر في استخدام S3 من عناوين القائمة البيضاء.
7. وهنا واجهة خاصة في Cloudian.الآن ليس لدينا مثل هذه التعريفات في الشبكة ، ولكن إذا كنت تريد حقًا ، يمكننا تقديمها.
تاريخ البناء
نحن نقترب تدريجياً من الجزء الأكثر إثارة للاهتمام من التاريخ - بناء منشأة تخزين. سيكون هناك العديد من الصور ، ما يصل إلى ثلاث محاولات لتنظيم موازنة حركة المرور وبعض النصائح السيئة. آمل أن يكون تحليل المشاكل التي واجهناها في الطريق مفيدًا لأولئك الذين يستعدون للعمل بسرعة 10 جيجا بايت + على الويب.
تجربة 10G
قبل أن أذهب مباشرة إلى جوهر هذا القسم ، أسمح لنفسي بإجراء إخلاء مسؤولية صغير آخر.
وفقًا لتقاليد راسخة ، قبل شراء معدات مساعدة جديدة ، نذهب إلى المستودع ونختار مكونات مناسبة أكثر أو أقل. هذا يسمح لك بإجراء الاختبارات بسرعة والبت في قائمة التسوق المستقبلية. بالطبع ، في حين أننا لا نحقق نتيجة موثوقة بنسبة 100 ٪ ، لا يتم إنفاق أي شيء على المنتج.
لذلك كانت هذه المرة. وإذا لم تقدم شركة Cisco أي مفاجآت ، فعندئذٍ مع "موازين الحمل" ، دمرنا الجشع تقريبًا.
التجربة الأولى. خوادم سوبرماكرو
هنا خذلنا الرغبة في إجراء اختبار سريع بأقل تكلفة. في المستودع ، وجدنا خوادم Supermicro التي كان كل شيء على ما يرام باستثناء عدم وجود واجهات SFP. قررنا تثبيت Intel 520DA2 المحبوبة عليهم وواجهنا على الفور المشكلة الأولى: الآلات هي وحدة واحدة ، ولكن لا توجد رافعات. في الوقت نفسه ، لسبب ما ، لم يكن سلاحنا في قوائم التوافق ، ولكن كان هناك الكثير من الناهضين الأصليين.
بناء على نصيحة مديرة التطوير المبتكر ، ميشا سولوفيوف ، قمنا بربط كل شيء مع رافعات مرنة لمزارع التعدين. وكانت النتيجة "جثة":
8. النموذج رقم 1اضطررت إلى استخدام الشريط الكهربائي الأزرق الشهير في بعض الأماكن ، حتى لا قدر الله على القيام بأي شيء قصير. نعم ، المزرعة الجماعية. نعم ، بالخجل. لكن مثل هذا "التكوين" مقبول تمامًا لفترة التجربة.
9. منظر خلفيما جاء من هذا واضح في لقطة شاشة iperf:
10. في الواقع هذه ليست لقطة شاشة :)المقاييس مثيرة جدا للاهتمام ، أليس كذلك؟ لذلك كنا حزينين. في البداية ، فكرنا في رقائق التجسس ، وقمنا بتفكيك كل شيء وتقويمه.
11. للوهلة الأولى ، لا توجد رقائق تجسس هنااستذكروا مسار الفيزياء: التداخل الكهرومغناطيسي ، إشارات عالية التردد ، وما إلى ذلك ... بالطبع ، لمواصلة التجربة مع هذه الكمية والنوعية من "المزرعة الجماعية" لم يكن له معنى. لذلك قمنا في النهاية بفصل النظام وإعادة الخوادم إلى مكانها.
التجربة الثانية. سيتريكس نتسكالر MPX8005
في عملية إعادة الخوادم إلى المكان ، وجدنا أبطالًا جددًا: Citrix Netscaler MPX8005. هذه مكواة رائعة ذات علامة تجارية ، بالإضافة إلى أنها لم تستخدم أبدًا. يبدون مثل هذا:
12. الشريحة في الرف لا تناسب طولها ، لكننا قررنا تأجيلها حتى وقت لاحقتوضع المعدات في رف ، وتبديلها وتكوينها. هذه قطع حديد ممتازة "للبالغين" ، 2 فتحة SFP لكل منها 10 جيجا بايت ، HA ، خوارزميات متقدمة ، حتى L7. صحيح ، حتى 5 غيغابايت بموجب ترخيص ، لكننا ما زلنا نستخدم L3 ، ولكن لا توجد مثل هذه الحدود.
أصابع متقاطعة ، اختبار. لا توجد سرعة. على الواجهات - أخطاء صلبة حول أجهزة إرسال / استقبال غير مناسبة ، سرعة حوالي 5 جيجابت ، قطرات ثابتة. تذكروا الناهضين المرنين ، وكانوا حزينين مرة أخرى. حتى هناك ، كانت السرعة أعلى وأخطاء أقل. نبدأ في فهم:
show channel LA/1 1) Interface LA/1 (802.3ad Link Aggregate) #10 flags=0x4100c020 <ENABLED, UP, AGGREGATE, UP, HAMON, HEARTBEAT, 802.1q> MTU=9000, native vlan=1, MAC=XXX, uptime 0h03m23s Requested: media NONE, speed AUTO, duplex NONE, fctl NONE, throughput 160000 Link Redundancy Throughput 80000 Actual: throughput 20000 LLDP Mode: NONE RX: Pkts(9388) Bytes(557582) Errs(0) Drops(1225) Stalls(0) TX: Pkts(10514) Bytes(574232) Errs(0) Drops(0) Stalls(0) NIC: InDisc(0) OutDisc(0) Fctls(0) Stalls(0) Hangs(0) Muted(0) bandwidthHigh: 160000 Mbits/sec, bandwidthNormal: 160000 Mbits/sec. LA mode: AUTO > show interface 10/1 1) Interface 10/1 (10G Ethernet, unsupported fiber SFP+, 10 Gbit) #1 flags=0x400c020 <ENABLED, UP, BOUND to LA/1, UP, autoneg, 802.1q> LACP <Active, Long timeout, key 1, priority 32768> MTU=9000, MAC=XXX, uptime 0h05m44s Requested: media AUTO, speed AUTO, duplex AUTO, fctl OFF, throughput 0 Actual: media FIBER, speed 10000, duplex FULL, fctl OFF, throughput 10000 LLDP Mode: TRANSCEIVER, LR Priority: 1024 RX: Pkts(8921) Bytes(517626) Errs(0) Drops(585) Stalls(0) TX: Pkts(9884) Bytes(545408) Errs(0) Drops(3) Stalls(0) NIC: InDisc(0) OutDisc(0) Fctls(0) Stalls(0) Hangs(0) Muted(0) Bandwidth thresholds are not set. > show interface 10/2 1) Interface 10/2 (10G Ethernet, unsupported fiber SFP+, 10 Gbit) #0 flags=0x400c020 <ENABLED, UP, BOUND to LA/1, UP, autoneg, 802.1q> LACP <Active, Long timeout, key 1, priority 32768> MTU=9000, MAC=XXX, uptime 0h05m58s Requested: media AUTO, speed AUTO, duplex AUTO, fctl OFF, throughput 0 Actual: media FIBER, speed 10000, duplex FULL, fctl OFF, throughput 10000 LLDP Mode: TRANSCEIVER, LR Priority: 1024 RX: Pkts(8944) Bytes(530975) Errs(0) Drops(911) Stalls(0) TX: Pkts(10819) Bytes(785347) Errs(0) Drops(3) Stalls(0) NIC: InDisc(0) OutDisc(0) Fctls(0) Stalls(0) Hangs(0) Muted(0) Bandwidth thresholds are not set.
استخدمنا أجهزة الإرسال والاستقبال من Cisco الأصلية ، والتي ، من الناحية النظرية ، لا ينبغي أن تنشأ أي مشاكل. حتى أنهم تحققوا من البصريات ، وفي حالة فقط ، قاموا بتغيير أجهزة الإرسال والاستقبال - نفس الصورة. سيارتنا لا تذهب ، وهذا كل شيء! نحن ننظر عن كثب.
أجهزة الإرسال والاستقبال "الجميلة" من Cisco:
ix1: <Intel(R) PRO/10GbE PCI-Express Network Driver, Version - 2.7.4> port 0xe000-0xe01f mem 0xf7800000-0xf781ffff,0xf7840000-0xf7843fff irq 17 at device 0.1 on pci1 ix1: ixgbe bus speed = 5.0Gbps and PCIe lane width = 8 SFP+/SFP, vendor CISCO-AVAGO , part number XXX , 10G 0x10 1G 0x00 CT 0x00 *** Unsupported SFP+/SFP type!
لم يتم الكشف عن أجهزة الإرسال والاستقبال بشكل طبيعي ، غير مدعومة!
كان علي أن أجد أكثر "الأقارب":
13. معظم أجهزة الإرسال والاستقبال المحلية في الغرب المتوحش ix0: <Intel(R) PRO/10GbE PCI-Express Network Driver, Version - 2.7.4> port 0xe020-0xe03f mem 0xf7820000-0xf783ffff,0xf7844000-0xf7847fff irq 16 at device 0.0 on pci1 platform: Manufacturer Citrix Inc. platform: NSMPX-8000-10G 4*CPU+6*E1K+2*IX+1*E1K+4*CVM 1620 675320 (28), manufactured at 8/10/2015 platform: serial 4NP602H7H0 platform: sysid 675320 - NSMPX-8000-10G 4*CPU+6*E1K+2*IX+1*E1K+4*CVM 1620 ix0: ixgbe bus speed = 5.0Gbps and PCIe lane width = 8 SFP+/SFP, vendor CITRIX , part number XXX , 10G 0x10 1G 0x01 CT 0x00 ix0: [ITHREAD] 10/2: Ethernet address: 00:e0:ed:45:39:f8 ix1: <Intel(R) PRO/10GbE PCI-Express Network Driver, Version - 2.7.4> port 0xe000-0xe01f mem 0xf7800000-0xf781ffff,0xf7840000-0xf7843fff irq 17 at device 0.1 on pci1 ix1: ixgbe bus speed = 5.0Gbps and PCIe lane width = 8 SFP+/SFP, vendor CITRIX , part number XXX , 10G 0x10 1G 0x01 CT 0x00
تم تحديد أجهزة الإرسال والاستقبال هذه دون أي مشاكل ، ولكن هذا لم ينقذ الوضع. تحديث البرامج الثابتة - نفس الشيء. قرر دعم Citrix التزام الهدوء بلباقة (لا ، ليس بسبب نسب جهاز الإرسال والاستقبال).
أخذنا نفسا عميقا ودفننا في مواصفات الأجهزة. اتضح أن الإجابة طوال هذا الوقت كانت أمام أعيننا:
سرعة ناقل ixgbe = 5.0Gbps وعرض حارة PCIe = 8. هذه مشكلة في البطاقة. تفتقر هي نفسها إلى سرعة PCIe. يتمتع Citrix بأقصى أداء لفتحة PCI-e لبطاقة بها أجهزة إرسال واستقبال تبلغ
5.0 جيجابت في
الثانية ، وهو يصرخ لنا طوال هذا الوقت. مثل Citrix على MPX8015 (الأمر نفسه تمامًا في الأجهزة!) أرادوا إعطاء 15 غيغابايت ، ليس من الواضح. لكننا فهمنا سبب وجود مثل هذه الموازين "الرائعة" طوال الوقت في مستودع. لا يمكنهم العمل بشكل صحيح مع روابط 10G من حيث المبدأ.
التجربة الأخيرة. نستخدم المكواة الصحيحة ونجعلها جميلة
هنا ، انتهى صبرنا بإيماننا بالإنسانية ، واضطررنا إلى استخدام تقنية "الغيار" للحصول على أجهزة عادية في شكل HP ProLiant DL360 G9 من الصور أعلاه. لم يبدأوا في ترتيب المفاجآت لنا ، بل قاموا بتنزيل 10G ولا يشكون. :)
اختبار الحمل
نظرًا لأننا لا نقبل نهج hujak-hujak والإنتاج ، ونعلم من التجربة أن نظامًا لم يتم اختباره بعد التجميع مع ضمان 100 ٪ تقريبًا لن يكون قابلاً للتشغيل ، قررنا إجراء اختبار الحمل. بالإضافة إلى ذلك ، بمساعدته يمكنك القيام ببعض الضبط للمستقبل.
لتوليد الحمل ، تم اختيار الأداة المعتادة - Apache Jmetr. إنه وحده جيد جدًا ، حيث
كتبت بضع مقالات مرة أخرى ، وهذا أحد الحلول الأكثر مرونة في السوق ، على الرغم من أن Java تحب تناول الطعام. للعمل مع S3 ، استخدمنا وحدة مكتوبة ذاتيًا باستخدام AWS SDK ، أيضًا في Java. في الاختبارات ، تمكنا من تحقيق سرعة 12.5 جيجابت في الثانية للكتابة للملفات التي تزيد عن 250 ميجابايت مع التحميل المتوازي بقطع 5 ميجابايت ، والملفات الأقل من 5 ميجابايت - معالجة حوالي 3000 طلب HTTP في الثانية. عند تشغيل كلا الاختبارين بالتوازي ، اتضح أن حوالي 11 غيغابت و 2200 طلب في الثانية. في الوقت نفسه ، هناك إمكانية لتحسين العمل بحمل مختلط وبأشياء صغيرة. قمنا "بدفن" في وحدة المعالجة المركزية ، والمقبس الثاني مجاني. على مولد الحمل ، تم أخذ ملفات الاختبار من ذاكرة الوصول العشوائي من أجل استبعاد التأثير على نتائج النظام الفرعي للقرص للمولد نفسه. بالنسبة للاختبارات ، تذكر حب Java لذاكرة الوصول العشوائي والحاجة إلى العمل مع عدد كبير من الخيوط أثناء التحميل المتوازي ، استخدمنا خادم HP DL980 g7 كمولد. هذا هو خادم ثماني وحدات مع 8 معالجات Intel E7-4870 و 512 جيجابايت من ذاكرة الوصول العشوائي على متن الطائرة.
داخل الفريق ، تمسك لقب محب بيموث له.
14. فرس النهر لدينا. صحيح ، شيء مشابه؟
15. المنظر الخلفي. الكابلات المخيفة في المنتصف السفلي هي وصلة متصالبة لحافلة الجسر الداخلية
16. يعد هذا أحد هدفي الخادم. لكل منها 4 معالجات و 16 فتحة 16 غيغابايت من ذاكرة الوصول العشوائي
17. لاستخدام Htop بشكل مريح في وحدة التحكم الخاصة بهذا الخادم ، فأنت بحاجة إلى شاشة كبيرة :)من الناحية العملية ، تم تحميل اختبار مختلط بشكل ملحوظ حتى مثل هذا الخادم القوي.
للوصول إلى نتائج الأداء التي تم الحصول عليها ، كان علينا نقل الشبكة الداخلية للكتلة إلى إطارات جامبو 9k وضبط مجموعة الشبكة من الموازنات وعقد العمل بشكل طفيف (نستخدم CentOS Linux) ، بالإضافة إلى تحسين عدد من معلمات النواة الأخرى في عقد العمل:
cat /etc/sysctl.conf … kernel.printk = 3 4 1 7 read_ahead_kb = 1024 write_expire = 250 read_expire = 250 fifo_batch = 128 front_merges = 0 net.core.wmem_default = 16777216 net.core.wmem_max = 16777216 net.core.rmem_default = 16777216 net.core.rmem_max = 16777216 net.core.somaxconn = 5120 net.core.netdev_max_backlog = 50000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_max_syn_backlog = 30000 net.ipv4.tcp_max_tw_buckets = 2000000 fs.file-max = 196608 vm.overcommit_memory = 1 vm.overcommit_ratio = 100 vm.max_map_count = 65536 vm.dirty_ratio = 40 vm.dirty_background_ratio = 5 vm.dirty_expire_centisecs = 100 vm.dirty_writeback_centisecs = 100 net.ipv4.tcp_fin_timeout=10 net.ipv4.tcp_congestion_control=htcp net.ipv4.netfilter.ip_conntrack_max=1048576 net.core.rmem_default=65536 net.core.wmem_default=65536 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.ip_local_port_range=1024 65535
الإعدادات الرئيسية التي تم ضبطها هي حجم المخازن المؤقتة ، وعدد اتصالات الشبكة ، وعدد الاتصالات بالمنفذ والاتصالات التي تتم مراقبتها بواسطة جدران الحماية ، وكذلك المهلات.
Cisco C3750 + LACP = ألمعيب آخر في أداء الشبكة هو موازنة التحميل عند استخدام LACP / LAGp. لسوء الحظ ، لا تستطيع Cisco 3750s موازنة الحمل عبر المنافذ ، فقط في عناوين المصدر والوجهة. لتحقيق التوازن الصحيح في حركة المرور ، اضطررت إلى تعليق 12 عنوان IP على واجهات ربط العقد العاملة ، "التطلع" نحو العملاء. بشكل مشروط ، 3 لكل ارتباط مادي. باستخدام هذا التكوين ، كان من الممكن الاستغناء عن LACP على الواجهات "الخارجية" لعقد العمل ، حيث يتم تحديد جميع العناوين في تكوين Nginx ، ولكن بعد ذلك إذا تم فقد الارتباط ، فسنقوم تلقائيًا بتقليل وزن العقدة في الموازنة. باستخدام "التفريغ" ، يتيح لك رابط LACP إمكانية الوصول الكامل إلى جميع العناوين.
bond0.10 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 RX packets:2390824140 errors:0 dropped:0 overruns:0 frame:0 TX packets:947068357 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:18794424755066 (17.0 TiB) TX bytes:246433289523 (229.5 GiB) bond0.10:0 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:1 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:2 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:3 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:4 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:5 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:6 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:7 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:8 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:9 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XXMask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1 bond0.10:10 Link encap:Ethernet HWaddr XXX inet addr:192.168.XX Bcast:192.168.XX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1
الاختبار الوظيفي
بعد الانتهاء من العمل في المستودع ، التقينا بخدمة flexify.io. أنها تساعد على تسهيل الهجرة بين مخازن الكائنات المختلفة. ولكن لكي تصبح شريكًا في Flexify ، يجب أن تجتاز اختبارات جادة. "لماذا لا؟" - اعتقدنا. يُعد اختبار الجهات الخارجية دائمًا تجربة مجزية.
تتمثل المهمة الرئيسية للاختبارات في التحقق من تشغيل طرق بروتوكول S3 من خلال وكلاءها فيما يتعلق بالتشكيلات المختلفة ، والتي من بينها يمكن أن تكون هناك أي مجموعة من الدلاء المتوافقة مع S3 مدعومة من قبل مزود الخدمة.
بادئ ذي بدء ، يتم فحص الطرق التي تعمل مع الكائنات في الدلو. تم اختبار التخزين لدينا باستخدام مجموعة واسعة من بيانات الاختبار ، وتم اختبار سلوك الطرق لكائنات ذات أحجام ومحتويات مختلفة ، للمفاتيح التي تحتوي على جميع أنواع مجموعات أحرف Unicode.
في الاختبارات السلبية ، حاولوا نقل بيانات غير صالحة كلما أمكن ذلك. تم إيلاء اهتمام خاص لسلامة البيانات في هذه العملية.
تم اختبار طرق العمل مع الدلاء ، ولكن بشكل رئيسي في سيناريوهات إيجابية. كان الهدف من هذه الاختبارات هو التحقق من أن استخدام الأساليب من خلال وكيل لا ينطوي على أي مشاكل خطيرة ، على سبيل المثال ، تلف البيانات أو تعطلها.
يمكن الحكم على مدى التغطية من خلال الاختبارات التي تم استخدامها من خلال الوكلاء وبشكل مباشر. معظم الاختبارات ، وخاصة تلك التي تعمل مع الكائنات ، يتم تحديد معلماتها واختبار عدد كبير من الكائنات والنطاقات المختلفة ، إلخ.
الاختبارات المنفذة للأشياءطلب كائن GET بدون معلمات اختيارية
طلب كائن GET multithread
طلب كائن GET إلى كائن مشفر مع معلمات sse المتوفرة
طلب كائن GET إلى كائن مشفر بدون معلمات sse المتوفرة
طلب كائن GET بنطاق يتقاطع مع نطاق بايت الملف
طلب كائن GET مع نطاق خارج نطاق بايتات الملف
طلب كائن GET بمعلمة نطاق لاحقة
طلب كائن GET بمعلمة نطاق لاحقة خارج نطاق نطاق بايت الملف
طلب كائن GET مع معلمة نطاق غير صالحة
طلب رأس الكائن إلى كائن موجود
طلب رأس الكائن إلى كائن تم حذفه مؤخرًا
طلب كائن الرأس بمفتاح لم يكن موجودًا أبدًا في دلو
طلب رأس الكائن إلى كائن مشفر مع معلمات sse المتوفرة
طلب الرأس الرئيسي لكائن مشفر بدون أي معلمات sse
طلب كائنات القائمة
طلب كائنات قائمة v2
طلب قائمة الكائنات مع معلمة Marker المتوفرة
طلب قائمة الكائنات مع معلمة البادئة المقدمة
طلب كائنات القائمة مع معلمات Marker و Prefix المتوفرة
تلقي جميع الكائنات في نقطة النهاية باستخدام List Objects مع معلمات Marker و Prefix المتوفرة
طلب كائنات القائمة مع معلمة محدد تخطي
طلب كائنات القائمة مع معلمة Marker الممررة ، ولكن مع معلمة Delimiter التي تم تخطيها
طلب كائنات القائمة مع بادئة غير موجودة مرت
طلب قائمة الكائنات مع علامة غير موجودة تم تمريرها
تحميل متعدد الأجزاء باستخدام أسلوب upload_file () أصلي
تحميل متعدد الأجزاء باستخدام طريقة upload_fileobj () أصلية
تحميل متعدد الأجزاء بطريقة مخصصة
إيقاف التحميل متعدد الأجزاء بطريقة abort_multipart_upload ()
تنفيذ طريقة abort_multipart_upload () مع معرّف رفع غير صحيح
تنفيذ طريقة abort_multipart_upload () باستخدام مفتاح ومعرف رفع غير صحيحين
تحميل ملفات متعددة الأجزاء من نفس المفتاح في وقت واحد. تم تحميل الملف الثاني قبل الأول
تحميل ملفات متعددة الأجزاء من نفس المفتاح في وقت واحد. تم تحميل الملف الأول قبل الثاني
تحميل ملفات متعددة الأجزاء مع مفاتيح مختلفة في وقت واحد. تم تحميل الملف الأول قبل الثاني
تحميل متعدد الأجزاء بحجم جزء 512 كيلوبايت
تحميل متعدد الأجزاء بحجم جزء أكبر من الحجم الأقصى المسموح به
تحميل متعدد الأجزاء لملف بأحجام مختلفة
أدرج طلب تحميل متعدد الأجزاء
طلب ACL للكائن PUT لكائن بمعرف الممنوح المقدم
الحصول على طلب ACL للكائن لكائن له أذونات وصول إضافية ممنوحة
طريقة وضع علامات الكائن
GET طريقة وسم الكائن
طريقة حذف الكائن
طلب كائن PUT مع عدم وجود معلمات اختيارية
يطلب كائن PUT multithread
طلبات كائن PUT مع معلمات تشفير اختيارية مرت
طلبات كائن PUT مع تمرير معلمة نصية فارغة
كائن GET مع طريقة download_file () الأصلية
كائن GET مع طريقة download_fileobj () الأصلية
كائن GET مع طريقة مخصصة باستخدام نطاقات
كائن GET بالبادئة مع طريقة download_file () الأصلية
كائن GET مع بادئة مع طريقة download_fileobj () الأصلية
كائن GET مع بادئة مع طريقة مخصصة باستخدام نطاقات
حذف طلب كائن إلى كائن موجود
حذف طلب كائن إلى كائن غير موجود
طلب كائنات حذف لمجموعة مع كائنات موجودة
اختبارات محققة للجرافةضع تشفير الدلو
احصل على تشفير الجرافة
حذف تشفير الجرافة
طلب سياسة PUT Bucket
الحصول على طلب سياسة دلو إلى دلو مع سياسة
حذف طلب سياسة الجرافة إلى مجموعة من السياسات
الحصول على طلب سياسة دلو إلى دلو مع عدم وجود سياسة
حذف طلب سياسة الجرافة إلى مجموعة بدون سياسة
ضع علامات الدلو
احصل على علامات الدلو
حذف علامة دلو
إنشاء طلب دلو باسم دلو موجود
إنشاء طلب دلو باسم دلو فريد
حذف طلب الجرافة باسم الجرافة الحالي
حذف طلب دلو باسم دلو فريد
طلب ACL Bucket Bucket إلى دلو بمعرف الممنوح المقدم
الحصول على طلب ACL للكائن لكائن له أذونات وصول إضافية ممنوحة
كما قد تخمن ، هذا اختبار صعب إلى حد ما ، لكننا اجتازناه بشكل إيجابي بشكل عام. نشأت بعض المشاكل بسبب نقص الدعم لـ SSE والمدارس الصغيرة مع دعم Unicode في ذلك الوقت:
فشل التحميل مع المفاتيح التي تحتوي على:
- U + 0000-U + 001F - أول 32 حرف تحكم غير قابل للقراءة. في أمازون ، على سبيل المثال ، لا يتم سكب أول U + 0000 مباشرة.
- وكذلك U + 18D7C ، U + 18DA8 ، U + 18DB4 ، U + 18DBA ، U + 18DC4 ، U + 18DCE. هذه أيضًا شخصيات غير قابلة للقراءة ، لكن أمازون تقبلها كمفاتيح. لم تكن هناك مشاكل مع جميع الشخصيات الأخرى.
عند قراءة محتويات الجرافة ، توجد مشكلة في المفتاح 66،675 الذي يحتوي على الرمز U + FFFE. لا يمكن الحصول على قائمة كاملة بالمفاتيح في دلو يحتوي على كائن بمثل هذا المفتاح.
خلاف ذلك ، كانت الاختبارات ناجحة ، وفي نهاية سبتمبر ظهرنا في قائمة الموردين المتاحين!
خاتمة قصيرة ومكافأة للقراء
في وقت سابق ، كتبت أن Cloudian HyperStore ، على الرغم من مزاياها العديدة ، غير مغطى عمليًا في الجزء الناطق باللغة الروسية من الإنترنت.
كانت المقالة الأولى حول أساسيات العمل مع Cloudian. قمنا بتفكيك هيكلها الداخلي وفروقها المعمارية المعمارية ونقرأ ترجمة الوثائق الرسمية.
أخبرت اليوم كيف بنينا تخزيننا الخاص وما الفوارق والمزالق التي واجهناها.
أولئك الذين يرغبون في الشعور بالأقلام ما نتحدث عنه حول مقالتين متتاليتين يمكن استخدام نموذج الملاحظات
على هذه الصفحة ومعرفة شخصيا ما هو الملح. كمعيار ، نعطي 15 غيغابايت لمدة أسبوعين مجانًا بالطبع ، مع وصول المستخدم. إذا كنت ترغب في مشاركة انطباعاتك عن العمل مع المستودع ، فاكتب إليّ في PM. :)
ولأولئك الذين لا يكفيون 15 جيجابايت لمدة أسبوعين ، لدينا مهمة
صغيرة! في الصور في المقالة وضعنا ثلاثة أفراس النهر. سيتلقى أول 50 شخصًا يجدونها 30 جيجابايت لمدة 4 أسابيع. للحصول على اختبار موسع ، اكتب في التعليقات أرقام الصور حيث اختبأ فرس النهر ، وتقدم بطلب للحصول على الرابط أعلاه. لا تنسى تضمين رابط لتعليقك في التطبيق.
بالتقاليد ، إذا كان لديك أي أسئلة ، اطرحها في التعليقات.
سأكون سعيدا للرد عليها.