قادر به راه اندازی 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 به اشتباه پیکربندی شده است کاربران فضای ابری خصوصی اج
پورت ZooKeeper در حال استفاده است کاربران فضای ابری خصوصی اج
شناسه فرآیند نادرست در فایل apigee-zookeeper.pid کاربران فضای ابری خصوصی اج
شکست در انتخابات رهبری باغ وحش کاربران فضای ابری خصوصی اج

برای مشاهده راه‌حل‌های ممکن برای آن علت، روی پیوندی در جدول کلیک کنید.

شناسه منِ 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 سرور ۱ شامل متن "۱" خواهد بود و هیچ چیز دیگری ندارد. این شناسه باید در داخل مجموعه منحصر به فرد باشد و مقداری بین ۱ تا ۲۵۵ داشته باشد.

    برای مثال، در ZooKeeper server.1، فایل /opt/apigee/data/apigee-zookeeper/data/myid باید فقط شامل متن ۱ باشد، همانطور که در زیر نشان داده شده است:

    $ 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 را بررسی کنید و server.# مربوط به گره فعلی ZooKeeper را یادداشت کنید.
  4. فایل /opt/apigee/data/apigee-zookeeper/data/myid را بررسی کنید و ببینید آیا متن موجود در این فایل با متن سرور مطابقت دارد یا خیر.# در مرحله ۲ ذکر شده است.
  5. اگر عدم تطابقی وجود داشته باشد، شما علت عدم شروع به کار ZooKeeper را شناسایی کرده‌اید.

وضوح تصویر

اگر فایل myid به اشتباه پیکربندی شده است، فایل myid را ویرایش کنید و مقدار آن را با یک متن صحیح که نشان‌دهنده پارامتر server.# در فایل zoo.cfg است، جایگزین کنید.

پورت ZooKeeper در حال استفاده است

تشخیص

  1. برای یافتن خطاها، فایل /opt/apigee/var/log/apigee-zookeeper/zookeeper.log مربوط به ZooKeeper را بررسی کنید.
  2. اگر متوجه استثنای java.net.BindException: Address already in use هنگام اتصال به پورت #۲۱۸۱ شدید، همانطور که در شکل زیر نشان داده شده است، نشان می‌دهد که پورت ۲۱۸۱ ZooKeeper توسط فرآیند دیگری در حال استفاده است. از این رو، 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 واقعاً توسط فرآیند دیگری در حال استفاده است، استفاده کنید:
    netstat -an | grep 2181

وضوح تصویر

اگر پورت ۲۱۸۱ ZooKeeper هنوز در حال استفاده است، مراحل زیر را برای رفع این مشکل دنبال کنید:

  1. از دستور netstat برای یافتن فرآیندی که پورت ۲۱۸۱ را اشغال کرده است استفاده کنید. فرآیندی را که از پورت ۲۱۸۱ 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 و lock را پاک کنید:
    /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 قدیمی‌تر/نادرست است و نه pid مربوط به فرآیند ZooKeeper در حال اجرا، با شکست مواجه شود. این اتفاق ممکن است زمانی رخ دهد که فرآیند ZooKeeper به دلایلی به طور غیرمنتظره یا ناگهانی خاتمه یابد و فایل apigee-zookeeper.pid حذف نشده باشد.

تشخیص

  1. با اجرای دستور ps ، شناسه فرآیند ZooKeeper در حال اجرا را دریافت کنید:
    ps -ef | grep zookeeper
  2. بررسی کنید که آیا فایل /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid وجود دارد یا خیر. در صورت وجود، شناسه فرآیند نوشته شده در این فایل را یادداشت کنید.
  3. شناسه‌های پردازش گرفته شده از مرحله ۱ و ۲ را با هم مقایسه کنید. اگر متفاوت بودند، علت این مشکل، وجود شناسه نادرست پردازش در apigee-zookeeper.pid file.

وضوح تصویر

  1. فایل apigee-zookeeper.pid را ویرایش کنید و شناسه فرآیند نادرست را با شناسه فرآیند صحیح که از دستور ps (مرحله ۱ بالا) به دست آمده است، جایگزین کنید.
  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 مناسب برای پارامتر server.# را دارند. همچنین توجه داشته باشید که برای موفقیت در انتخاب رهبر، حداقل باید ۳ رأی‌دهنده وجود داشته باشد و تعداد رأی‌دهندگان باید فرد باشد. اگر تعداد رأی‌دهندگان خیلی کم باشد، مثلاً فقط ۲ رأی‌دهنده، نمی‌توان به حد نصاب لازم برای انتخاب رهبر از بین فقط ۲ رأی‌دهنده رسید.

وضوح تصویر

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

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