Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
Triệu chứng
Không thể bắt đầu quá trình ZooKeeper.
Thông báo lỗi
Khi bạn cố gắng bắt đầu quá trình ZooKeeper, thông báo lỗi sau được trả về cho biết rằng không thể khởi động ZooKeeper:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
Các nguyên nhân có thể
Bảng sau liệt kê các nguyên nhân có thể gây ra vấn đề này:
Nguyên nhân | Cho |
---|---|
Myid ZooKeeper bị định cấu hình sai | Người dùng Edge Private Cloud |
Cổng ZooKeeper đang được sử dụng | Người dùng Edge Private Cloud |
Mã quy trình không chính xác trong tệp apigee-zookeeper.pid | Người dùng Edge Private Cloud |
Thất bại trong việc bầu cử lãnh đạo ZooKeeper | Người dùng Edge Private Cloud |
Hãy nhấp vào một đường liên kết trong bảng để xem các giải pháp có thể áp dụng cho nguyên nhân đó.
Myid của ZooKeeper bị định cấu hình sai
Các phần sau đây cung cấp thông tin tổng quan về tệp myid, cũng như mô tả cách chẩn đoán và giải quyết các vấn đề về cấu hình sai.
Tổng quan về tệp myid
Trên mỗi nút ZooKeeper, có hai tệp:
- Tệp
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
chứa danh sách IP cho tất cả các nút ZooKeeper trong cụm.Ví dụ: nếu
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
chứa IP của 3 nút ZooKeeper một phần của cụm như sau:server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
- Tệp
/opt/apigee/data/apigee-zookeeper/data/myid
chứa một dòng văn bản tương ứng với số máy chủ của nút ZooKeeper cụ thể đó. Myid của máy chủ 1 sẽ chứa văn bản "1" và không có nội dung nào khác. Mã nhận dạng phải là duy nhất trong tập hợp và phải có giá trị nằm trong khoảng từ 1 đến 255.Ví dụ: trên máy chủ ZooKeeper.1, tệp
/opt/apigee/data/apigee-zookeeper/data/myid
chỉ nên chứa văn bản 1 như hiển thị dưới đây:$ cat myid 1
Chẩn đoán
- Hãy kiểm tra nhật ký ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
để xem lỗi. - Nếu bạn thấy thông báo WARN tương tự như "Kết nối bị lỗi vì id #, id của tôi = #", như trong hình bên dưới thì nguyên nhân có thể là do máy chủ # trong tệp myid bị định cấu hình sai hoặc bị hỏng.
[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)
- Kiểm tra tệp
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
và ghi lại server.# cho nút ZooKeeper hiện tại. - Kiểm tra tệp
/opt/apigee/data/apigee-zookeeper/data/myid
và xem văn bản trong tệp này có khớp với máy chủ.# được ghi chú ở bước #2 hay không. - Nếu thông tin không khớp thì bạn đã xác định được nguyên nhân khiến ZooKeeper không khởi động được.
Độ phân giải
Nếu tệp myid được định cấu hình không chính xác, hãy chỉnh sửa tệp myid và thay thế giá trị thành một văn bản chính xác đại diện cho tham số server.# trong Zoo.cfg.
Cổng ZooKeeper đang được sử dụng
Chẩn đoán
- Hãy kiểm tra
nhật ký ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
để xem các lỗi. - Nếu bạn nhận thấy ngoại lệ
java.net.BindException: Address already in use
trong khi liên kết với cổng #2181, như minh hoạ trong hình dưới đây, thì tức là có một quy trình khác đang sử dụng cổng ZooKeeper 2181. Do đó, không thể khởi động 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)
- Sử dụng lệnh netstat dưới đây để xác nhận rằng cổng ZooKeeper 2181 thực sự đang được một quy trình khác sử dụng:
netstat -an | grep 2181
Độ phân giải
Nếu cổng ZooKeeper 2181 vẫn đang được sử dụng, hãy làm theo các bước dưới đây để giải quyết vấn đề này:
- Sử dụng lệnh
netstat
để tìm quy trình đang giữ cổng 2181. Loại bỏ quy trình đang sử dụng cổng 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
- Dọn dẹp pid và khóa tệp nếu có:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- Khởi động lại ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Mã quy trình trong tệp apigee-zookeeper.pid không chính xác
Khi bạn cố gắng dừng/khởi động lại ZooKeeper, có thể tệp sẽ không thành công do tệp apigee-zookeeper.pid
chứa pid cũ/không chính xác chứ không phải pid của quy trình ZooKeeper hiện đang chạy. Điều này có thể xảy ra nếu quá trình ZooKeeper chấm dứt đột ngột hoặc đột ngột vì lý do nào đó và tệp apigee-zookeeper.pid
không bị xoá.
Chẩn đoán
- Lấy mã nhận dạng của tiến trình ZooKeeper hiện đang chạy bằng cách chạy lệnh
ps
:ps -ef | grep zookeeper
- Kiểm tra xem tệp
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
có tồn tại hay không. Nếu có, hãy ghi lại mã quá trình được ghi vào tệp này. - So sánh mã quy trình được thực hiện từ bước 1 và bước 2. Nếu có sự khác biệt, thì nguyên nhân của vấn đề này là có mã quy trình không chính xác trong
apigee-zookeeper.pid file.
Độ phân giải
- Chỉnh sửa tệp apigee-zookeeper.pid rồi thay thế mã nhận dạng quy trình không chính xác bằng mã quy trình chính xác lấy được từ lệnh ps (bước #1 ở trên).
- Khởi động lại ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Thất bại trong việc bầu cử thủ lĩnh ZooKeeper
Chẩn đoán
Cách chẩn đoán:
- Hãy kiểm tra nhật ký ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
để xem lỗi. - Kiểm tra xem có thay đổi nào về cấu hình có thể khiến việc bầu cử đầu của ZooKeeper dẫn đầu không thành công hay không.
- Kiểm tra
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
và đảm bảo tất cả ZooKeeper trong cụm đều có số và địa chỉ IP thích hợp cho tham số server.#. Ngoài ra, xin lưu ý rằng để cuộc bầu cử lãnh đạo diễn ra thành công, tối thiểu bạn phải có ít nhất 3 cử tri và số lượng cử tri phải được đánh số lẻ. Nếu có quá ít cử tri, chẳng hạn như chỉ có 2 cử tri, thì không thể tập hợp lại một số cử tri để quyết định một người lãnh đạo trong số chỉ 2 cử tri.
Độ phân giải
Thông thường, lỗi bầu cử ZooKeeper là do myid bị định cấu hình sai. Sử dụng độ phân giải trong ZooKeeper myid bị định cấu hình sai để giải quyết lỗi bầu cử không thành công.
Nếu vấn đề vẫn tiếp diễn và cần chẩn đoán thêm, hãy liên hệ với Bộ phận hỗ trợ Apigee.