Lỗi mất kết nối trong 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

Các sự cố kết nối với ZooKeeper có thể biểu hiện dưới các triệu chứng như:

  1. Lỗi triển khai proxy API
  2. Không thực hiện được lệnh gọi API Quản lý do lỗi 5XX
  3. Bộ định tuyến hoặc Bộ xử lý thư không khởi động được
  4. Các thành phần của Analytics báo cáo tình trạng mất kết nối với ZooKeeper trong system.logs

Thông báo lỗi

Sau đây là ví dụ về các thông báo lỗi có thể quan sát được khi có mất kết nối tới(các) nút ZooKeeper.

  1. Lỗi sau được trả về trong nhật ký Máy chủ quản lý khi triển khai API Proxy không thành công do mất kết nối với ZooKeeper:
    org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() :
    Retry path existence path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() :
      Could not detect existence of path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable ,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() :
      ServiceDeployer.deploy() : Got a life cycle exception while starting service
      [ServerRegistrationService, Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] :
      com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence,
      message = Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      associated contexts = []} 2015-03-25 10:22:39,811
    org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() :
    Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException:
    Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable
      at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339)
      ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(
      ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
    
  2. Trong khi khởi động, Bộ định tuyến và Bộ xử lý thư sẽ kết nối với ZooKeeper. Nếu có sự cố kết nối với ZooKeeper thì các thành phần này sẽ không khởi động được với những sự cố sau lỗi:
    2017-08-01 23:20:00,404  CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl
      - CuratorFrameworkImpl.logError() : Background operation retry gave up
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
      at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na]
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
    
  3. Giao diện người dùng Edge có thể hiển thị lỗi sau đây cho biết không thể kiểm tra trạng thái triển khai của các Proxy API:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

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
Vấn đề kết nối mạng giữa các trung tâm dữ liệu Người dùng Edge Private Cloud
Nút ZooKeeper không phân phát các yêu cầu 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 đó.

Vấn đề về kết nối mạng giữa các trung tâm dữ liệu khác nhau

Chẩn đoán

Cụm ZooKeeper có thể có các nút trải rộng qua nhiều khu vực/trung tâm dữ liệu, chẳng hạn như DC-1 và DC-2. Cấu trúc liên kết thông thường của Apigee Edge 2 DC sẽ:

  • Các máy chủ ZooKeeper 1, 2 và 3 với tư cách là cử tri trong DC-1
  • ZooKeeper 4 và 5 với tư cách là người bỏ phiếu và ZooKeeper 6 với tư cách là người quan sát trong DC-2.

Nếu vùng DC-1 bị trục trặc hoặc kết nối mạng giữa DC-1 và DC-2 bị hỏng, thì Các nút ZooKeeper không thể bầu người lãnh đạo mới trong DC-2 và chúng không liên lạc được với lãnh đạo nút. Các quan sát viên của ZooKeeper không thể bầu ra người lãnh đạo mới và hai cử tri còn lại trong DC-2 không có đại biểu gồm ít nhất 3 nút cử tri để bầu người lãnh đạo mới. Do đó, ZooKeepers trong DC-2 sẽ không thể xử lý bất kỳ yêu cầu nào. Các nút ZooKeeper còn lại trong DC-2 sẽ tiếp tục lặp lại đang thử kết nối lại với người bỏ phiếu trong ZooKeeper để tìm người dẫn đầu.

Độ phân giải

Áp dụng các giải pháp sau đây để giải quyết vấn đề này theo thứ tự đã chỉ định.

Nếu bạn không thể giải quyết sự cố sau khi thử các giải pháp này, vui lòng liên hệ với Bộ phận hỗ trợ Apigee.

Giải pháp #1

  1. Hãy làm việc với quản trị viên mạng của bạn để khắc phục sự cố kết nối mạng giữa trung tâm dữ liệu.
  2. Khi tập thể ZooKeeper có thể giao tiếp giữa các trung tâm dữ liệu và chọn Trưởng nhóm ZooKeeper, các nút sẽ trở nên hoạt động tốt và có thể xử lý yêu cầu.

Giải pháp #2

  1. Nếu mất thời gian để sửa chữa kết nối mạng, thì giải pháp là hãy định cấu hình lại Nút ZooKeeper trong khu vực nơi nút hoạt động. Ví dụ: định cấu hình lại ZooKeeper cụm trong DC-2 để 3 nút ZooKeeper trong khu vực này đều là cử tri và xoá server.#zoo.cfg của khu vực ZooKeepers từ DC-1.
    1. Trong ví dụ sau, zoo.cfg định cấu hình các nút cho 2 khu vực nơi DC-1 sử dụng us-ea tên máy chủ biểu thị khu vực miền Đông Hoa Kỳ và DC-2 sử dụng tên máy chủ us-wo biểu thị khu vực Miền Tây Hoa Kỳ. (LƯU Ý: Chỉ những cấu hình có liên quan mới được hiển thị):
      server.1=zk01ea.us-ea.4.apigee.com:2888:3888
      server.2=zk02ea.us-ea.4.apigee.com:2888:3888
      server.3=zk03ea.us-ea.4.apigee.com:2888:3888
      server.4=zk04wo.us-wo.4.apigee.com:2888:3888
      server.5=zk05wo.us-wo.4.apigee.com:2888:3888
      server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer
      

      Trong ví dụ trên, hãy định cấu hình lại zoo.cfg như sau:

      server.1=zk04wo.us-wo.4.apigee.com:2888:3888
      server.2=zk05wo.us-wo.4.apigee.com:2888:3888
      server.3=zk06wo.us-wo.4.apigee.com:2888:3888
      
    2. Sử dụng mã có cấu hình, tạo một tệp /opt/apigee/customer/application/zookeeper.properties với các thành phần sau:
      conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\
      \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\
      \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\
      

    Trong phần trên, các nút từ Phía Đông Hoa Kỳ bị loại bỏ và các nút Miền Tây Hoa Kỳ được quảng bá lên cử tri khi chú thích :observer bị xoá.

  2. Sao lưu từ /opt/apigee/apigee-zookeeper/conf/zoo.cfg trở về trước /opt/apigee/customer/application/zookeeper.properties

    Các tệp này sẽ dùng để khôi phục chế độ mặc định khi kết nối mạng được sao lưu giữa các trung tâm dữ liệu.

  3. Tắt ký hiệu trình quan sát cho nút quan sát. Để thực hiện việc này, thêm cấu hình sau vào đầu /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. Chỉnh sửa tệp /opt/apigee/data/apigee-zookeeper/data/myid như sau:

    • Đối với server.1, hãy thay đổi mục nhập bên trong myid từ 4 thành 1.
    • Đối với server.2, hãy thay đổi myid từ 5 thành 2.
    • Đối với server.3, hãy thay đổi myid từ 6 thành 3.
  5. Khởi động lại các nút ZooKeeper trong khu vực mà bạn đã định cấu hình lại ZooKeeper cụm.
  6. Lặp lại cấu hình trên từ bước 1b đến bước 5 cho tất cả các nút trong ZooKeeper trong DC-2.
  7. Xác thực các nút nằm ở vị trí dẫn đầu:
    $ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181
    

    Kết quả của lệnh này sẽ chứa một dòng có nội dung "mode" tiếp theo là "lãnh đạo" nếu là người dẫn đầu hoặc "người theo dõi" nếu là một người theo dõi.

    Khi mạng giữa các trung tâm dữ liệu được thiết lập lại, các cấu hình ZooKeeper các thay đổi có thể bị huỷ bỏ trên các nút ZooKeeper trong DC-2.

Giải pháp #3

  1. Nếu(các) nút ZooKeeper trong cụm chưa khởi động, hãy khởi động lại.
  2. Kiểm tra nhật ký của ZooKeeper để xác định lý do khiến nút ZooKeeper bị lỗi.

    Nhật ký của ZooKeeper có trong thư mục sau:

    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log
    
  3. Liên hệ với Bộ phận hỗ trợ Apigee và cung cấp Nhật ký của ZooKeeper để khắc phục nguyên nhân gây ra bất kỳ nút nào của ZooKeeper có thể đã bị dừng.

Nút ZooKeeper không phân phát yêu cầu

Một nút ZooKeeper trong tập hợp có thể ở trạng thái không tốt và không thể phản hồi khách hàng yêu cầu. Điều này có thể là do:

  1. Nút đã bị dừng mà không khởi động lại.
  2. Nút đã khởi động lại mà không bật tính năng tự động bắt đầu.
  3. Tải hệ thống trên nút khiến nút này ngừng hoạt động hoặc không hoạt động tốt.

Chẩn đoán

  1. Thực thi các lệnh kiểm tra tình trạng sau trong ZooKeeper trên từng nút ZooKeeper và kiểm tra kết quả:
    1. $ echo "ruok" | nc localhost 2181
      

      Kết quả điểm dữ liệu:

      $ echo "ruok" | nc localhost 2181
      imok
      
    2. echo srvr | nc localhost 2181
      

      Kiểm tra chế độ để xác định nút ZooKeeper là người dẫn đầu hay người theo dõi.

      Kết quả mẫu cho nút ZooKeeper tất cả trong một:

      $ echo srvr | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Latency min/avg/max: 0/0/88
      Received: 4206601
      Sent: 4206624
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
      
    3. $ echo mntr | nc localhost 2181
      

      Lệnh này liệt kê các biến ZooKeeper có thể được dùng để kiểm tra tình trạng của cụm ZooKeeper.

      Kết quả điểm dữ liệu:

      $ echo mntr | nc localhost 2181
      zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      zk_avg_latency 0
      zk_max_latency 88
      zk_min_latency 0
      zk_packets_received     4206750
      zk_packets_sent 4206773
      zk_num_alive_connections 8
      zk_outstanding_requests 0
      zk_server_state standalone
      zk_znode_count 282
      zk_watch_count 194
      zk_ephemerals_count 1
      zk_approximate_data_size 22960
      zk_open_file_descriptor_count 34
      zk_max_file_descriptor_count 4096
      
    4. $ echo stat | nc localhost 2181
      

      Lệnh này liệt kê số liệu thống kê về hiệu suất và các ứng dụng được kết nối.

      Kết quả điểm dữ liệu:

      $ echo stat | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Clients:
       /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385)
       /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278)
       /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094)
       /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938)
       /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843)
       /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333)
       /127.0.0.1:40820[0](queued=0,recved=1,sent=0)
       /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844)
      
      Latency min/avg/max: 0/0/88
      Received: 4206995
      Sent: 4207018
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
      
    5. $ echo cons | nc localhost 2181
      

      Lệnh này cung cấp thông tin chi tiết mở rộng về kết nối trong ZooKeeper.

      Kết quả điểm dữ liệu:

      $ echo cons | nc localhost 2181
      /127.0.0.1:40864[0](queued=0,recved=1,sent=0)
      /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007,
        lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174,
        llat=0,minlat=0,avglat=0,maxlat=26)
      /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005,
        lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055,
        llat=0,minlat=0,avglat=0,maxlat=23)
      /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a,
        lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245,
        llat=0,minlat=0,avglat=0,maxlat=22)
      /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b,
        lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417,
        llat=0,minlat=0,avglat=0,maxlat=88)
      /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008,
        lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475,
        llat=3,minlat=0,avglat=0,maxlat=19)
      /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d,
        lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315,
        llat=0,minlat=0,avglat=0,maxlat=35)
      /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006,
        lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036,
        llat=1,minlat=0,avglat=0,maxlat=20)
      

      Nếu bất kỳ lệnh nào trong số 3 lệnh kiểm tra tình trạng gần đây nhất hiện thông báo sau:

      $ echo stat | nc localhost 2181
          This ZooKeeper instance is not currently serving requests
      

      Sau đó, cảnh báo này chỉ ra rằng(các) nút cụ thể của ZooKeeper hiện không phân phát yêu cầu.

  2. Kiểm tra nhật ký ZooKeeper trên nút cụ thể và cố gắng xác định bất kỳ lỗi nào gây ra ZooKeeper sắp ngừng hoạt động. Nhật ký của ZooKeeper có trong thư mục sau:
    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log
    

Độ phân giải

  1. Khởi động lại lần lượt tất cả các nút ZooKeeper khác trong cụm.
  2. Chạy lại các lệnh kiểm tra tình trạng của ZooKeeper trên từng nút và xem liệu bạn có nhận được kết quả như mong đợi không đầu ra.

Liên hệ với Bộ phận hỗ trợ Apigee để khắc phục nguyên nhân hệ thống tải nếu sự cố vẫn tiếp diễn hoặc nếu việc khởi động lại không giải quyết được sự cố.