Không thể khởi động Vườn thú

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Dấu hiệu

Không thể bắt đầu quy trình ZooKeeper.

Thông báo lỗi

Khi bạn cố gắng bắt đầu quy trình ZooKeeper, thông báo lỗi sau sẽ được trả về cho biết ZooKeeper không thể bắt đầu:

+ 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 đây liệt kê những nguyên nhân có thể gây ra vấn đề này:

Nguyên nhân Cho
Định cấu hình sai myid của ZooKeeper Người dùng Edge Private Cloud
Đang sử dụng cổng ZooKeeper Người dùng Edge Private Cloud
Mã nhận dạng quy trình không chính xác trong tệp apigee-zookeeper.pid Người dùng Edge Private Cloud
Lỗi bầu chọn người lãnh đạo ZooKeeper Người dùng Edge Private Cloud

Nhấp vào một đường liên kết trong bảng để xem các giải pháp có thể cho nguyên nhân đó.

myid 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 và mô tả cách chẩn đoán cũng như 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ó 2 tệp:

  1. Tệp /opt/apigee/apigee-zookeeper/conf/zoo.cfg chứa danh sách các 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 thuộc 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
  2. Tệp /opt/apigee/data/apigee-zookeeper/data/myid chứa một dòng văn bản duy nhất 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. Giá trị nhận dạng phải là duy nhất trong nhóm và phải có giá trị từ 1 đến 255.

    Ví dụ: trên máy chủ ZooKeeper.1, tệp /opt/apigee/data/apigee-zookeeper/data/myid chỉ chứa văn bản 1 như minh hoạ bên dưới:

    $ cat myid
    1

Chẩn đoán

  1. Kiểm tra nhật ký ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log để tìm lỗi.
  2. Nếu bạn thấy thông báo CẢNH BÁO tương tự như "Connection broken for id #, my id = #" (Kết nối bị gián đoạn cho mã nhận dạng #, mã nhận dạng của tôi = #), như trong hình bên dưới, thì nguyên nhân có thể gây ra vấn đề này 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)
  3. 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.
  4. 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 server.# được ghi chú trong bước #2 hay không.
  5. Nếu có sự 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ị bằng 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

  1. Kiểm tra nhật ký ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log để biết các lỗi.
  2. 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 bên dưới, thì điều này cho thấy cổng 2181 của ZooKeeper đang được một quy trình khác sử dụng. Do đó, ZooKeeper không khởi động được.
    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. Sử dụng lệnh netstat bên dưới để 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 2181 của ZooKeeper vẫn đang được sử dụng, hãy làm theo các bước bên dưới để giải quyết vấn đề này:

  1. Sử dụng lệnh netstat để tìm quy trình đang giữ cổng 2181. Dừng 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
  2. Dọn dẹp các tệp pid và khoá nếu có:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
  3. Khởi động lại ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart

Mã quy trình không chính xác trong tệp apigee-zookeeper.pid

Khi bạn cố gắng dừng/khởi động lại ZooKeeper, thao tác này có thể không thành công vì 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 đang chạy. Điều này có thể xảy ra nếu quy trình ZooKeeper bị chấm dứt đột ngột hoặc bất ngờ vì một lý do nào đó và tệp apigee-zookeeper.pid không bị xoá.

Chẩn đoán

  1. Lấy mã nhận dạng quy trình của quy trình ZooKeeper hiện đang chạy bằng cách chạy lệnh ps:
    ps -ef | grep zookeeper
  2. 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ã nhận dạng quy trình được ghi vào tệp này.
  3. So sánh mã nhận dạng quy trình lấy từ bước 1 và 2. Nếu những thông tin này khác nhau, thì nguyên nhân gây ra vấn đề này là do bạn có mã quy trình không chính xác trong apigee-zookeeper.pid file.

Độ phân giải

  1. Chỉnh sửa tệp apigee-zookeeper.pid và thay thế mã nhận dạng quy trình không chính xác bằng mã nhận dạng quy trình chính xác lấy được từ lệnh ps (bước 1 ở trên).
  2. Khởi động lại ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart

Lỗi bầu chọn người lãnh đạo ZooKeeper

Chẩn đoán

Cách chẩn đoán:

  1. Kiểm tra nhật ký ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log để tìm lỗi.
  2. Kiểm tra xem có thay đổi nào về cấu hình có thể khiến ZooKeeper không bầu được người lãnh đạo hay không.
  3. Kiểm tra /opt/apigee/apigee-zookeeper/conf/zoo.cfg và đảm bảo rằng tất cả ZooKeeper trong cụm đều có số lượng và địa chỉ IP phù hợp cho tham số server.#. Ngoài ra, xin lưu ý rằng để quá trình bầu chọn người đứng đầu thành công, cần có tối thiểu 3 người bỏ phiếu và số người bỏ phiếu phải là số lẻ. Nếu có quá ít cử tri, chẳng hạn như chỉ có 2 cử tri, thì không thể đạt được số cử tri tối thiểu để quyết định người lãnh đạo trong số 2 cử tri.

Độ phân giải

Thông thường, lỗi bầu chọn ZooKeeper là do myid được định cấu hình sai. Sử dụng giải pháp trong myid ZooKeeper bị định cấu hình sai để giải quyết lỗi bầu cử.

Nếu vấn đề vẫn tiếp diễn và bạn cần chẩn đoán thêm, hãy liên hệ với Nhóm hỗ trợ Apigee Edge.