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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

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

رسائل الخطأ

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

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

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

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

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

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

تم إعدادها بشكل خاطئ لـ ZooKeeper myid

تقدم الأقسام التالية نظرة عامة على ملف 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 المحدّدة هذه. سيحتوي معرّف الخادم 1 على النص "1" ولا شيء آخر. ويجب أن يكون المعرّف فريدًا داخل المجموعة ويجب أن تتراوح قيمته بين 1 و255.

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

    $ cat myid
    1
    

التشخيص

  1. تحقَّق من سجلّ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log بحثًا عن الأخطاء.
  2. إذا ظهرت رسالة WARN بشكل مشابه لرسالة "الاتصال معطل للمعرّف #، المعرّف = #"، كما هو موضّح في الشكل أدناه، قد يكون السبب المحتمل لهذه المشكلة هو أنّ رقم الخادم في ملف 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 لمعرفة ما إذا كان النص في هذا الملف يتطابق مع الخادم.# مذكور في الخطوة رقم 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 أدناه للتأكّد من أنّ منفذ ZooKeeper رقم 2181 قيد الاستخدام في عملية أخرى:
    netstat -an | grep 2181
    

درجة الدقّة

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

  1. يمكنك استخدام الأمر netstat للعثور على العملية التي تحتفظ بالمنفذ 2181. إيقاف العملية التي تستخدم المنفذ ZooKeeper رقم 2181:
    $ 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 يحتوي على معرّف 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
    

فشل انتخابات حديقة الحيوانات الزعيم

التشخيص

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

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

درجة الدقّة

عادةً ما يحدث تعذُّر الانتخابات في ZooKeeper بسبب ضبط myid بشكل خاطئ. يمكنك استخدام درجة الدقة في ZooKeeper myid الذي تم إعداده بشكلٍ خاطئ لمعالجة فشل الانتخابات.

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