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 quy trình ZooKeeper.

Thông báo lỗi

Khi bạn cố khởi động quy trình ZooKeeper, thông báo lỗi sau sẽ đượ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 đây liệt kê các nguyên nhân có thể gây ra sự cố này:

Nguyên nhân Cho
Sai cấu hình của myid trong ZooKeeper 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 bầu cử nhà lãnh đạo củaZooKeeper Người dùng Edge Private Cloud

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

Myid trong 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, đồng thời 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 phương thức 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 đơn của văn bản tương ứng với số máy chủ của nút ZooKeeper cụ thể đó. Thần myid của máy chủ 1 sẽ chứa văn bản "1" và không gì khác. Mã nhận dạng phải là duy nhất trong bộ đồng phục 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ư minh hoạ dưới đây:

    $ 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 .
  2. Nếu bạn thấy thông báo WARN tương tự như "Kết nối bị hỏng đối với mã nhận dạng #, mã nhận dạng của tôi = #", như minh hoạ trong hình bên dưới, thì nguyên nhân có thể gây ra sự cố 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 liệu văn bản trong tệp này khớp với máy chủ.# được ghi chú ở bước #2.
  5. Nếu thông tin không khớp, tức là bạn đã xác định được nguyên nhân khiến ZooKeeper không thể đầu.

Độ 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 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 để tìm .
  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, điều đó cho biết ZooKeeper cổng 2181 đang được một quy trình khác sử dụng. Do đó, bạn 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 đang thực sự được sử dụng của một quy trình khác:
    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 vấn đề:

  1. Sử dụng lệnh netstat để tìm quy trình đang lưu giữ cổng 2181. Tắt 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 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ố dừng/khởi động lại ZooKeeper, việc này có thể không thành công do Tệp apigee-zookeeper.pid chứa pid cũ hơn/không chính xác và không phải là pid hiện tại chạy quy trình ZooKeeper. Đ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 độ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 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ó phải không đã tồn tại. Nếu có, hãy ghi lại mã định danh tiến trình được ghi vào tệp này.
  3. So sánh các mã quy trình được lấy ở bước 1 và bước 2. Nếu chúng khác nhau, 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 và thay thế mã nhận dạng quy trình không chính xác bằng mã chính xác tiến trình id nhận đượ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 bầu cử người lãnh đạo trong 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 .
  2. Kiểm tra xem có thay đổi nào về cấu hình có thể dẫn đến việc bầu cử ZooKeeper đối với nhà lãnh đạo thất bại.
  3. Hãy kiểm tra /opt/apigee/apigee-zookeeper/conf/zoo.cfg và đảm bảo tất cả ZooKeepers trong cụm có số điện thoại và địa chỉ IP phù hợp cho máy chủ.# tham số. Ngoài ra, xin lưu ý rằng để cuộc bầu cử lãnh đạo thành công, cuộc bầu cử phải có tối thiểu 3 cử tri và số 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, không thể có đại diện để quyết định người lãnh đạo chỉ với 2 cử tri.

Độ phân giải

Thông thường, lỗi bầu cử ZooKeeper là do một myid bị định cấu hình sai. Sử dụng độ phân giải trong Định cấu hình sai ZooKeeper myid để giải quyết vấn đề bầu cử không thành công.

Nếu sự cố 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 Edge.