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.
info

Dấu hiệu

Các vấn đề về khả năng kết nối của ZooKeeper có thể biểu hiện dưới dạng nhiều dấu hiệu, chẳng hạn như:

  1. Lỗi triển khai proxy API
  2. Lệnh gọi API quản lý không thành công với lỗi 5XX
  3. Bộ định tuyến hoặc Bộ xử lý thông báo không khởi động được
  4. Các thành phần Analytics báo cáo tình trạng mất kết nố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 với(các) nút ZooKeeper.

  1. Lỗi sau đây được trả về trong nhật ký Máy chủ quản lý khi quá trình triển khai Proxy API không thành công do mất kết nố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 quá trình khởi động, Bộ định tuyến và Bộ xử lý thông báo sẽ kết nối với ZooKeeper. Nếu có vấn đề về khả năng kết nối với ZooKeeper, thì các thành phần này sẽ không khởi động được và gặp lỗi sau:
    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 mới có thể hiển thị lỗi sau đây cho biết rằng giao diện này không kiểm tra được 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 vấn đề này:

Nguyên nhân Cho
Vấn đề về khả năng kết nối mạng trên nhiều trung tâm dữ liệu Người dùng Edge Private Cloud
Nút ZooKeeper không xử lý yêu cầu 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 đó.

Vấn đề về khả năng kết nối mạng trên nhiều trung tâm dữ liệu

Chẩn đoán

Một cụm ZooKeeper có thể có các nút trải rộng trên 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 Apigee Edge 2 DC điển hình sẽ có:

  • Máy chủ ZooKeeper 1, 2 và 3 là các trình biểu quyết trong DC-1
  • ZooKeeper 4 và 5 là các trình biểu quyết và ZooKeeper 6 là trình quan sát trong DC-2.

Nếu khu vực DC-1 ngừng hoạt động hoặc khả năng kết nối mạng giữa DC-1 và DC-2 bị gián đoạn, thì các nút ZooKeeper không thể bầu ra một người lãnh đạo mới trong DC-2 và không thể giao tiếp với nút lãnh đạo. Trình quan sát ZooKeeper không thể bầu ra một người lãnh đạo mới và 2 trình biểu quyết còn lại trong DC-2 không có đủ số lượng tối thiểu là 3 nút trình biểu quyết để bầu ra một người lãnh đạo mới. Do đó, ZooKeeper 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 việc thử kết nối lại với các trình biểu quyết ZooKeeper để tìm người lãnh đạo.

Giải pháp

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

Nếu bạn không thể giải quyết vấn đề sau khi thử các giải pháp này, hãy liên hệ với Nhóm hỗ trợ Apigee.

Giải pháp 1

  1. Làm việc với quản trị viên mạng để khắc phục vấn đề về khả năng kết nối mạng giữa các trung tâm dữ liệu.
  2. Khi nhóm ZooKeeper có thể giao tiếp trên các trung tâm dữ liệu và bầu ra một ZooKeeper leader, các nút sẽ trở nên hoạt động bình thường và có thể xử lý các yêu cầu.

Giải pháp 2

  1. Nếu cần thời gian để khắc phục khả năng kết nối mạng, thì bạn có thể giải quyết bằng cách định cấu hình lại các nút ZooKeeper trong khu vực nơi các nút này ngừng hoạt động. Ví dụ: hãy định cấu hình lại cụm ZooKeeper trong DC-2 để 3 nút ZooKeeper trong khu vực này đều là trình biểu quyết và xoá server.# trong zoo.cfg của ZooKeeper khỏi khu vực DC-1.
    1. Trong ví dụ sau đây, zoo.cfg định cấu hình các nút cho 2 khu vực, trong đó DC-1 sử dụng us-ea tên máy chủ biểu thị khu vực Hoa Kỳ – Miền Đông và DC-2 sử dụng us-wo tên máy chủ biểu thị khu vực Hoa Kỳ – Miền Tây. (LƯU Ý: Chỉ các 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, hãy tạo một tệp /opt/apigee/customer/application/zookeeper.properties có nội dung 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\

    Ở trên, các nút từ Hoa Kỳ – Miền Đông sẽ bị xoá và các nút Hoa Kỳ – Miền Tây sẽ được thăng cấp thành trình biểu quyết khi chú thích :observer bị xoá.

  2. Sao lưu /opt/apigee/apigee-zookeeper/conf/zoo.cfg và cũ/opt/apigee/customer/application/zookeeper.properties.

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

  3. Tắt ký hiệu trình quan sát cho nút trình quan sát. Để thực hiện việc này, hã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 nơi bạn định cấu hình lại cụm ZooKeeper cluster.
  6. Lặp lại cấu hình ở trên từ bước 1b đến bước 5 trên tất cả các nút ZooKeeper trong DC-2.
  7. Xác thực rằng các nút đang hoạt động với một người lãnh đạo:
    $ 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" (chế độ) theo sau là "leader" (người lãnh đạo) nếu đó là người lãnh đạo hoặc "follower" (người theo dõi) nếu đó là 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, bạn có thể hoàn nguyên các thay đổi về cấu hình ZooKeeper 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ý ZooKeeper để xác định lý do nút ZooKeeper ngừng hoạt động.

    Nhật ký 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 Nhóm hỗ trợ Apigee và cung cấp nhật ký ZooKeeper để khắc phục sự cố nguyên nhân của mọi nút ZooKeeper có thể đã bị dừng.

Nút ZooKeeper không xử lý yêu cầu

Một nút ZooKeeper trong nhóm có thể trở nên không hoạt động bình thường và không thể phản hồi các yêu cầu của máy khách Lý do có thể là:

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

Chẩn đoán

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

      Ví dụ về đầu ra:

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

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

      Ví dụ về đầu ra cho một 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 mà bạn có thể dùng để kiểm tra tình trạng của cụm ZooKeeper.

      Ví dụ về đầu ra:

      $ 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ê các số liệu thống kê về hiệu suất và các máy khách được kết nối.

      Ví dụ về đầu ra:

      $ 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ề các kết nối ZooKeeper.

      Ví dụ về đầu ra:

      $ 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 kiểm tra tình trạng nào trong 3 lệnh gần đây nhất hiển thị thông báo sau:

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

      Điều này cho biết rằng(các) nút ZooKeeper cụ thể không xử lý yêu cầu.

  2. Kiểm tra nhật ký ZooKeeper trên nút cụ thể và cố gắng tìm mọi lỗi khiến ZooKeeper ngừng hoạt động. Nhật ký 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

Giải pháp

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

Hãy liên hệ với Nhóm hỗ trợ Apigee để khắc phục nguyên nhân gây ra tình trạng tải hệ thống nếu tình trạng này vẫn tiếp diễn hoặc nếu việc khởi động lại không giải quyết được vấn đề.