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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

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

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

رسائل الخطأ

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

  1. يظهر الخطأ التالي في سجلّات خادم الإدارة عند تعذُّر نشر الخادم الوكيل لواجهة برمجة التطبيقات بسبب فقدان اتصال 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 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.

الحل الأول

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

الحل الثاني

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

  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. كرِّر الإعدادات أعلاه من الخطوة رقم 1(ب) إلى الخطوة رقم 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
    

    ستتضمّن نتيجة هذا الأمر سطرًا بعنوان "الوضع" يليه كلمة "قائد" إذا كان هو القائد أو "متابع" إذا كان متابعًا.

    عندما تتم إعادة إنشاء الشبكة بين مراكز البيانات، يمكن إعادة تغييرات الإعدادات في ZooKeeper في عُقد ZooKeeper في DC-2.

الحل الثالث

  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)
      

      إذا ظهرت الرسالة التالية على أيّ من آخر 3 طلبات للتحقّق من الصحة:

      $ 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 لتحديد المشاكل وحلّها في ما يتعلق بتحميل النظام في حال استمراره أو في حال لم يتم حل المشكلة من خلال إعادة التشغيل.