خطاهای ازدست رفتن اتصال Zookeeper

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

نشانه

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

  1. خطاهای استقرار پراکسی میانای برنامه‌سازی کاربردی
  2. فراخوانی‌های «میانای برنامه‌سازی کاربردی مدیریت» با خطاهای 5XX ناموفق است
  3. مسیریاب‌ها یا پردازشگرهای پیام شروع نمی‌شوند
  4. مؤلفه‌های Analytics قطع اتصال 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. واسط کاربر New Edge ممکن است خطای زیر را نشان دهد که نشان می‌دهد نتوانسته است وضعیت استقرار پراکسی‌های API را بررسی کند:
    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 به‌عنوان رأی‌دهنده و ZooKeeper 6 به‌عنوان ناظر در DC-2.

If DC-1 region goes down or network connectivity between DC-1 and DC-2 is broken, then ZooKeeper nodes cannot elect a new leader in DC-2 and they fail to communicate with the leader node. ناظران ZooKeeper نمی‌توانند رهبر جدیدی انتخاب کنند و دو رأی‌دهنده باقی‌مانده در DC-2 حدنصاب حداقل ۳ گره رأی‌دهنده را برای انتخاب رهبر جدید ندارند. بنابراین، ZooKeepers در DC-2 نمی‌توانند هیچ درخواستی را پردازش کنند. گره‌های ZooKeeper باقی‌مانده در DC-2 به تلاش برای اتصال مجدد به رأی‌دهندگان ZooKeeper برای یافتن رهبر ادامه می‌دهند.

وضوح

راه‌حل‌های زیر را به ترتیب مشخص‌شده اعمال کنید تا این مشکل برطرف شود.

اگر پس‌از امتحان کردن این راه‌حل‌ها نتوانستید مشکل را حل کنید، با پشتیبانی Apigee تماس بگیرید.

راه‌حل شماره ۱

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

راه‌حل ۲

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

      اگر هریک از ۳ فرمان بررسی سلامت آخر پیام زیر را نشان دهد:

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