يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
المشكلة
يمكن أن تظهر مشكلات اتصال ZooKeeper في شكل أعراض مختلفة مثل:
- أخطاء نشر الخادم الوكيل لواجهة برمجة التطبيقات
- إخفاق طلبات بيانات Management API من Management API مع ظهور أخطاء 5XX
- تعذُّر تشغيل أجهزة التوجيه أو معالجات الرسائل
- إبلاغ مكوّنات "إحصاءات Google" عن فقدان اتصال ZooKeeper في system.logs
رسائل الخطأ
في ما يلي أمثلة على رسائل الخطأ التي قد تظهر عند فقدان الاتصال بعُقد ZooKeeper.
- يظهر الخطأ التالي في سجلّات خادم الإدارة عند تعذُّر نشر الخادم الوكيل لواجهة برمجة التطبيقات بسبب فقدان اتصال 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 2 DC على ما يلي:
- خوادم ZooKeeper رقم 1 و2 و3 كمصوتين في DC-1
- ZooKeeper 4 و5 كمصوتين وOKeeper 6 كمراقِب في DC-2.
في حال تعطُّل منطقة DC-1 أو تعطُّل الاتصال بالشبكة بين DC-1 وDC-2، لن تتمكّن عُقد ZooKeeper من اختيار قائد جديد في DC-2 وستتعذّر عليها في التواصل مع عُقدة القائد. لا يمكن للمراقبين في قناة ZooKeeper انتخاب زعيم جديد ولم يحصل الناخبون المتبقيان في DC-2 على 3 نقاط على الأقل لانتخاب قائد جديد. وبالتالي، لن يتمكن تطبيق ZooKeepers في وحدة تحكُّم DC-2 من معالجة أي طلبات. ستستمر عُقد ZooKeeper المتبقية في DC-2 في تكرار محاولة الاتصال مرة أخرى بالمصوّتين في ZooKeeper للعثور على القائد.
درجة الدقّة
طبِّق الحلول التالية لمعالجة هذه المشكلة بالترتيب المحدد.
إذا لم تتمكّن من حلّ المشكلة بعد تجربة هذه الحلول، يُرجى التواصل مع فريق دعم Apigee.
الحل الأول
- اعمل مع مشرفي الشبكة لإصلاح مشكلة اتصال الشبكة بين مراكز البيانات.
- عندما يكون بإمكان مجموعة ZooKeeper التواصل عبر مراكز البيانات وانتخاب زعيم ZooKeeper، يجب أن تصبح العُقد سليمة وأن تتمكن من معالجة الطلبات.
الحل الثاني
- إذا كان الاتصال بالشبكة سيستغرق بعض الوقت لإصلاحه، يكون الحل البديل هو إعادة ضبط عُقد ZooKeeper في المنطقة التي تكون فيها معطّلة. على سبيل المثال، عليك إعادة ضبط مجموعة ZooKeeper
في DC-2 بحيث تكون عُقد ZooKeeper الثلاث في هذه المنطقة جميعها مصوتين وإزالة
server.#
فيzoo.cfg
من ZooKeepers من منطقة 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
- باستخدام code مع config،
أنشِئ ملفًا
/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.properties
:conf_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.
- كرِّر الإعدادات أعلاه من الخطوة رقم 1(ب) إلى الخطوة رقم 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
ستتضمّن نتيجة هذا الأمر سطرًا بعنوان "الوضع" يليه كلمة "قائد" إذا كان هو القائد أو "متابع" إذا كان متابعًا.
عندما تتم إعادة إنشاء الشبكة بين مراكز البيانات، يمكن إعادة تغييرات الإعدادات في 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)
إذا ظهرت الرسالة التالية على أيّ من آخر 3 طلبات للتحقّق من الصحة:
$ 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 لتحديد المشاكل وحلّها في ما يتعلق بتحميل النظام في حال استمراره أو في حال لم يتم حل المشكلة من خلال إعادة التشغيل.