Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
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 |
---|---|
ID ZooKeeper yang salah dikonfigurasi | Pengguna Edge Private Cloud |
Port ZooKeeper sedang digunakan | Pengguna Edge Private Cloud |
ID proses salah dalam file apigee-zookeeper.pid | Pengguna Edge Private Cloud |
Kegagalan Pemilu Pemimpin Penjaga Kebun Binatang | Pengguna Edge Private Cloud |
Klik link dalam tabel untuk melihat kemungkinan resolusi terkait penyebab masalah tersebut.
ID ZooKeeper yang salah dikonfigurasi
Bagian berikut memberikan ringkasan file myid dan menjelaskan cara mendiagnosis dan menyelesaikan masalah kesalahan konfigurasi.
Ringkasan file myid
Di setiap node ZooKeeper, ada dua file:
- File
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
yang berisi daftar IP untuk semua node ZooKeeper dalam cluster.Misalnya, jika
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
berisi IP dari 3 bagian node ZooKeeper 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
- File
/opt/apigee/data/apigee-zookeeper/data/myid
berisi satu baris teks yang sesuai dengan nomor server node ZooKeeper tertentu. Myid server 1 akan berisi teks "1" dan bukan yang lainnya. ID harus unik dalam ansambel dan harus memiliki nilai antara 1 dan 255.Misalnya, pada server ZooKeeper.1, file
/opt/apigee/data/apigee-zookeeper/data/myid
hanya boleh berisi teks 1 seperti yang ditunjukkan di bawah ini:$ cat myid 1
Diagnosis
- Periksa log ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
untuk menemukan error. - Jika Anda melihat pesan WARN yang mirip dengan “Koneksi rusak untuk id #, ID saya = #”, seperti yang ditunjukkan pada gambar di bawah ini, maka kemungkinan penyebab masalah ini adalah karena server # dalam file myid 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)
- Periksa file
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
dan catat server.# untuk node ZooKeeper saat ini. - Periksa file
/opt/apigee/data/apigee-zookeeper/data/myid
dan lihat apakah teks dalam file ini cocok dengan server.# yang dicatat di langkah #2. - Jika terdapat ketidakcocokan, berarti Anda telah mengidentifikasi penyebab kegagalan ZooKeeper.
Resolusi
Jika file myid tidak dikonfigurasi dengan benar, edit file myid dan ganti nilainya dengan teks yang benar yang mewakili parameter server.# di kebun binatang.cfg.
Port ZooKeeper sedang digunakan
Diagnosis
- Periksa log
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
ZooKeeper untuk menemukan error. - Jika Anda melihat pengecualian
java.net.BindException: Address already in use
saat mengikat ke port #2181, seperti ditunjukkan dalam gambar di bawah, ini menunjukkan bahwa port ZooKeeper 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)
- Gunakan perintah netstat di bawah untuk mengonfirmasi bahwa port ZooKeeper 2181 memang digunakan
oleh proses lain:
netstat -an | grep 2181
Resolusi
Jika port ZooKeeper 2181 masih digunakan, ikuti langkah-langkah di bawah untuk mengatasi masalah ini:
- Gunakan perintah
netstat
untuk menemukan proses yang menyimpan port 2181. Menghentikan proses yang menggunakan port ZooKeeper 2181:$ netstat -antp | grep 2181 tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 28016/java <defunct> $ kill -9 28016
- Bersihkan file pid dan kunci jika ada:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- 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, prosesnya mungkin akan gagal karena
file apigee-zookeeper.pid
berisi pid lama/salah dan bukan pid dari proses ZooKeeper yang saat ini
berjalan. Hal ini dapat terjadi jika proses ZooKeeper dihentikan secara tidak terduga atau
tiba-tiba karena alasan tertentu dan file apigee-zookeeper.pid
tidak dihapus.
Diagnosis
- Dapatkan ID proses dari proses ZooKeeper yang sedang berjalan dengan menjalankan perintah
ps
:ps -ef | grep zookeeper
- Periksa apakah file
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
ada. Jika ada, catat ID proses yang ditulis ke dalam file ini. - Bandingkan ID proses yang diambil dari langkah #1 dan #2. Jika berbeda, penyebab
masalah ini adalah memiliki ID proses yang salah di
apigee-zookeeper.pid file.
Resolusi
- Edit file apigee-zookeeper.pid dan ganti ID proses yang salah dengan ID proses yang benar yang diperoleh dari perintah ps (langkah #1 di atas).
- Mulai ulang ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Kegagalan Pemilu Pemimpin ZooKeeper
Diagnosis
Untuk mendiagnosis:
- Periksa log ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
untuk menemukan error. - Periksa apakah ada perubahan konfigurasi yang dapat menyebabkan pemilihan pemimpin ZooKeeper gagal.
- Periksa
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
dan pastikan semua ZooKeepers dalam cluster memiliki jumlah dan alamat IP yang benar untuk parameter server.#. Perhatikan juga bahwa agar pemilihan pemimpin berhasil, harus ada minimal 3 pemilih dan jumlah pemilih harus diberi nomor ganjil. Jika pemilih terlalu sedikit, misalnya hanya 2 pemilih, kuorum tidak dapat memutuskan siapa yang menjadi pemimpin hanya di antara 2 pemilih.
Resolusi
Biasanya, kegagalan pemilu ZooKeeper disebabkan oleh myid yang salah dikonfigurasi. Gunakan resolusi di ZooKeeper myid yang Salah Dikonfigurasikan untuk mengatasi kegagalan pemilu.
Jika masalah berlanjut dan diagnosis lebih lanjut diperlukan, hubungi Dukungan Apigee Edge.