Tidak dapat Memulai Zookeeper

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

ini.

Gejala

Tidak dapat memulai proses ZooKeeper.

Pesan error

Saat Anda mencoba memulai proses ZooKeeper, pesan error berikut akan ditampilkan yang menunjukkan bahwa ZooKeeper tidak dapat dimulai:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

Kemungkinan penyebab

Tabel berikut mencantumkan kemungkinan penyebab masalah ini:

Penyebab Untuk
Myid ZooKeeper yang salah dikonfigurasi Pengguna Edge Private Cloud
Port ZooKeeper digunakan Pengguna Edge Private Cloud
ID proses dalam file apigee-zookeeper.pid salah Pengguna Edge Private Cloud
Kegagalan Pemilu Pemimpin ZooKeeper Pengguna Edge Private Cloud

Klik tautan dalam tabel untuk melihat kemungkinan penyelesaian masalah tersebut.

Myid ZooKeeper yang salah dikonfigurasi

Bagian berikut memberikan gambaran umum tentang {i>file<i} {i>myid<i} dan menjelaskan cara mendiagnosis dan menyelesaikan masalah kesalahan konfigurasi.

Ringkasan file myid

Di setiap node ZooKeeper, ada dua file:

  1. File /opt/apigee/apigee-zookeeper/conf/zoo.cfg yang berisi daftar IP untuk semua node ZooKeeper di cluster.

    Misalnya, jika /opt/apigee/apigee-zookeeper/conf/zoo.cfg berisi elemen IP dari 3 node ZooKeeper sebagai bagian dari cluster sebagai berikut:

    server.1=11.11.11.11:2888:3888
    server.2=22.22.22.22:2888:3888
    server.3=33.33.33.33:2888:3888
    
  2. File /opt/apigee/data/apigee-zookeeper/data/myid berisi satu baris yang sesuai dengan nomor server dari {i>node<i} ZooKeeper tertentu. Myid dari server 1 akan berisi teks "1" dan tidak ada lagi. Id harus unik dalam ansambel dan harus memiliki nilai antara 1 dan 255.

    Misalnya, di ZooKeeper server.1, File /opt/apigee/data/apigee-zookeeper/data/myid hanya boleh berisi teks 1 sebagaimana ditunjukkan di bawah ini:

    $ cat myid
    1
    

Diagnosis

  1. Periksa log ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log untuk yang sama.
  2. Jika Anda melihat pesan WARN yang serupa dengan “Koneksi terputus untuk id #, my id = #”, seperti yang ditunjukkan pada gambar di bawah ini, maka penyebab yang mungkin untuk masalah ini adalah server # di file {i>myid<i} salah konfigurasi atau rusak.
    [myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] -
      Connection broken for id 2, my id = 2, error = java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:375)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.
          run(QuorumCnxManager.java:747)
    
  3. Periksa file /opt/apigee/apigee-zookeeper/conf/zoo.cfg dan catat server.# untuk simpul ZooKeeper.
  4. Periksa file /opt/apigee/data/apigee-zookeeper/data/myid dan lihat apakah teks dalam file ini cocok dengan server.# yang tercantum pada langkah #2.
  5. Jika ada ketidakcocokan, berarti Anda telah mengidentifikasi penyebab ZooKeeper gagal memulai.

Resolusi

Jika file myid tidak dikonfigurasi dengan benar, edit file myid tersebut dan ganti nilainya ke teks yang benar mewakili parameter server.# di Zoo.cfg.

Port ZooKeeper sedang digunakan

Diagnosis

  1. Periksa log ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log untuk yang sama.
  2. Jika Anda melihat pengecualian java.net.BindException: Address already in use ketika mengikat ke porta #2181, seperti ditunjukkan dalam gambar di bawah ini, ini menunjukkan bahwa ZooKeeper porta 2181 sedang digunakan oleh proses lain. Oleh karena itu, ZooKeeper tidak dapat dimulai.
    2017-04-26 07:00:10,420 [myid:3] - INFO  [main:NIOServerCnxnFactory@94] -
      binding to port 0.0.0.0/0.0.0.0:2181
    2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] -
      Unexpected exception, exiting abnormally
      java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
    
  3. Gunakan perintah netstat di bawah untuk mengonfirmasi bahwa ZooKeeper port 2181 benar-benar digunakan oleh proses lain:
    netstat -an | grep 2181
    

Resolusi

Jika port ZooKeeper 2181 masih digunakan, ikuti langkah-langkah di bawah untuk mengatasinya masalah:

  1. Gunakan perintah netstat untuk menemukan proses yang mempertahankan port 2181. Hentikan proses yang menggunakan ZooKeeper port 2181:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
    
  2. Bersihkan pid dan kunci file jika ada:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. Mulai ulang ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

ID proses dalam file apigee-zookeeper.pid salah

Saat Anda mencoba menghentikan/memulai ulang ZooKeeper, tindakan itu mungkin gagal karena File apigee-zookeeper.pid berisi pid yang lebih lama/salah dan bukan pid yang saat ini menjalankan proses {i> ZooKeeper<i}. Ini dapat terjadi jika proses ZooKeeper berhenti secara tidak terduga atau tiba-tiba karena alasan tertentu dan file apigee-zookeeper.pid tidak dihapus.

Diagnosis

  1. Dapatkan ID proses dari proses ZooKeeper yang sedang berjalan dengan menjalankan Perintah ps:
    ps -ef | grep zookeeper
    
  2. Periksa apakah file /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid sudah ada. Jika ada, catat ID proses yang ditulis ke dalam file ini.
  3. Bandingkan ID proses yang diambil dari langkah #1 dan #2. Jika mereka berbeda, maka penyebab untuk masalah ini memiliki ID proses yang salah di apigee-zookeeper.pid file.

Resolusi

  1. Edit file apigee-zookeeper.pid dan ganti ID proses yang salah dengan ID proses yang benar ID proses yang diperoleh dari perintah ps (langkah #1 di atas).
  2. Mulai ulang ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Kegagalan Pemilu Pemimpin ZooKeeper

Diagnosis

Untuk mendiagnosis:

  1. Periksa log ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log untuk yang sama.
  2. Periksa apakah ada perubahan konfigurasi yang dapat menyebabkan pemilihan ZooKeeper pemimpin untuk gagal.
  3. Periksa /opt/apigee/apigee-zookeeper/conf/zoo.cfg dan pastikan semua ZooKeeper di cluster memiliki jumlah dan alamat IP yang tepat untuk parameter server.#. Perhatikan juga bahwa agar pemilihan pemimpin berhasil harus ada minimal 3 pemilih dan jumlah pemilih harus bernomor ganjil. Jika ada terlalu sedikit pemilih, seperti hanya 2 pemilih, tidak dapat mencapai kuorum untuk memutuskan pemimpin di antara hanya 2 pemilih.

Resolusi

Biasanya, kegagalan pemilihan ZooKeeper disebabkan oleh konfigurasi myid yang salah. Gunakan resolusi di ZooKeeper myid yang salah dikonfigurasi untuk mengatasi kegagalan pemilu.

Jika masalah berlanjut dan diperlukan diagnosis lebih lanjut, hubungi Dukungan Apigee Edge.