لمحة عن صيانة 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 لمركز البيانات هذا فقط.

يتم تلقائيًا تصنيف جميع عُقد ZooKeeper على أنّها عُقد مصوّتة. وهذا يعني أنّ جميع العُقد تشارك في اختيار قائد ZooKeeper. يمكنك تضمين المعدِّل :observer مع ZK_HOSTS للإشارة إلى أنّ العقدة هي عقدة مراقبة وليست عقدة تصويت. لا تشارك عقدة المراقبة في اختيار العقدة الرئيسية.

عادةً ما تحدّد المعدِّل :observer عند إنشاء مراكز بيانات متعددة على مستوى الحافة، أو عندما يحتوي مركز بيانات واحد على عدد كبير من عُقد 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 Management Server أو معالجة طلبات بيانات من واجهة برمجة التطبيقات أو تسجيل الدخول إلى واجهة مستخدم New Edge إلى أن تتم استعادة النصاب القانوني.

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

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

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

  • لقد ثبّتّ ثلاث عُقد 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.