غير قادر على بدء تشغيل Zookeeper

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

يتعذّر بدء عملية ZooKeeper.

رسائل الخطأ

عند محاولة بدء عملية ZooKeeper، يتم عرض رسالة الخطأ التالية التي تشير إلى تعذُّر بدء ZooKeeper:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

الأسباب المحتملة

يعرض الجدول التالي الأسباب المحتملة لهذه المشكلة:

السبب موجَّه إلى
تم إعداد myid في ZooKeeper بشكلٍ خاطئ مستخدمو Edge Private Cloud
منفذ ZooKeeper قيد الاستخدام مستخدمو Edge Private Cloud
معرّف العملية غير صحيح في ملف apigee-zookeeper.pid مستخدمو Edge Private Cloud
تعذُّر اختيار قائد ZooKeeper مستخدمو Edge Private Cloud

انقر على رابط في الجدول للاطّلاع على الحلول المحتملة لهذا السبب.

تم إعداد myid في ZooKeeper بشكلٍ خاطئ

تقدّم الأقسام التالية نظرة عامة على ملف myid وتوضّح كيفية تشخيص مشاكل الإعداد الخاطئ وحلّها.

نظرة عامة على ملف myid

يتضمّن كل عقدة ZooKeeper ملفَين:

  1. ملف /opt/apigee/apigee-zookeeper/conf/zoo.cfg الذي يحتوي على قائمة بعناوين IP لجميع عُقد ZooKeeper في المجموعة

    على سبيل المثال، إذا كان /opt/apigee/apigee-zookeeper/conf/zoo.cfg يحتوي على عناوين IP لـ 3 عقد ZooKeeper تشكّل جزءًا من المجموعة على النحو التالي:

    server.1=11.11.11.11:2888:3888
    server.2=22.22.22.22:2888:3888
    server.3=33.33.33.33:2888:3888
  2. يحتوي الملف /opt/apigee/data/apigee-zookeeper/data/myid على سطر نصي واحد يتوافق مع رقم الخادم لعقدة ZooKeeper المعيّنة. سيحتوي ملف myid الخاص بالخادم 1 على النص "1" فقط. يجب أن يكون المعرّف فريدًا ضمن المجموعة، وأن تتراوح قيمته بين 1 و255.

    على سبيل المثال، على الخادم 1 في ZooKeeper، يجب أن يحتوي الملف /opt/apigee/data/apigee-zookeeper/data/myid على النص 1 فقط كما هو موضّح أدناه:

    $ cat myid
    1

التشخيص

  1. تحقَّق من سجلّ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log بحثًا عن أخطاء.
  2. إذا ظهرت لك رسالة تحذير مشابهة للرسالة "تم قطع الاتصال برقم التعريف #، رقم التعريف الخاص بي = #"، كما هو موضّح في الشكل أدناه، قد يكون السبب المحتمل لهذه المشكلة هو أنّ الخادم # في ملف myid تم إعداده بشكل غير صحيح أو تالف.
    [myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] -
      Connection broken for id 2, my id = 2, error = java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:375)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.
          run(QuorumCnxManager.java:747)
  3. تحقّق من ملف /opt/apigee/apigee-zookeeper/conf/zoo.cfg ودوِّن رقم الخادم الخاص بعقدة ZooKeeper الحالية.
  4. تحقَّق من الملف /opt/apigee/data/apigee-zookeeper/data/myid لمعرفة ما إذا كان النص في هذا الملف يتطابق مع server.# المذكور في الخطوة 2.
  5. في حال عدم التطابق، تكون قد حدّدت سبب تعذُّر بدء تشغيل ZooKeeper.

الدقة

في حال تم إعداد ملف myid بشكل غير صحيح، عدِّل ملف myid واستبدِل القيمة بنص صحيح يمثّل المَعلمة server.# في ملف zoo.cfg.

منفذ ZooKeeper قيد الاستخدام

التشخيص

  1. تحقَّق من سجلّ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log بحثًا عن الأخطاء.
  2. إذا لاحظت الاستثناء java.net.BindException: Address already in use أثناء الربط بالمنفذ رقم 2181، كما هو موضّح في الشكل أدناه، يشير ذلك إلى أنّ منفذ ZooKeeper رقم 2181 مستخدَم من خلال عملية أخرى. وبالتالي، تعذّر بدء ZooKeeper.
    2017-04-26 07:00:10,420 [myid:3] - INFO  [main:NIOServerCnxnFactory@94] -
      binding to port 0.0.0.0/0.0.0.0:2181
    2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] -
      Unexpected exception, exiting abnormally
      java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
  3. استخدِم أمر netstat أدناه للتأكّد من أنّ المنفذ 2181 في ZooKeeper مستخدَم بالفعل من خلال عملية أخرى:
    netstat -an | grep 2181

الدقة

إذا كان المنفذ 2181 في ZooKeeper لا يزال قيد الاستخدام، اتّبِع الخطوات التالية لحلّ هذه المشكلة:

  1. استخدِم الأمر netstat للعثور على العملية التي تستخدم المنفذ 2181. أوقِف العملية التي تستخدم المنفذ 2181 في ZooKeeper:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
  2. حذف ملفات pid والقفل إذا كانت متوفّرة:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
  3. أعِد تشغيل ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart

معرّف العملية غير صحيح في ملف apigee-zookeeper.pid

عند محاولة إيقاف/إعادة تشغيل ZooKeeper، قد يتعذّر ذلك لأنّ الملف apigee-zookeeper.pid يحتوي على رقم تعريف عملية قديم/غير صحيح وليس رقم تعريف عملية ZooKeeper قيد التشغيل حاليًا. قد يحدث ذلك إذا توقفت عملية ZooKeeper بشكل غير متوقّع أو مفاجئ لسبب ما ولم يتم حذف الملف apigee-zookeeper.pid.

التشخيص

  1. احصل على رقم تعريف عملية ZooKeeper الجارية حاليًا من خلال تنفيذ الأمر ps:
    ps -ef | grep zookeeper
  2. تحقَّق مما إذا كان الملف /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid متوفّرًا. إذا كان متوفّرًا، سجِّل رقم تعريف العملية المكتوب في هذا الملف.
  3. قارِن بين أرقام تعريف العمليات التي تم الحصول عليها من الخطوتين 1 و2. إذا كانا مختلفَين، يكون السبب في هذه المشكلة هو إدخال رقم تعريف عملية غير صحيح في apigee-zookeeper.pid file.

الدقة

  1. عدِّل ملف apigee-zookeeper.pid واستبدِل رقم تعريف العملية غير الصحيح برقم تعريف العملية الصحيح الذي تم الحصول عليه من الأمر ps (الخطوة 1 أعلاه).
  2. أعِد تشغيل ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart

ZooKeeper Leader Election Failure

التشخيص

لتشخيص المشكلة:

  1. تحقَّق من سجلّ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log بحثًا عن أخطاء.
  2. تحقَّق مما إذا كانت هناك أي تغييرات في الإعدادات قد تؤدي إلى تعذُّر اختيار ZooKeeper للقائد.
  3. تحقَّق من /opt/apigee/apigee-zookeeper/conf/zoo.cfg وتأكَّد من أنّ جميع ZooKeepers في المجموعة تتضمّن العدد وعناوين IP المناسبة للمعلمة server.#. يُرجى أيضًا العِلم أنّه لكي تنجح عملية اختيار القائد، يجب أن يكون هناك 3 مصوّتين على الأقل، ويجب أن يكون عدد المصوّتين فرديًا. إذا كان عدد المصوّتين قليلاً جدًا، مثلاً مصوّتَين فقط، لا يمكن الوصول إلى النصاب القانوني لتحديد قائد من بين مصوّتَين فقط.

الدقة

عادةً، يحدث تعذُّر اختيار ZooKeeper بسبب إعداد myid بشكلٍ غير صحيح. استخدِم الحلّ الوارد في myid الذي تم إعداده بشكل غير صحيح في ZooKeeper لمعالجة تعذُّر الانتخاب.

في حال استمرار المشكلة والحاجة إلى تشخيص إضافي، يُرجى التواصل مع فريق دعم Apigee Edge.