Error Koneksi Zookeeper Hilang

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

ini.

Gejala

Masalah konektivitas ZooKeeper dapat bermunculan dengan berbagai gejala seperti:

  1. Error deployment proxy API
  2. Panggilan Management API gagal dengan error 5XX
  3. Router atau Pemroses Pesan gagal dimulai
  4. Komponen analisis melaporkan hilangnya koneksi ZooKeeper di system.logs

Pesan error

Berikut ini contoh pesan {i>error<i} yang dapat diamati jika ada kehilangan koneksi ke node ZooKeeper.

  1. Error berikut ditampilkan dalam log Server Pengelolaan saat deployment Proxy API gagal karena kehilangan Koneksi 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. Selama proses startup, Router dan Pemroses Pesan akan terhubung ke ZooKeeper. Jika ada konektivitas dengan ZooKeeper, maka komponen ini akan gagal memulai dengan {i>error<i}:
    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. UI Edge dapat menampilkan error berikut yang menunjukkan bahwa UI tidak dapat memeriksa status deployment Proxy API:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

Kemungkinan penyebab

Tabel berikut mencantumkan kemungkinan penyebab masalah ini:

Penyebab Untuk
Masalah konektivitas jaringan di berbagai pusat data Pengguna Edge Private Cloud
Node ZooKeeper tidak melayani permintaan Pengguna Edge Private Cloud

Klik tautan dalam tabel untuk melihat kemungkinan penyelesaian masalah tersebut.

Masalah konektivitas jaringan di berbagai pusat data

Diagnosis

Cluster ZooKeeper mungkin memiliki node yang tersebar di beberapa region/pusat data, seperti DC-1 dan DC-2. Topologi DC Apigee Edge 2 standar akan memiliki:

  • ZooKeeper server 1, 2, dan 3 sebagai pemilih di DC-1
  • ZooKeeper 4 dan 5 sebagai pemilih dan ZooKeeper 6 sebagai pengamat di DC-2.

Jika wilayah DC-1 mati atau konektivitas jaringan antara DC-1 dan DC-2 rusak, maka Node ZooKeeper tidak dapat memilih pemimpin baru di DC-2 dan gagal berkomunikasi dengan pemimpin {i>node<i}. Pengamat ZooKeeper tidak dapat memilih pemimpin baru dan dua pemilih lainnya di DC-2 tidak memiliki kuorum minimal 3 simpul pemilih untuk memilih pemimpin baru. Dengan demikian, ZooKeepers di DC-2 akan tidak dapat memproses permintaan apa pun. Node ZooKeeper yang tersisa di DC-2 akan terus berulang mencoba menghubungkan kembali ke para pemilih ZooKeeper untuk menemukan pemimpin.

Resolusi

Terapkan solusi berikut untuk mengatasi masalah ini dalam urutan yang ditentukan.

Jika Anda tidak dapat menyelesaikan masalah setelah mencoba solusi ini, harap hubungi Dukungan Apigee.

Solusi #1

  1. Bekerjasamalah dengan administrator jaringan Anda untuk memperbaiki masalah konektivitas jaringan antara pusat data.
  2. Ketika ansambel ZooKeeper dapat berkomunikasi di seluruh pusat data dan memilih Sebagai pemimpin ZooKeeper, node harus responsif dan dapat memproses permintaan.

Solusi #2

  1. Jika konektivitas jaringan membutuhkan waktu untuk diperbaiki, solusinya adalah dengan mengonfigurasi ulang ZooKeeper node di wilayah tempat mereka berada. Misalnya, mengonfigurasi ulang ZooKeeper cluster di DC-2 sehingga 3 node ZooKeeper di wilayah ini adalah semua pemilih dan menghapus server.# di zoo.cfg ZooKeepers dari region DC-1.
    1. Pada contoh berikut, zoo.cfg mengonfigurasi node untuk 2 region tempat DC-1 menggunakan us-ea nama host yang menunjukkan region US-East dan DC-2 menggunakan us-wo nama host yang menunjukkan region US-West. (CATATAN: Hanya konfigurasi relevan yang ditampilkan):
      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
      

      Pada contoh di atas, konfigurasi ulang zoo.cfg sebagai berikut:

      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. Menggunakan kode dengan config, buat file /opt/apigee/customer/application/zookeeper.properties dengan kode berikut:
      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\
      

    Di atas, node dari US-East dihapus, dan node AS-Barat dipromosikan menjadi pemilih saat anotasi :observer dihapus.

  2. Cadangkan /opt/apigee/apigee-zookeeper/conf/zoo.cfg dan lama /opt/apigee/customer/application/zookeeper.properties.

    File ini akan digunakan untuk memulihkan setelan default saat konektivitas jaringan kembali antar pusat data.

  3. Nonaktifkan notasi observer untuk node observer. Untuk melakukannya: tambahkan konfigurasi berikut ke bagian atas /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. Edit file /opt/apigee/data/apigee-zookeeper/data/myid sebagai berikut:

    • Untuk server.1, ubah entri di dalam myid dari 4 menjadi 1.
    • Untuk server.2, ubah myid dari 5 menjadi 2.
    • Untuk server.3, ubah myid dari 6 menjadi 3.
  5. Memulai ulang node ZooKeeper di region tempat Anda mengonfigurasi ulang ZooKeeper .
  6. Ulangi konfigurasi di atas dari langkah #1b hingga langkah# 5 pada semua node ZooKeeper di DC-2.
  7. Validasi bahwa node memiliki posisi teratas:
    $ 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
    

    Output dari perintah ini akan berisi baris yang bertuliskan "mode" diikuti oleh "leader" jika ya adalah pemimpin, atau "pengikut" jika itu adalah pengikut.

    Ketika jaringan antarpusat data terhubung kembali, konfigurasi ZooKeeper perubahan dapat dikembalikan ke node ZooKeeper di DC-2.

Solusi #3

  1. Jika node ZooKeeper di cluster belum dimulai, mulai ulang node tersebut.
  2. Periksa log ZooKeeper untuk mengetahui penyebab node ZooKeeper.

    Log ZooKeeper tersedia di direktori berikut:

    $ 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. Hubungi Dukungan Apigee dan berikan ZooKeeper mencatat untuk memecahkan masalah penyebab node ZooKeeper yang mungkin telah dihentikan.

Node ZooKeeper tidak melayani permintaan

Node ZooKeeper dalam ansambel mungkin menjadi tidak sehat dan tidak dapat merespons klien permintaan. Hal ini dapat disebabkan karena:

  1. Node dihentikan tanpa dimulai ulang.
  2. Node dimulai ulang tanpa mengaktifkan mulai otomatis.
  3. Beban sistem pada node menyebabkan node tersebut menurun atau menjadi tidak responsif.

Diagnosis

  1. Jalankan perintah {i>health check<i} ZooKeeper berikut pada setiap {i>node<i} ZooKeeper dan periksa output-nya:
    1. $ echo "ruok" | nc localhost 2181
      

      Contoh output:

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

      Periksa mode untuk menentukan apakah node ZooKeeper adalah pemimpin atau pengikut.

      Contoh output untuk node ZooKeeper tunggal, lengkap:

      $ 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
      

      Perintah ini mencantumkan variabel ZooKeeper yang dapat digunakan untuk memeriksa kondisi gugus ZooKeeper.

      Contoh output:

      $ 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
      

      Perintah ini mencantumkan statistik tentang kinerja dan klien yang terhubung.

      Contoh output:

      $ 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
      

      Perintah ini memberikan detail lebih lanjut tentang koneksi ZooKeeper.

      Contoh output:

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

      Jika salah satu dari 3 perintah health check terakhir menampilkan pesan berikut:

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

      Kode ini menunjukkan bahwa node ZooKeeper tertentu tidak melayani permintaan.

  2. Periksa log ZooKeeper pada node tertentu dan coba temukan error yang menyebabkan ZooKeeper akan segera berakhir. Log ZooKeeper tersedia di direktori berikut:
    $ 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
    

Resolusi

  1. Mulai ulang semua node ZooKeeper lain di cluster satu per satu.
  2. Jalankan ulang perintah health check ZooKeeper pada setiap node dan lihat apakah Anda mendapatkan respons {i>output<i} tersebut.

Hubungi Dukungan Apigee untuk memecahkan masalah penyebab sistem jika masalah berlanjut atau jika proses mulai ulang tidak menyelesaikan masalah.