لمحة عن صيانة ZooKeeper

تم تصميم مجموعات ZooKeeper لتظل تعمل بدون فقدان البيانات، على الرغم من فقدان عقدة واحدة أو أكثر من عقد ZooKeeper. ويمكن استخدام هذه المرونة بفعالية لإجراء الصيانة على عُقد ZooKeeper بدون توقّف النظام.

لمحة عن ZooKeeper وEdge

في Edge، تحتوي عُقد ZooKeeper على بيانات الإعدادات حول الموقع الجغرافي وإعدادات مكوّنات Edge المختلفة، وتُعلم المكوّنات المختلفة بتغييرات الإعدادات. تستخدم جميع مخططات Edge المتوافقة لنظام الإنتاج ثلاث عُقد ZooKeeper على الأقل.

استخدِم السمتَين ZK_HOSTS وZK_CLIENT_HOSTS في ملف إعداد Edge لتحديد عُقد ZooKeeper. على سبيل المثال:

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

المكان:

  • يحدّد ZK_HOSTS عناوين IP لعُقد ZooKeeper. يجب إدراج عناوين IP بالترتيب نفسه على جميع عُقد ZooKeeper.

    في بيئة مراكز بيانات متعددة، أدرِج جميع عُقد ZooKeeper من جميع مراكز البيانات.

  • يحدّد ZK_CLIENT_HOSTS عناوين IP لعُقد ZooKeeper التي يستخدمها مركز البيانات هذا فقط. يجب إدراج عناوين IP بالترتيب نفسه على جميع عُقد ZooKeeper في مركز البيانات.

    في عملية تثبيت واحدة لمركز البيانات، تكون هذه العُقد هي نفسها التي يحدّدها ZK_HOSTS. في بيئة مراكز بيانات متعددة، يجب أن يسرد ملف إعداد Edge لكل مركز بيانات عُقد ZooKeeper لمركز البيانات هذا فقط.

By default, all ZooKeeper nodes are designated as voter nodes. وهذا يعني أنّ جميع العُقد تشارك في اختيار قائد ZooKeeper. يمكنك تضمين المُعدِّل :observer مع ZK_HOSTS للإشارة إلى أنّ العقدة هي عقدة مراقبة وليست عقدة تصويت. لا تشارك عقدة المراقبة في انتخاب القائد.

عادةً ما تحدّد المُعدِّل :observer عند إنشاء عدة مراكز بيانات Edge، أو عندما يحتوي مركز بيانات واحد على عدد كبير من عُقد ZooKeeper. على سبيل المثال، في عملية تثبيت Edge على 12 مضيفًا مع مركزَي بيانات، يكون ZooKeeper على العقدة 9 في مركز البيانات 2 هو المراقب:

بعد ذلك، يمكنك استخدام الإعدادات التالية في ملف الإعداد لمركز البيانات 1:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

وبالنسبة إلى مركز البيانات 2:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

تحتوي الأقسام التالية على مزيد من التفاصيل حول العُقد القائدة والمصوّتة والمراقِبة، وتوضّح الاعتبارات المتعلّقة بإضافة العُقد المصوّتة والمراقِبة.

لمحة عن القادة والمتابعين والمصوّتين والمراقبين

في عملية تثبيت ZooKeeper متعددة العُقد، يتم تحديد إحدى العُقد على أنّها الرئيسية. يتم تصنيف جميع عُقد ZooKeeper الأخرى على أنّها تابعة. في حين أن عمليات القراءة يمكن أن تحدث من أي عقدة ZooKeeper، يتم إعادة توجيه جميع طلبات الكتابة إلى القائد. على سبيل المثال، تتم إضافة معالج رسائل جديد إلى Edge. تتم كتابة هذه المعلومات إلى قائد ZooKeeper. بعد ذلك، تنسخ جميع المتابِعات البيانات.

في وقت تثبيت Edge، يمكنك تحديد كل عقدة ZooKeeper كمصوّت أو كمراقب. يتم بعد ذلك انتخاب القائد من قِبل جميع عُقد ZooKeeper التي يحق لها التصويت. الشرط الوحيد لانتخاب قائد هو أن يكون هناك نصاب قانوني من عُقد ناخبي ZooKeeper العاملة المتاحة. يعني النصاب القانوني أنّ أكثر من نصف جميع عُقد ZooKeeper للناخبين، في جميع مراكز البيانات، تعمل.

إذا لم يتوفّر نصاب قانوني من عُقد التصويت، لا يمكن انتخاب قائد. في هذا السيناريو، لا يمكن لـ Zookeeper معالجة الطلبات. وهذا يعني أنّه لا يمكنك إرسال طلب إلى خادم إدارة Edge أو معالجة طلبات بيانات من واجهة برمجة التطبيقات أو تسجيل الدخول إلى واجهة مستخدم Edge إلى أن تتم استعادة النصاب القانوني.

على سبيل المثال، في عملية تثبيت واحدة لـ مركز بيانات:

  • لقد ثبّتّ ثلاث عُقد ZooKeeper
  • جميع عُقد ZooKeeper هي عُقد مصوّتة
  • النصاب القانوني هو عقدتان مصوّتتان تعملان
  • إذا كانت هناك عقدة مصوّت واحدة فقط متاحة، لن تتمكّن مجموعة ZooKeeper من العمل

في عملية تثبيت تتضمّن مركزَي بيانات:

  • لقد ثبّتّ ثلاث عُقد ZooKeeper لكل مركز بيانات، ليصبح المجموع ست عُقد
  • يحتوي مركز البيانات 1 على ثلاث عُقد مصوّتة
  • يحتوي مركز البيانات 2 على عقدتَي تصويت وعقدة مراقبة واحدة
  • يستند النصاب القانوني إلى الناخبين الخمسة في كلا مركزَي البيانات، وبالتالي فهو ثلاث عُقد ناخبين تعمل
  • إذا توفّرت عقدتان فقط أو أقل من عُقد التصويت، لن تتمكّن مجموعة ZooKeeper من العمل

اعتبارات لإضافة العُقد كمصوّتين أو مراقبين

قد تتطلب متطلبات النظام إضافة عُقد ZooKeeper إضافية إلى تثبيت Edge. توضّح مستندات إضافة عُقد ZooKeeper كيفية إضافة عُقد ZooKeeper إضافية إلى Edge. عند إضافة عُقد ZooKeeper، يجب مراعاة نوع العُقد التي تريد إضافتها: ناخب أو مراقب.

يجب التأكّد من توفّر عدد كافٍ من عُقد التصويت لكي تتمكّن مجموعة ZooKeeper من مواصلة العمل في حال توقُّف عقدة تصويت واحدة أو أكثر، ما يعني أنّه لا يزال هناك نصاب قانوني من عُقد التصويت المتاحة. من خلال إضافة عُقد التصويت، يمكنك زيادة حجم النصاب القانوني، وبالتالي يمكنك تحمُّل المزيد من عُقد التصويت التي تتعطّل.

ومع ذلك، يمكن أن تؤثر إضافة عُقد تصويت إضافية سلبًا في أداء الكتابة لأنّ عمليات الكتابة تتطلّب موافقة النصاب القانوني على العقدة الرئيسية. يعتمد الوقت المستغرَق لتحديد العقدة الرئيسية على عدد العُقد المصوِّتة، ويزداد هذا الوقت كلما أضفت المزيد من العُقد المصوِّتة. لذلك، لا تريد أن تجعل جميع العُقد مصوّتين.

بدلاً من إضافة عُقد مصوّتة، يمكنك إضافة عُقد مراقِبة. تؤدي إضافة عُقد المراقبة إلى زيادة أداء القراءة الإجمالي للنظام بدون زيادة عبء اختيار عقدة رئيسية لأنّ عُقد المراقبة لا تصوّت ولا تؤثر في حجم النصاب القانوني. لذلك، إذا تعطّلت عقدة مراقبة، لن يؤثر ذلك في قدرة المجموعة على اختيار قائد. ومع ذلك، يمكن أن يؤدي فقدان عُقد المراقبة إلى تدهور أداء القراءة في مجموعة ZooKeeper نظرًا لوجود عدد أقل من العُقد المتاحة لخدمة طلبات البيانات.

في مركز بيانات واحد، تنصح Apigee بألا يزيد عدد المصوّتين عن خمسة بغض النظر عن عدد عُقد المراقبين. في مركزَي بيانات، تنصح Apigee بألا يكون لديك أكثر من تسعة مصوّتين (خمسة في مركز بيانات واحد وأربعة في الآخر). يمكنك بعد ذلك إضافة أي عدد من عُقد المراقبة حسب متطلبات النظام.

إزالة عقدة Zookeeper

هناك العديد من الأسباب التي قد تدفعك إلى إزالة عقدة Zookeeper، على سبيل المثال، تلف عقدة أو تمت إضافتها إلى بيئة خاطئة.

يوضّح هذا القسم كيفية إزالة عقدة Zookeeper عندما تكون العقدة معطّلة ولا يمكن الوصول إليها.

لإزالة عقدة Zookeeper:

  1. عدِّل ملف الإعداد الصامت وأزِل عنوان IP لعقدة Zookeeper التي تريد إزالتها.
  2. أعِد تشغيل الأمر setup لـ Zookeeper لإعادة ضبط عُقد ZooKeeper المتبقية:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. أعِد تشغيل جميع عُقد Zookeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. أعِد ضبط عقدة خادم الإدارة:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. أعِد ضبط جميع أجهزة التوجيه:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. أعِد ضبط جميع معالِجات الرسائل:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. أعِد ضبط جميع عُقد Qpid:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. أعِد ضبط جميع عُقد Postgres:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

اعتبارات الصيانة

يمكنك إجراء صيانة ZooKeeper على مجموعة تعمل بكامل طاقتها بدون توقّف إذا أجريتها على عقدة واحدة في كل مرة. من خلال التأكّد من أنّ عقدة ZooKeeper واحدة فقط معطّلة في أي وقت، يمكنك ضمان توفّر نصاب قانوني دائمًا من العُقد المصوّتة لاختيار قائد.

الصيانة في مراكز بيانات متعددة

عند العمل مع عدة مراكز بيانات، تذكَّر أنّ مجموعة ZooKeeper لا تفرّق بين مراكز البيانات. تعرض مجموعات ZooKeeper جميع عُقد ZooKeeper في جميع مراكز البيانات كمجموعة واحدة.

لا يُعدّ موقع عُقد التصويت في مركز بيانات معيّن عاملاً عند إجراء ZooKeeper عمليات حسابية للنصاب القانوني. يمكن أن تتعطّل العُقد الفردية في مراكز البيانات، ولكن طالما أنّ النصاب القانوني محفوظ في المجموعة بأكملها، يظل ZooKeeper يعمل.

الآثار المترتبة على الصيانة

في أوقات مختلفة، سيتعين عليك إيقاف عقدة ZooKeeper للصيانة، إما عقدة ناخب أو عقدة مراقب. على سبيل المثال، قد تحتاج إلى ترقية إصدار Edge على العقدة، أو قد يتعطّل الجهاز الذي يستضيف ZooKeeper، أو قد تصبح العقدة غير متاحة لسبب آخر مثل خطأ في الشبكة.

إذا كانت العقدة التي تتعطّل هي عقدة مراقبة، يمكنك توقّع انخفاض طفيف في أداء مجموعة ZooKeeper إلى أن تتم استعادة العقدة. إذا كانت العقدة عقدة ناخب، فقد يؤثر ذلك على جدوى مجموعة ZooKeeper بسبب فقدان عقدة تشارك في عملية انتخاب القائد. بغض النظر عن سبب توقّف عقدة التصويت، من المهم الحفاظ على نصاب قانوني لعقد التصويت المتاحة.

إجراء الصيانة

لا تنفِّذ إجراءات الصيانة إلا بعد التأكّد من أنّ مجموعة ZooKeeper تعمل بشكل صحيح. يفترض هذا أنّ عُقد المراقبة تعمل وأنّ هناك عددًا كافيًا من عُقد التصويت المتاحة أثناء الصيانة للاحتفاظ بالنصاب القانوني.

عند استيفاء هذه الشروط، يمكن لمجموعة ZooKeeper ذات الحجم العشوائي أن تتحمّل فقدان عقدة واحدة في أي وقت بدون فقدان البيانات أو التأثير بشكل كبير في الأداء. وهذا يعني أنّه يمكنك إجراء الصيانة على أي عقدة في المجموعة طالما أنّها تتم على عقدة واحدة في كل مرة.

كجزء من إجراء الصيانة، استخدِم الإجراء التالي لتحديد نوع عقدة ZooKeeper (القائد أو الناخب أو المراقب):

  1. إذا لم يكن مثبّتًا على عقدة ZooKeeper، ثبِّت nc:
    sudo yum install nc
  2. نفِّذ أمر nc التالي على العقدة، حيث 2181 هو منفذ ZooKeeper:
    echo stat | nc localhost 2181

    من المفترض أن تظهر لك النتيجة على النموذج:

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

    في السطر Mode من الناتج للعُقد، من المفترض أن يظهر لك observer أو leader أو follower (أي ناخب ليس القائد) حسب إعدادات العقدة.

  3. كرِّر الخطوتَين 1 و2 على كل عقدة ZooKeeper.

ملخّص

أفضل طريقة لإجراء الصيانة على مجموعة ZooKeeper هي إجراؤها على عقدة واحدة في كل مرة. تذكير:

  • يجب الحفاظ على نصاب قانوني من عُقد التصويت أثناء الصيانة لضمان استمرار عمل مجموعة ZooKeeper.
  • لا يؤثر إيقاف عقدة مراقبة في النصاب القانوني أو القدرة على اختيار قائد.
  • يتم احتساب النصاب القانوني على مستوى جميع عُقد ZooKeeper في جميع مراكز البيانات.
  • يجب مواصلة الصيانة على الخادم التالي بعد تشغيل الخادم السابق.
  • استخدِم الأمر nc لفحص عقدة ZooKeeper.