Zookeeper Bağlantı Kaybı Hataları

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

ZooKeeper bağlantı sorunları, aşağıdakiler gibi farklı belirtilerle ortaya çıkabilir:

  1. API proxy'si dağıtım hataları
  2. Management API çağrıları 5XX hatalarıyla başarısız oluyor
  3. Yönlendiriciler veya ileti işlemciler başlatılamıyor
  4. Analytics bileşenleri, system.logs dosyasında ZooKeeper bağlantı kaybını bildiriyor

Hata mesajları

Aşağıda, ZooKeeper düğümlerine bağlantı kaybı olduğunda görülebilecek hata mesajlarının örnekleri verilmiştir.

  1. Bir API proxy'si dağıtımı, ZooKeeper bağlantısı kaybı nedeniyle başarısız olduğunda Yönetim Sunucusu günlüklerinde aşağıdaki hata döndürülür:
    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. Başlangıç sırasında yönlendiriciler ve ileti işlemciler ZooKeeper'a bağlanır. ZooKeeper ile bağlantı sorunları varsa bu bileşenler aşağıdaki hatayla başlatılamaz:
    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 kullanıcı arayüzünde, API proxy'lerinin dağıtım durumu kontrol edilemediğini belirten aşağıdaki hata gösterilebilir:
    Error Fetching Deployments
    Error while checking path existence for path: path

Olası nedenler

Aşağıdaki tabloda bu sorunun olası nedenleri listelenmiştir:

Neden Şunun için:
Farklı veri merkezlerinde ağ bağlantısı sorunu Edge Private Cloud kullanıcıları
ZooKeeper düğümü isteklere hizmet vermiyor Edge Private Cloud kullanıcıları

Bu nedene yönelik olası çözümleri görmek için tablodaki bir bağlantıyı tıklayın.

Farklı veri merkezlerinde ağ bağlantısı sorunu

Teşhis

Bir ZooKeeper kümesi, DC-1 ve DC-2 gibi birden fazla bölgeye/veri merkezine yayılan düğümlere sahip olabilir. Tipik bir Apigee Edge 2 DC topolojisinde şunlar bulunur:

  • DC-1'de seçmen olarak ZooKeeper sunucuları 1, 2 ve 3
  • DC-2'de ZooKeeper 4 ve 5 seçmen, ZooKeeper 6 ise gözlemci olarak yer alıyor.

DC-1 bölgesi çökerse veya DC-1 ile DC-2 arasındaki ağ bağlantısı kesilirse ZooKeeper düğümleri DC-2'de yeni bir lider seçemez ve lider düğümle iletişim kuramaz. ZooKeeper gözlemcileri yeni bir lider seçemez ve DC-2'deki kalan iki seçmen, yeni bir lider seçmek için yeterli olan en az 3 seçmen düğümüne sahip değildir. Bu nedenle, DC-2'deki ZooKeeper'lar herhangi bir isteği işleme alamayacak. DC-2'deki kalan ZooKeeper düğümleri, lideri bulmak için ZooKeeper seçmenlerine tekrar bağlanmayı denemeye devam eder.

Çözünürlük

Bu sorunu gidermek için aşağıdaki çözümleri belirtilen sırayla uygulayın.

Bu çözümleri denedikten sonra sorunu çözemezseniz lütfen Apigee Destek Ekibi ile iletişime geçin.

1. çözüm

  1. Veri merkezleri arasındaki ağ bağlantısı sorununu gidermek için ağ yöneticilerinizle birlikte çalışın.
  2. ZooKeeper topluluğu veri merkezleri arasında iletişim kurabildiğinde ve bir ZooKeeper lideri seçtiğinde düğümler sağlıklı hale gelmeli ve istekleri işleyebilmelidir.

2. çözüm

  1. Ağ bağlantısının onarılması zaman alacaksa geçici çözüm olarak, ZooKeeper düğümlerini bulundukları bölgede yeniden yapılandırabilirsiniz. Örneğin, DC-2'deki ZooKeeper kümesini bu bölgedeki 3 ZooKeeper düğümünün tamamı seçmen olacak şekilde yeniden yapılandırın ve DC-1 bölgesindeki ZooKeeper'ların zoo.cfg bölümünde server.# öğesini kaldırın.
    1. Aşağıdaki örnekte, zoo.cfg, düğümleri 2 bölge için yapılandırır. Bu bölgelerden DC-1, ABD-Doğu bölgesini belirten us-ea ana makine adlarını kullanırken DC-2, ABD-Batı bölgesini belirten us-wo ana makine adlarını kullanır. (NOT: Yalnızca alakalı yapılandırmalar gösterilir):
      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

      Yukarıdaki örnekte, zoo.cfg öğesini aşağıdaki şekilde yeniden yapılandırın:

      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. Yapılandırmalı kod kullanarak, aşağıdaki bilgileri içeren bir /opt/apigee/customer/application/zookeeper.properties dosyası oluşturun:
      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\

    Yukarıdaki örnekte, US-East'teki düğümler kaldırılıyor ve :observer açıklaması kaldırıldığında US-West düğümleri seçmen olarak yükseltiliyor.

  2. /opt/apigee/apigee-zookeeper/conf/zoo.cfg ve eski /opt/apigee/customer/application/zookeeper.properties yedekleyin.

    Bu dosyalar, veri merkezleri arasındaki ağ bağlantısı tekrar kurulduğunda varsayılanları geri yüklemek için kullanılır.

  3. Gözlemci düğümü için gözlemci notunu devre dışı bırakın. Bunu yapmak için /opt/apigee/customer/application/zookeeper.properties dosyasının en üstüne aşağıdaki yapılandırmayı ekleyin:

    conf_zoo_peertype=
  4. /opt/apigee/data/apigee-zookeeper/data/myid dosyasını aşağıdaki gibi düzenleyin:

    • server.1 için myid içindeki girişi 4'ten 1'e değiştirin.
    • server.2 için myid değerini 5'ten 2'ye değiştirin.
    • server.3 için myid değerini 6'dan 3'e değiştirin.
  5. ZooKeeper kümesini yeniden yapılandırdığınız bölgedeki ZooKeeper düğümlerini yeniden başlatın.
  6. Yukarıdaki yapılandırmayı 1b adımından 5. adıma kadar DC-2'deki tüm ZooKeeper düğümlerinde tekrarlayın.
  7. Düğümlerin bir liderle birlikte çalıştığını doğrulayın:
    $ 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

    Bu komutun çıkışında, liderse "mode" kelimesinin ardından "leader", takipçiyse "follower" kelimesinin yer aldığı bir satır bulunur.

    Veri merkezleri arasındaki ağ yeniden kurulduğunda, ZooKeeper yapılandırmaları değişiklikleri DC-2'deki ZooKeeper düğümlerinde geri alınabilir.

3. çözüm

  1. Kümedeki ZooKeeper düğümleri başlatılmamışsa yeniden başlatın.
  2. ZooKeeper düğümünün neden çöktüğünü belirlemek için ZooKeeper günlüklerini kontrol edin.

    ZooKeeper günlükleri aşağıdaki dizinde bulunur:

    $ 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. Durdurulmuş olabilecek ZooKeeper düğümlerinin nedenini gidermek için Apigee Destek Ekibi ile iletişime geçin ve ZooKeeper günlüklerini paylaşın.

ZooKeeper düğümü isteklere hizmet vermiyor

Topluluktaki bir ZooKeeper düğümü sağlıksız hale gelebilir ve istemci isteklerine yanıt veremeyebilir. Bunun nedeni aşağıdakilerden biri olabilir:

  1. Düğüm yeniden başlatılmadan durduruldu.
  2. Düğüm, otomatik başlatma etkinleştirilmeden yeniden başlatıldı.
  3. Düğümdeki sistem yükü, düğümün kapanmasına veya sağlıksız hale gelmesine neden oldu.

Teşhis

  1. ZooKeeper düğümlerinin her birinde aşağıdaki ZooKeeper durum denetimi komutlarını çalıştırın ve çıkışı kontrol edin:
    1. $ echo "ruok" | nc localhost 2181

      Örnek çıkış:

      $ echo "ruok" | nc localhost 2181
      imok
    2. echo srvr | nc localhost 2181

      ZooKeeper düğümünün lider mi yoksa takipçi mi olduğunu belirlemek için modu kontrol edin.

      Hepsi bir arada tek bir ZooKeeper düğümü için örnek çıkış:

      $ 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

      Bu komut, ZooKeeper kümesinin durumunu kontrol etmek için kullanılabilecek ZooKeeper değişkenlerini listeler.

      Örnek çıkış:

      $ 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

      Bu komut, performans ve bağlı istemcilerle ilgili istatistikleri listeler.

      Örnek çıkış:

      $ 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

      Bu komut, ZooKeeper bağlantılarıyla ilgili ayrıntılı bilgi verir.

      Örnek çıkış:

      $ 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)

      Son 3 durum denetimi komutundan herhangi biri aşağıdaki mesajı gösteriyorsa:

      $ echo stat | nc localhost 2181
          This ZooKeeper instance is not currently serving requests

      Ardından, belirli ZooKeeper düğümlerinin isteklere hizmet vermediğini belirtir.

  2. Belirli düğümdeki ZooKeeper günlüklerini kontrol edin ve ZooKeeper'ın çalışmamasına neden olan hataları bulmaya çalışın. ZooKeeper günlükleri aşağıdaki dizinde bulunur:
    $ 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

Çözünürlük

  1. Kümedeki diğer tüm ZooKeeper düğümlerini tek tek yeniden başlatın.
  2. Her düğümde ZooKeeper durum kontrolü komutlarını yeniden çalıştırın ve beklenen çıktıyı alıp almadığınızı kontrol edin.

Sistem yükünün nedenini gidermek için sorun devam ederse veya yeniden başlatma sorunu çözmezse Apigee Destek Ekibi ile iletişime geçin.