أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X. info
المشكلة
يمكن أن تظهر مشاكل الاتصال بـ ZooKeeper على شكل أعراض مختلفة، مثل:
- أخطاء نشر الخادم الوكيل لواجهة برمجة التطبيقات
- فشل طلبات بيانات من Management API مع ظهور أخطاء 5XX
- تعذُّر بدء أجهزة التوجيه أو معالِجات الرسائل
- إبلاغ مكوّنات "إحصاءات Google" عن فقدان الاتصال بـ ZooKeeper في ملف system.logs
رسائل الخطأ
في ما يلي أمثلة على رسائل الخطأ التي قد تظهر عند فقدان الاتصال بعُقد ZooKeeper:
- يتم عرض الخطأ التالي في سجلّات Management Server عند فشل نشر خادم وكيل لواجهة برمجة التطبيقات
بسبب فقدان الاتصال بـ 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 الخطأ التالي الذي يشير إلى تعذُّر التحقّق من حالة نشر الخوادم الوكيلة لواجهة برمجة التطبيقات:
Error Fetching Deployments Error while checking path existence for path: path
الأسباب المحتملة
يسرد الجدول التالي الأسباب المحتملة لهذه المشكلة:
| السبب | موجَّه إلى |
|---|---|
| مشكلة في الاتصال بالشبكة بين مراكز البيانات المختلفة | مستخدمو Edge Private Cloud |
| عُقدة ZooKeeper لا تعالج الطلبات | مستخدمو Edge Private Cloud |
انقر على رابط في الجدول للاطّلاع على الحلول المحتملة لهذا السبب.
مشكلة في الاتصال بالشبكة بين مراكز البيانات المختلفة
التشخيص
قد تحتوي مجموعة ZooKeeper على عُقد موزَّعة على مناطق أو مراكز بيانات متعددة، مثل DC-1 وDC-2. سيتضمّن المخطط النموذجي لمركزَي بيانات في Apigee Edge ما يلي:
- خوادم ZooKeeper 1 و2 و3 كعُقد تصويت في DC-1
- عُقد ZooKeeper 4 و5 كعُقد تصويت وعُقدة ZooKeeper 6 كمراقِب في DC-2
إذا تعذّر الوصول إلى منطقة DC-1 أو انقطع الاتصال بالشبكة بين DC-1 وDC-2، فلن تتمكّن عُقد ZooKeeper من اختيار عُقدة رئيسية جديدة في DC-2 وسيتعذّر عليها التواصل مع العُقدة الرئيسية لا يمكن للمراقِبين في ZooKeeper اختيار عُقدة رئيسية جديدة، ولا تملك عُقدتا التصويت المتبقيتان في DC-2 لا تملك عددًا كافيًا من عُقد التصويت (3 على الأقل) لاختيار عُقدة رئيسية جديدة. وبالتالي، لن تتمكّن عُقد ZooKeeper في DC-2 من معالجة أي طلبات. ستستمر عُقد ZooKeeper المتبقية في DC-2 في تكرار محاولات إعادة الاتصال بعُقد التصويت في ZooKeeper للعثور على العُقدة الرئيسية.
الدقة
طبِّق الحلول التالية لمعالجة هذه المشكلة بالترتيب المحدّد.
إذا لم تتمكّن من حلّ المشكلة بعد تجربة هذه الحلول، يُرجى التواصل مع فريق دعم Apigee.
الحلّ رقم 1
- تعاوَن مع مشرفي الشبكة لإصلاح مشكلة الاتصال بالشبكة بين الـ مراكز البيانات.
- عندما تتمكّن مجموعة ZooKeeper من التواصل بين مراكز البيانات واختيار عُقدة رئيسية في ZooKeeper، يجب أن تصبح العُقد سليمة وتتمكّن من معالجة الطلبات.
الحلّ رقم 2
- إذا كان إصلاح الاتصال بالشبكة سيستغرق وقتًا، يمكنك كحلّ بديل إعادة ضبط
عُقد ZooKeeper في المنطقة التي تعذّر الوصول إليها. على سبيل المثال، أعِد ضبط مجموعة ZooKeeper
في DC-2 بحيث تكون عُقد ZooKeeper الثلاث في هذه المنطقة جميعها عُقد تصويت وأزِل الـ
server.#في الـzoo.cfgلعُقد ZooKeeper من منطقة DC-1.- في المثال التالي، يضبط
zoo.cfgالعُقد لمنطقتَين، حيث تستخدم DC-1 أسماء مضيفus-eaالتي تشير إلى منطقة شرق الولايات المتحدة، وتستخدم DC-2 أسماء مضيفus-woالتي تشير إلى منطقة غرب الولايات المتحدة. (ملاحظة: لا يتم عرض سوى الإعدادات ذات الصلة):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\
في المثال أعلاه، تتم إزالة العُقد من شرق الولايات المتحدة، وتتم ترقية العُقد من غرب الولايات المتحدة إلى عُقد تصويت عند إزالة التعليق التوضيحي
:observer. - في المثال التالي، يضبط
- احتفِظ بنسخة احتياطية من
/opt/apigee/apigee-zookeeper/conf/zoo.cfgوالملف القديم/opt/apigee/customer/application/zookeeper.properties.سيتم استخدام هذه الملفات لاستعادة الإعدادات التلقائية عند استعادة الاتصال بالشبكة بين مراكز البيانات.
أوقِف تدوين المراقِب لعُقدة المراقِب. لإجراء ذلك، أضِف الإعداد التالي في أعلى
/opt/apigee/customer/application/zookeeper.propertiesconf_zoo_peertype=
-
عدِّل الملف
/opt/apigee/data/apigee-zookeeper/data/myidعلى النحو التالي:- بالنسبة إلى
server.1، غيِّر الإدخال داخلmyidمن 4 إلى 1. - بالنسبة إلى
server.2، غيِّرmyidمن 5 إلى 2. - بالنسبة إلى
server.3، غيِّرmyidمن 6 إلى 3.
- بالنسبة إلى
- أعِد تشغيل عُقد ZooKeeper في المنطقة التي أعَدت فيها ضبط مجموعة ZooKeeper.
- كرِّر الإعداد أعلاه من الخطوة #1b إلى الخطوة # 5 على جميع عُقد ZooKeeper في DC-2.
- تحقَّق من أنّ العُقد تعمل وتتضمّن عُقدة رئيسية:
$ 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.
الحلّ رقم 3
- إذا لم يتم بدء تشغيل عُقد 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 لتحديد وحلّ سبب حمل النظام إذا استمرت المشكلة أو إذا لم تؤدِّ عمليات إعادة التشغيل إلى حلّ المشكلة.