شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
مشکلات اتصال ZooKeeper میتواند به صورت علائم مختلفی مانند موارد زیر بروز کند:
- خطاهای استقرار پروکسی API
- فراخوانیهای API مدیریت با خطاهای 5XX با شکست مواجه میشوند
- روترها یا پردازندههای پیام شروع به کار نمیکنند
- اجزای تحلیلی، قطع اتصال ZooKeeper را در system.logs گزارش میدهند.
پیامهای خطا
در ادامه نمونههایی از پیامهای خطایی که ممکن است هنگام قطع اتصال به گره(های) ZooKeeper مشاهده شوند، ارائه شده است.
- خطای زیر در لاگهای سرور مدیریت زمانی نمایش داده میشود که پیادهسازی API Proxy به دلیل از دست رفتن اتصال ZooKeeper با شکست مواجه شود:
org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() : Retry path existence path: /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable, reason: KeeperErrorCode = ConnectionLoss org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() : Could not detect existence of path: /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable , reason: KeeperErrorCode = ConnectionLoss org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() : ServiceDeployer.deploy() : Got a life cycle exception while starting service [ServerRegistrationService, Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] : com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence, message = Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable, associated contexts = []} 2015-03-25 10:22:39,811 org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() : Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException: Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339) ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists( ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
- در طول راهاندازی، روترها و پردازندههای پیام به ZooKeeper متصل میشوند. اگر مشکلات اتصال با ZooKeeper وجود داشته باشد، این اجزا با خطای زیر از شروع به کار باز میمانند:
2017-08-01 23:20:00,404 CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl - CuratorFrameworkImpl.logError() : Background operation retry gave up org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965] at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
- رابط کاربری Edge ممکن است خطای زیر را نشان دهد که نشان میدهد قادر به بررسی وضعیت استقرار API Proxies نیست:
Error Fetching Deployments Error while checking path existence for path: path
علل احتمالی
جدول زیر علل احتمالی این مشکل را فهرست میکند:
| علت | برای |
|---|---|
| مشکل اتصال شبکه در مراکز داده مختلف | کاربران فضای ابری خصوصی اج |
| گره ZooKeeper درخواستها را پاسخ نمیدهد | کاربران فضای ابری خصوصی اج |
برای مشاهده راهحلهای ممکن برای آن علت، روی پیوندی در جدول کلیک کنید.
مشکل اتصال شبکه در مراکز داده مختلف
تشخیص
یک خوشه ZooKeeper ممکن است گرههایی داشته باشد که در چندین منطقه/مرکز داده، مانند DC-1 و DC-2، گسترده شدهاند. توپولوژی DC معمولی Apigee Edge 2 موارد زیر را خواهد داشت:
- سرورهای ZooKeeper شماره ۱، ۲ و ۳ به عنوان رأیدهنده در DC-1
- ZooKeeper 4 و 5 به عنوان رأیدهنده و ZooKeeper 6 به عنوان ناظر در DC-2.
اگر منطقه DC-1 از کار بیفتد یا اتصال شبکه بین DC-1 و DC-2 قطع شود، گرههای ZooKeeper نمیتوانند رهبر جدیدی در DC-2 انتخاب کنند و نمیتوانند با گره رهبر ارتباط برقرار کنند. ناظران ZooKeeper نمیتوانند رهبر جدیدی انتخاب کنند و دو رأیدهنده باقیمانده در DC-2 حد نصاب حداقل ۳ گره رأیدهنده برای انتخاب رهبر جدید را ندارند. بنابراین، ZooKeepers در DC-2 قادر به پردازش هیچ درخواستی نخواهند بود. گرههای ZooKeeper باقیمانده در DC-2 به حلقه تکرار برای اتصال مجدد به رأیدهندگان ZooKeeper و یافتن رهبر ادامه میدهند.
وضوح تصویر
برای رفع این مشکل، راهکارهای زیر را به ترتیب مشخص شده اعمال کنید.
اگر پس از امتحان کردن این راهحلها نتوانستید مشکل را حل کنید، لطفاً با پشتیبانی Apigee تماس بگیرید.
راه حل شماره ۱
- با مدیران شبکه خود همکاری کنید تا مشکل اتصال شبکه بین مراکز داده را برطرف کنید.
- وقتی گروه ZooKeeper بتواند در مراکز داده ارتباط برقرار کند و یک رهبر ZooKeeper انتخاب کند، گرهها باید سالم شوند و بتوانند درخواستها را پردازش کنند.
راه حل شماره ۲
- اگر تعمیر اتصال شبکه زمانبر باشد، یک راه حل این است که گرههای ZooKeeper را در منطقهای که از کار افتادهاند، مجدداً پیکربندی کنید. به عنوان مثال، خوشه ZooKeeper را در DC-2 مجدداً پیکربندی کنید تا 3 گره ZooKeeper در این منطقه همگی رأیدهنده باشند و
server.#درzoo.cfgاز ZooKeepers از منطقه DC-1.- در مثال زیر،
zoo.cfgگرهها را برای ۲ منطقه پیکربندی میکند که در آن DC-1 از نامهای میزبانus-eaکه نشاندهنده منطقه US-East است و DC-2 از نامهای میزبانus-woکه نشاندهنده منطقه US-West است استفاده میکند. (توجه: فقط پیکربندیهای مربوطه نمایش داده میشوند):server.1=zk01ea.us-ea.4.apigee.com:2888:3888 server.2=zk02ea.us-ea.4.apigee.com:2888:3888 server.3=zk03ea.us-ea.4.apigee.com:2888:3888 server.4=zk04wo.us-wo.4.apigee.com:2888:3888 server.5=zk05wo.us-wo.4.apigee.com:2888:3888 server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer
در مثال بالا، فایل
zoo.cfgبه صورت زیر پیکربندی کنید:server.1=zk04wo.us-wo.4.apigee.com:2888:3888 server.2=zk05wo.us-wo.4.apigee.com:2888:3888 server.3=zk06wo.us-wo.4.apigee.com:2888:3888
- با استفاده از کد همراه با پیکربندی ، فایلی با نام
/opt/apigee/customer/application/zookeeper.propertiesبا محتوای زیر ایجاد کنید:conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\ \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\ \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\
در مثال بالا، گرههای US-East حذف میشوند و گرههای US-West با حذف علامت
:observerبه رتبه رأیدهندگان ارتقا مییابند. - در مثال زیر،
-
/opt/apigee/apigee-zookeeper/conf/zoo.cfgو فایل قدیمی/opt/apigee/customer/application/zookeeper.propertiesنسخه پشتیبان تهیه کنید.این فایلها برای بازیابی تنظیمات پیشفرض هنگام برقراری مجدد اتصال شبکه بین مراکز داده استفاده میشوند.
نماد ناظر را برای گره ناظر غیرفعال کنید. برای انجام این کار، پیکربندی زیر را به بالای
/opt/apigee/customer/application/zookeeper.propertiesاضافه کنید:conf_zoo_peertype=
فایل
/opt/apigee/data/apigee-zookeeper/data/myidرا به صورت زیر ویرایش کنید:- برای
server.1، ورودی داخلmyidرا از ۴ به ۱ تغییر دهید. - برای
server.2، شناسهیmyidرا از ۵ به ۲ تغییر دهید. - برای
server.3شناسهیmyidرا از ۶ به ۳ تغییر دهید.
- برای
- گرههای ZooKeeper را در منطقهای که خوشه ZooKeeper را دوباره پیکربندی کردهاید، مجدداً راهاندازی کنید.
- پیکربندی فوق را از مرحله ۱ب تا مرحله ۵ روی تمام گرههای ZooKeeper در DC-2 تکرار کنید.
- تأیید کنید که گرهها با یک رهبر (leader) فعال هستند:
$ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181 > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181 > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181
خروجی این دستور شامل خطی خواهد بود که در آن کلمه "mode" و در صورت رهبر بودن، کلمه "leader" و در صورت پیرو بودن، کلمه "follower" نوشته شده است.
وقتی شبکه بین مراکز داده دوباره برقرار شود، تغییرات پیکربندی ZooKeeper را میتوان روی گرههای ZooKeeper در DC-2 برگرداند.
راه حل شماره ۳
- اگر گره(های) ZooKeeper در خوشه شروع به کار نکرده است، آن را مجدداً راهاندازی کنید.
- برای تعیین دلیل از کار افتادن گره ZooKeeper، گزارشهای ZooKeeper را بررسی کنید.
گزارشهای ZooKeeper در دایرکتوری زیر موجود است:
$ cd /opt/apigee/var/log/apigee-zookeeper $ ls -l total 188 -rw-r--r--. 1 apigee apigee 2715 Jul 22 19:51 apigee-zookeeper.log -rw-r--r--. 1 apigee apigee 10434 Jul 17 19:51 config.log -rw-r--r--. 1 apigee apigee 169640 Aug 1 19:51 zookeeper.log
- با پشتیبانی Apigee تماس بگیرید و گزارشهای ZooKeeper را برای عیبیابی علت هر گره ZooKeeper که ممکن است متوقف شده باشد، ارائه دهید.
گره ZooKeeper درخواستها را پاسخ نمیدهد
یک گره ZooKeeper در گروه ممکن است ناسالم شود و قادر به پاسخگویی به درخواستهای کلاینت نباشد. این میتواند به دلایل زیر باشد:
- گره بدون راهاندازی مجدد متوقف شد.
- گره بدون فعال بودن شروع خودکار، مجدداً راهاندازی شد.
- بار سیستم روی گره باعث از کار افتادن یا ناسالم شدن آن شد.
تشخیص
- دستورات بررسی سلامت ZooKeeper زیر را روی هر یک از گرههای ZooKeeper اجرا کنید و خروجی را بررسی کنید:
$ echo "ruok" | nc localhost 2181
خروجی مثال:
$ echo "ruok" | nc localhost 2181 imok
echo srvr | nc localhost 2181
حالت را بررسی کنید تا مشخص شود گره ZooKeeper رهبر است یا پیرو.
خروجی مثال برای یک گره ZooKeeper همه کاره:
$ echo srvr | nc localhost 2181 ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Latency min/avg/max: 0/0/88 Received: 4206601 Sent: 4206624 Connections: 8 Outstanding: 0 Zxid: 0x745 Mode: standalone Node count: 282
$ echo mntr | nc localhost 2181
این دستور متغیرهای ZooKeeper را که میتوانند برای بررسی سلامت خوشه ZooKeeper استفاده شوند، فهرست میکند.
خروجی مثال:
$ echo mntr | nc localhost 2181 zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT zk_avg_latency 0 zk_max_latency 88 zk_min_latency 0 zk_packets_received 4206750 zk_packets_sent 4206773 zk_num_alive_connections 8 zk_outstanding_requests 0 zk_server_state standalone zk_znode_count 282 zk_watch_count 194 zk_ephemerals_count 1 zk_approximate_data_size 22960 zk_open_file_descriptor_count 34 zk_max_file_descriptor_count 4096
$ echo stat | nc localhost 2181
این دستور آماری در مورد عملکرد و کلاینتهای متصل را فهرست میکند.
خروجی مثال:
$ echo stat | nc localhost 2181 ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Clients: /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385) /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278) /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094) /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938) /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843) /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333) /127.0.0.1:40820[0](queued=0,recved=1,sent=0) /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844) Latency min/avg/max: 0/0/88 Received: 4206995 Sent: 4207018 Connections: 8 Outstanding: 0 Zxid: 0x745 Mode: standalone Node count: 282
$ echo cons | nc localhost 2181
این دستور جزئیات بیشتری در مورد اتصالات ZooKeeper ارائه میدهد.
خروجی مثال:
$ echo cons | nc localhost 2181 /127.0.0.1:40864[0](queued=0,recved=1,sent=0) /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007, lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174, llat=0,minlat=0,avglat=0,maxlat=26) /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005, lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055, llat=0,minlat=0,avglat=0,maxlat=23) /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a, lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245, llat=0,minlat=0,avglat=0,maxlat=22) /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b, lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417, llat=0,minlat=0,avglat=0,maxlat=88) /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008, lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475, llat=3,minlat=0,avglat=0,maxlat=19) /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d, lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315, llat=0,minlat=0,avglat=0,maxlat=35) /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006, lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036, llat=1,minlat=0,avglat=0,maxlat=20)
اگر هر یک از ۳ دستور آخر بررسی سلامت، پیام زیر را نشان دهد:
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
سپس نشان میدهد که گره(های) خاصی از ZooKeeper به درخواستها پاسخ نمیدهد.
- گزارشهای ZooKeeper را در گره مورد نظر بررسی کنید و سعی کنید هرگونه خطایی که باعث از کار افتادن ZooKeeper میشود را پیدا کنید. گزارشهای ZooKeeper در دایرکتوری زیر موجود است:
$ cd /opt/apigee/var/log/apigee-zookeeper $ ls -l total 188 -rw-r--r--. 1 apigee apigee 2715 Jul 22 19:51 apigee-zookeeper.log -rw-r--r--. 1 apigee apigee 10434 Jul 17 19:51 config.log -rw-r--r--. 1 apigee apigee 169640 Aug 1 19:51 zookeeper.log
وضوح تصویر
- تمام گرههای ZooKeeper دیگر را در کلاستر، یکی یکی، مجدداً راهاندازی کنید.
- دستورات بررسی سلامت ZooKeeper را روی هر گره دوباره اجرا کنید و ببینید آیا خروجی مورد انتظار را دریافت میکنید یا خیر.
اگر مشکل همچنان ادامه داشت یا اگر با راهاندازی مجدد حل نشد، برای عیبیابی علت بارگذاری سیستم با پشتیبانی Apigee تماس بگیرید.