غير قادر على بدء تشغيل 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 بشكل خاطئ مستخدمو Edge Private Cloud
منفذ ZooKeeper قيد الاستخدام مستخدمو Edge Private Cloud
رقم تعريف العملية غير صحيح في ملف apigee-zookeeper.pid مستخدمو Edge Private Cloud
فشل في انتخابات قائد فريق ZooKeeper مستخدمو Edge Private Cloud

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

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

    على سبيل المثال، في ZooKeeper server.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 ودوِّن server.# لعقدة 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
    

تعذّر انتخابات رئيس حديقة ZooKeeper

التشخيص

لتشخيص التشخيص:

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

الدقة

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

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