قادر به راه اندازی 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]

علل احتمالی

جدول زیر دلایل احتمالی این مشکل را فهرست می کند:

علت برای
Myid ZooKeeper اشتباه پیکربندی شده است کاربران Edge Private Cloud
درگاه ZooKeeper در حال استفاده است کاربران Edge Private Cloud
شناسه فرآیند نادرست در فایل apigee-zookeeper.pid کاربران Edge Private Cloud
شکست در انتخابات رهبر باغ وحش کاربران 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 داشته باشد.

    برای مثال، در سرور 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 مشابه "Connection break for id #, my id = #" را مشاهده کردید، دلیل احتمالی این مشکل می تواند پیکربندی اشتباه یا خراب بودن سرور # در فایل 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 را ویرایش کنید و مقدار آن را با یک متن صحیح که پارامتر سرور.# را در zoo.cfg نشان می‌دهد جایگزین کنید.

درگاه ZooKeeper در حال استفاده است

تشخیص

  1. ZooKeeper log /opt/apigee/var/log/apigee-zookeeper/zookeeper.log را برای خطا بررسی کنید.
  2. اگر به استثنای java.net.BindException: Address already in use ، همانطور که در شکل زیر نشان داده شده است، نشان می دهد که پورت 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 حاوی پید قدیمی‌تر/نادرست است و نه مربوط به فرآیند در حال اجرا ZooKeeper. اگر فرآیند ZooKeeper به دلایلی به طور غیرمنتظره یا ناگهانی خاتمه یابد و فایل apigee-zookeeper.pid حذف نشده باشد، ممکن است این اتفاق بیفتد.

تشخیص

  1. با اجرای دستور ps شناسه فرآیند پروسه ZooKeeper در حال اجرا را دریافت کنید:
    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 رای دهنده وجود داشته باشد و تعداد رای دهندگان باید فرد باشد. اگر تعداد رای دهندگان خیلی کم باشد، مانند فقط 2 رای دهنده، نمی توان به حد نصاب رسید تا یک رهبر را از بین 2 رای دهنده تعیین کند.

قطعنامه

به طور معمول، شکست در انتخابات ZooKeeper به دلیل پیکربندی اشتباه myid ایجاد می شود. از رزولوشن موجود در Myid ZooKeeper Misconfigured برای رسیدگی به شکست انتخابات استفاده کنید.

اگر مشکل ادامه داشت و نیاز به تشخیص بیشتر است، با پشتیبانی Apigee Edge تماس بگیرید.