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

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:

  1. 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
    
  2. 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

  1. Hãy kiểm tra nhật ký ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log để xem lỗi.
  2. 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)
    
  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 máy chủ.# được ghi chú ở bước #2 hay không.
  5. 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

  1. Hãy kiểm tra nhật ký ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log để xem 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 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)
    
  3. 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:

  1. 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
    
  2. 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
    
  3. 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

  1. 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
    
  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ã quá trình được ghi vào tệp này.
  3. 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

  1. 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).
  2. 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:

  1. Hãy kiểm tra nhật ký ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log để xem lỗi.
  2. 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.
  3. 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.