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ğıdaki 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 Mesaj İşleyiciler başlatılamıyor
  4. Analytics bileşenleri, sistemdeki ZooKeeper bağlantı kaybını system.logs dosyasında bildiriyor

Hata mesajları

Aşağıda, ZooKeeper düğümleriyle bağlantı kesildiğinde görülebilecek hata mesajı ö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şlatma sırasında yönlendiriciler ve mesaj 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. Yeni 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 yanıt 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 merkezleri arasında ağ bağlantısı sorunu

Teşhis

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

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

DC-1 bölgesi devre dışı kalırsa 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 gereken en az 3 seçmen düğümüne sahip değildir. Bu nedenle, DC-2'deki ZooKeeper'lar herhangi bir isteği işleyemez. DC-2'deki kalan ZooKeeper düğümleri, lideri bulmak için ZooKeeper seçmenlerine yeniden bağlanmayı denemeye devam eder.

Çözünürlük

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

Bu çözümleri denedikten sonra sorunu çözemezseniz 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 gelir ve istekleri işleyebilir.

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ündeki server.# öğesini kaldırın.
    1. Aşağıdaki örnekte zoo.cfg, düğümleri 2 bölge için yapılandırır. DC-1, ABD Doğu bölgesini belirten us-ea ana makine adlarını, DC-2 ise 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 gibi 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. code with config komutunu kullanarak aşağıdaki içeriğe sahip 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ıda, ABD Doğu'daki düğümler kaldırılır ve :observer ek açıklaması kaldırıldığında ABD Batı düğümleri oy verenlere yükseltilir.

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

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

  3. Gözlemci düğümü için gözlemci notasyonunu devre dışı bırakın. Bunun 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 şekilde 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. DC-2'deki tüm ZooKeeper düğümlerinde 1b adımından 5. adıma kadar yukarıdaki yapılandırmayı tekrarlayın.
  7. Düğümlerin bir liderle ç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" ve ardından "leader", takipçiyse "follower" yazan bir satır bulunur.

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

3. çözüm

  1. Kümedeki ZooKeeper düğümleri başlatılmadıysa 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 sağlayın.

ZooKeeper düğümü isteklere yanıt 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

      Bu durumda, belirli ZooKeeper düğümlerinin isteklere yanıt vermediği anlaşılır.

  2. Belirli bir 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 denetimi komutlarını yeniden çalıştırın ve beklenen çıkışı alıp almadığınızı kontrol edin.

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