خطاهای از دست دادن اتصال نگهبان باغ وحش

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

علامت

مشکلات اتصال ZooKeeper می‌تواند به صورت علائم مختلفی مانند موارد زیر بروز کند:

  1. خطاهای استقرار پروکسی API
  2. فراخوانی‌های API مدیریت با خطاهای 5XX با شکست مواجه می‌شوند
  3. روترها یا پردازنده‌های پیام شروع به کار نمی‌کنند
  4. اجزای تحلیلی، قطع اتصال ZooKeeper را در system.logs گزارش می‌دهند.

پیام‌های خطا

در ادامه نمونه‌هایی از پیام‌های خطایی که ممکن است هنگام قطع اتصال به گره(های) ZooKeeper مشاهده شوند، ارائه شده است.

  1. خطای زیر در لاگ‌های سرور مدیریت زمانی نمایش داده می‌شود که پیاده‌سازی 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
  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 ممکن است خطای زیر را نشان دهد که نشان می‌دهد قادر به بررسی وضعیت استقرار 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 تماس بگیرید.

راه حل شماره ۱

  1. با مدیران شبکه خود همکاری کنید تا مشکل اتصال شبکه بین مراکز داده را برطرف کنید.
  2. وقتی گروه ZooKeeper بتواند در مراکز داده ارتباط برقرار کند و یک رهبر ZooKeeper انتخاب کند، گره‌ها باید سالم شوند و بتوانند درخواست‌ها را پردازش کنند.

راه حل شماره ۲

  1. اگر تعمیر اتصال شبکه زمان‌بر باشد، یک راه حل این است که گره‌های ZooKeeper را در منطقه‌ای که از کار افتاده‌اند، مجدداً پیکربندی کنید. به عنوان مثال، خوشه ZooKeeper را در DC-2 مجدداً پیکربندی کنید تا 3 گره ZooKeeper در این منطقه همگی رأی‌دهنده باشند و server.# در zoo.cfg از ZooKeepers از منطقه DC-1.
    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
    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\

    در مثال بالا، گره‌های US-East حذف می‌شوند و گره‌های US-West با حذف علامت :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 را از ۴ به ۱ تغییر دهید.
    • برای server.2 ، شناسه‌ی myid را از ۵ به ۲ تغییر دهید.
    • برای server.3 شناسه‌ی myid را از ۶ به ۳ تغییر دهید.
  5. گره‌های ZooKeeper را در منطقه‌ای که خوشه ZooKeeper را دوباره پیکربندی کرده‌اید، مجدداً راه‌اندازی کنید.
  6. پیکربندی فوق را از مرحله ۱ب تا مرحله ۵ روی تمام گره‌های ZooKeeper در DC-2 تکرار کنید.
  7. تأیید کنید که گره‌ها با یک رهبر (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 برگرداند.

راه حل شماره ۳

  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 تماس بگیرید.