لمحة عن صيانة 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 عند إنشاء بيانات 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.