查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
問題
無法啟動 ZooKeeper 程序。
錯誤訊息
當您嘗試啟動 ZooKeeper 程序時,會傳回以下錯誤訊息 表示無法啟動 ZooKeeper:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
可能原因
下表列出這個問題的可能原因:
原因 | 適用於 |
---|---|
設定錯誤的 ZooKeeper 我的 ID | Edge Private Cloud 使用者 |
ZooKeeper 通訊埠正在使用中 | Edge Private Cloud 使用者 |
apigee-zookeeper.pid 檔案中的程序 ID 有誤 | Edge Private Cloud 使用者 |
ZooKeeper 領袖選舉失敗 | Edge Private Cloud 使用者 |
按一下表格中的連結,查看可能的解決方式。
設定錯誤的 ZooKeeper 我的 ID
以下各節提供 myid 檔案總覽,並說明如何診斷及 即可解決設定錯誤的問題
myid 檔案總覽
每個 ZooKeeper 節點上有兩個檔案:
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
檔案,其中包含 叢集內所有 ZooKeeper 節點的 IP。舉例來說,如果
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
包含 叢集內 3 個 ZooKeeper 節點部分的 IP,如下所示: 敬上server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
/opt/apigee/data/apigee-zookeeper/data/myid
檔案中只有一行 而該文字會對應至該特定 ZooKeeper 節點的伺服器編號。神秘 伺服器 1 會包含文字「1」其他東西這個 ID 在組合中不得重複 且值介於 1 到 255 之間以 ZooKeeper 伺服器 為例,
/opt/apigee/data/apigee-zookeeper/data/myid
檔案只能包含文字 1 如下所示:$ cat myid 1
診斷
- 查看 ZooKeeper 記錄
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
: 發生錯誤。 - 如果您看到 WARN 訊息,類似「ID 為 #,我的 id = # 的連線已中斷」,
如下圖所示,這個問題的可能原因為伺服器編號
中的檔案設定錯誤或損毀。
[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)
- 檢查
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
檔案,並記下 server.#。 - 檢查
/opt/apigee/data/apigee-zookeeper/data/myid
檔案,看看當中是否包含文字 與步驟 2 記下的伺服器相符。 - 如果兩者不一致,就表示您已找出 ZooKeeper 無法 。
解析度
如果 myid 檔案設定不正確,請編輯 myid 檔案並將值換成 指定在 Zoo.cfg 中代表 server.# 參數的正確文字。
正在使用 ZooKeeper 通訊埠
診斷
- 查看 ZooKeeper 記錄
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
: 發生錯誤。 - 如果
java.net.BindException: Address already in use
繫結至通訊埠 #2181 (如下圖所示) 時,表示 ZooKeeper 其他程序正在使用通訊埠 2181。因此,無法啟動 ZooKeeper。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)
- 請使用以下 netstat 指令來確認是否正在使用 ZooKeeper 通訊埠 2181
其他程序:
netstat -an | grep 2181
解析度
如果 ZooKeeper 通訊埠 2181 仍在使用中,請按照下列步驟解決這個問題 問題:
- 使用
netstat
指令找出通訊埠 2181 的處理程序。 終止使用 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
- 清理 pid 並鎖定現有的檔案 (如果有的話):
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- 重新啟動 ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
apigee-zookeeper.pid 檔案中的程序 ID 不正確
當您嘗試停止/重新啟動 ZooKeeper 時,可能會失敗,因為
apigee-zookeeper.pid
檔案包含先前/不正確的 pid,以及目前變更的 pid
執行 ZooKeeper 程序。如果 ZooKeeper 程序意外終止,就會發生這種情況。
意外發現,且 apigee-zookeeper.pid
檔案並未刪除。
診斷
- 如要取得目前執行中的 ZooKeeper 程序程序 ID,請執行
ps
指令:ps -ef | grep zookeeper
- 確認
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
檔案 存在。如果該程序 ID 存在,請記下寫入這個檔案的程序 ID。 - 比較在步驟 1 和 2 中取得的程序 ID。如果兩者不同
這個問題的
apigee-zookeeper.pid file.
包含不正確的程序 ID
解析度
- 請編輯 apigee-zookeeper.pid 檔案,並將錯誤的程序 ID 替換為正確的程序 ID 從 ps 指令取得的程序 ID (上述的步驟 #1)。
- 重新啟動 ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
ZooKeeper 領袖選舉失敗
診斷
診斷方式:
- 查看 ZooKeeper 記錄
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
: 發生錯誤。 - 檢查是否有任何可能影響 ZooKeeper 選舉的設定變更 無法達成目標
- 請檢查
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
,確認全部 叢集中的 ZooKeepers 有適當的 Server.# 參數數量和 IP 位址。 另請注意,如要繼續選主選舉結果,至少投票人必須至少達 3 人 和投票者人數應為奇數如果投票者人數太少,例如只有 2 人 投票者,但無法透過仲裁決定一名選民的票數。
解析度
通常,ZooKeeper 選舉失敗的原因通常是我的 ID 設定錯誤。請使用以下解析度: 設定錯誤的 ZooKeeper myid 以解決選舉失敗問題。
如果問題仍未解決,需要進一步診斷,請與 Apigee Edge 支援團隊聯絡。