شما در حال مشاهده مستندات 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، دو فایل وجود دارد:
- فایل
/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
- فایل
/opt/apigee/data/apigee-zookeeper/data/myidحاوی یک خط متن است که مربوط به شماره سرور آن گره ZooKeeper خاص است. myid سرور ۱ شامل متن "۱" خواهد بود و هیچ چیز دیگری ندارد. این شناسه باید در داخل مجموعه منحصر به فرد باشد و مقداری بین ۱ تا ۲۵۵ داشته باشد.برای مثال، در ZooKeeper server.1، فایل
/opt/apigee/data/apigee-zookeeper/data/myidباید فقط شامل متن ۱ باشد، همانطور که در زیر نشان داده شده است:$ cat myid 1
تشخیص
- برای یافتن خطاها، لاگ ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logرا بررسی کنید. - اگر پیام هشداری مشابه «اتصال برای شناسه شماره، شناسه من = شماره» را مشاهده کردید، همانطور که در شکل زیر نشان داده شده است، علت احتمالی این مشکل میتواند پیکربندی نادرست یا خراب بودن شماره سرور در فایل 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)
- فایل
/opt/apigee/apigee-zookeeper/conf/zoo.cfgرا بررسی کنید و server.# مربوط به گره فعلی ZooKeeper را یادداشت کنید. - فایل
/opt/apigee/data/apigee-zookeeper/data/myidرا بررسی کنید و ببینید آیا متن موجود در این فایل با متن سرور مطابقت دارد یا خیر.# در مرحله ۲ ذکر شده است. - اگر عدم تطابقی وجود داشته باشد، شما علت عدم شروع به کار ZooKeeper را شناسایی کردهاید.
وضوح تصویر
اگر فایل myid به اشتباه پیکربندی شده است، فایل myid را ویرایش کنید و مقدار آن را با یک متن صحیح که نشاندهنده پارامتر server.# در فایل zoo.cfg است، جایگزین کنید.
پورت ZooKeeper در حال استفاده است
تشخیص
- برای یافتن خطاها، فایل
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logمربوط به ZooKeeper را بررسی کنید. - اگر متوجه استثنای
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)
- از دستور netstat زیر برای تأیید اینکه پورت ۲۱۸۱ ZooKeeper واقعاً توسط فرآیند دیگری در حال استفاده است، استفاده کنید:
netstat -an | grep 2181
وضوح تصویر
اگر پورت ۲۱۸۱ ZooKeeper هنوز در حال استفاده است، مراحل زیر را برای رفع این مشکل دنبال کنید:
- از دستور
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
- در صورت وجود، فایلهای pid و lock را پاک کنید:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- 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 حذف نشده باشد.
تشخیص
- با اجرای دستور
ps، شناسه فرآیند ZooKeeper در حال اجرا را دریافت کنید:ps -ef | grep zookeeper
- بررسی کنید که آیا فایل
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pidوجود دارد یا خیر. در صورت وجود، شناسه فرآیند نوشته شده در این فایل را یادداشت کنید. - شناسههای پردازش گرفته شده از مرحله ۱ و ۲ را با هم مقایسه کنید. اگر متفاوت بودند، علت این مشکل، وجود شناسه نادرست پردازش در
apigee-zookeeper.pid file.
وضوح تصویر
- فایل apigee-zookeeper.pid را ویرایش کنید و شناسه فرآیند نادرست را با شناسه فرآیند صحیح که از دستور ps (مرحله ۱ بالا) به دست آمده است، جایگزین کنید.
- ZooKeeper را مجدداً راهاندازی کنید:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
شکست در انتخابات رهبری باغ وحش
تشخیص
برای تشخیص:
- برای یافتن خطاها، لاگ ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logرا بررسی کنید. - بررسی کنید که آیا تغییرات پیکربندی وجود داشته است که ممکن است باعث شود انتخاب رهبر توسط ZooKeeper با شکست مواجه شود.
- فایل
/opt/apigee/apigee-zookeeper/conf/zoo.cfgرا بررسی کنید و مطمئن شوید که همه ZooKeepersهای موجود در خوشه، شماره و آدرسهای IP مناسب برای پارامتر server.# را دارند. همچنین توجه داشته باشید که برای موفقیت در انتخاب رهبر، حداقل باید ۳ رأیدهنده وجود داشته باشد و تعداد رأیدهندگان باید فرد باشد. اگر تعداد رأیدهندگان خیلی کم باشد، مثلاً فقط ۲ رأیدهنده، نمیتوان به حد نصاب لازم برای انتخاب رهبر از بین فقط ۲ رأیدهنده رسید.
وضوح تصویر
معمولاً، شکست در انتخاب ZooKeeper ناشی از پیکربندی نادرست myid است. برای رفع مشکل شکست در انتخاب، از راهحل موجود در Misconfigured ZooKeeper myid استفاده کنید.
اگر مشکل همچنان ادامه داشت و نیاز به تشخیص بیشتر بود، با پشتیبانی Apigee Edge تماس بگیرید.