أخطاء فقدان اتصال حديقة الحيوان

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X.
info

المشكلة

يمكن أن تظهر مشاكل الاتصال بـ ZooKeeper على شكل أعراض مختلفة، مثل:

  1. أخطاء نشر الخادم الوكيل لواجهة برمجة التطبيقات
  2. فشل طلبات بيانات من Management API مع ظهور أخطاء 5XX
  3. تعذُّر بدء أجهزة التوجيه أو معالِجات الرسائل
  4. إبلاغ مكوّنات "إحصاءات Google" عن فقدان الاتصال بـ ZooKeeper في ملف system.logs

رسائل الخطأ

في ما يلي أمثلة على رسائل الخطأ التي قد تظهر عند فقدان الاتصال بعُقد ZooKeeper:

  1. يتم عرض الخطأ التالي في سجلّات 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
  2. أثناء بدء التشغيل، تتصل أجهزة التوجيه ومعالِجات الرسائل بـ 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]
  3. قد تعرض واجهة مستخدم 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

  1. تعاوَن مع مشرفي الشبكة لإصلاح مشكلة الاتصال بالشبكة بين الـ مراكز البيانات.
  2. عندما تتمكّن مجموعة ZooKeeper من التواصل بين مراكز البيانات واختيار عُقدة رئيسية في ZooKeeper، يجب أن تصبح العُقد سليمة وتتمكّن من معالجة الطلبات.

الحلّ رقم 2

  1. إذا كان إصلاح الاتصال بالشبكة سيستغرق وقتًا، يمكنك كحلّ بديل إعادة ضبط عُقد ZooKeeper في المنطقة التي تعذّر الوصول إليها. على سبيل المثال، أعِد ضبط مجموعة ZooKeeper في DC-2 بحيث تكون عُقد ZooKeeper الثلاث في هذه المنطقة جميعها عُقد تصويت وأزِل الـ server.# في الـzoo.cfg لعُقد ZooKeeper من منطقة DC-1.
    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
    2. باستخدام رمز يتضمّن الإعداد، أنشِئ ملفًا باسم /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.

  2. احتفِظ بنسخة احتياطية من /opt/apigee/apigee-zookeeper/conf/zoo.cfg والملف القديم /opt/apigee/customer/application/zookeeper.properties.

    سيتم استخدام هذه الملفات لاستعادة الإعدادات التلقائية عند استعادة الاتصال بالشبكة بين مراكز البيانات.

  3. أوقِف تدوين المراقِب لعُقدة المراقِب. لإجراء ذلك، أضِف الإعداد التالي في أعلى /opt/apigee/customer/application/zookeeper.properties

    conf_zoo_peertype=
  4. عدِّل الملف /opt/apigee/data/apigee-zookeeper/data/myid على النحو التالي:

    • بالنسبة إلى server.1، غيِّر الإدخال داخل myid من 4 إلى 1.
    • بالنسبة إلى server.2، غيِّر myid من 5 إلى 2.
    • بالنسبة إلى server.3، غيِّر myid من 6 إلى 3.
  5. أعِد تشغيل عُقد ZooKeeper في المنطقة التي أعَدت فيها ضبط مجموعة ZooKeeper.
  6. كرِّر الإعداد أعلاه من الخطوة ‎ #1b إلى الخطوة ‎# 5 على جميع عُقد ZooKeeper في DC-2.
  7. تحقَّق من أنّ العُقد تعمل وتتضمّن عُقدة رئيسية:
    $ 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

  1. إذا لم يتم بدء تشغيل عُقد ZooKeeper في المجموعة، أعِد تشغيلها.
  2. راجِع سجلّات 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
  3. تواصَل مع فريق دعم Apigee وقدِّم سجلّات ZooKeeper لتحديد وحلّ سبب توقُّف أي عُقدة في ZooKeeper.

عُقدة ZooKeeper لا تعالج الطلبات

قد تصبح عُقدة ZooKeeper في المجموعة غير سليمة ويتعذّر عليها الردّ على طلبات العملاء. قد يرجع السبب إلى ما يلي:

  1. تم إيقاف العُقدة بدون إعادة تشغيلها.
  2. تمت إعادة تشغيل العُقدة بدون تفعيل ميزة "بدء التشغيل التلقائي".
  3. أدّى حمل النظام على العُقدة إلى تعذُّر الوصول إليها أو عدم سلامتها.

التشخيص

  1. نفِّذ أوامر التحقّق من سلامة ZooKeeper التالية على كل عُقدة من عُقد ZooKeeper و راجِع النتيجة:
    1. $ echo "ruok" | nc localhost 2181

      مثال على الناتج:

      $ echo "ruok" | nc localhost 2181
      imok
    2. 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
    3. $ 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
    4. $ 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
    5. $ 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 معيّنة لا تعالج الطلبات.

  2. راجِع سجلّات 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

الدقة

  1. أعِد تشغيل جميع عُقد ZooKeeper الأخرى في المجموعة واحدة تلو الأخرى.
  2. أعِد تشغيل أوامر التحقّق من سلامة ZooKeeper على كل عُقدة واطّلِع على ما إذا كانت النتيجة المتوقّعة تظهر لك.

يُرجى التواصل مع فريق دعم Apigee لتحديد وحلّ سبب حمل النظام إذا استمرت المشكلة أو إذا لم تؤدِّ عمليات إعادة التشغيل إلى حلّ المشكلة.