ข้อผิดพลาดการสูญเสียการเชื่อมต่อ Zookeeper

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

ลักษณะปัญหา

ปัญหาการเชื่อมต่อของ ZooKeeper อาจมีอาการที่แตกต่างกันไป เช่น

  1. ข้อผิดพลาดในการทำให้พร็อกซี API ใช้งานได้
  2. การเรียก Management API ล้มเหลวโดยมีข้อผิดพลาด 5XX
  3. เราเตอร์หรือตัวประมวลผลข้อความเริ่มทำงานไม่สำเร็จ
  4. คอมโพเนนต์ของ Analytics รายงานการสูญเสียการเชื่อมต่อ ZooKeeper ใน system.logs

ข้อความแสดงข้อผิดพลาด

ตัวอย่างต่อไปนี้มีตัวอย่างของข้อความแสดงข้อผิดพลาดที่อาจสังเกตได้เมื่อมีการสูญเสียการเชื่อมต่อกับโหนด ZooKeeper

  1. ระบบจะแสดงข้อผิดพลาดต่อไปนี้ในบันทึกเซิร์ฟเวอร์การจัดการเมื่อการทำให้พร็อกซี API ใช้งานได้ไม่สำเร็จเนื่องจากการเชื่อมต่อ 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. ในระหว่างการเริ่มต้น เราเตอร์และเครื่องมือประมวลผลข้อความจะเชื่อมต่อกับ ZooKeeper หากมีปัญหาในการเชื่อมต่อกับ ZooKeeper คอมโพเนนต์เหล่านี้จะเริ่มต้นไม่ได้ด้วยข้อผิดพลาดต่อไปนี้:
    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. Edge UI อาจแสดงข้อผิดพลาดต่อไปนี้ ซึ่งระบุว่าไม่สามารถตรวจสอบสถานะการติดตั้งใช้งานของพร็อกซี API ได้
    Error Fetching Deployments
    Error while checking path existence for path: path
    

สาเหตุที่เป็นไปได้

ตารางต่อไปนี้แสดงสาเหตุที่เป็นไปได้ของปัญหานี้

สาเหตุ สำหรับ
ปัญหาการเชื่อมต่อเครือข่ายในศูนย์ข้อมูลต่างๆ ผู้ใช้ Edge Private Cloud
โหนด ZooKeeper ไม่แสดงคำขอ ผู้ใช้ Edge Private Cloud

คลิกลิงก์ในตารางเพื่อดูวิธีแก้ปัญหาที่เป็นไปได้ของสาเหตุนั้น

ปัญหาการเชื่อมต่อเครือข่ายในศูนย์ข้อมูลต่างๆ

การวินิจฉัย

คลัสเตอร์ ZooKeeper อาจมีโหนดที่ครอบคลุมหลายภูมิภาค/ศูนย์ข้อมูล เช่น DC-1 และ DC-2 โทโพโลยี Apigee Edge 2 DC ทั่วไปจะมีลักษณะดังนี้

  • เซิร์ฟเวอร์ ZooKeeper 1, 2 และ 3 เป็นผู้โหวตใน DC-1
  • ZooKeeper 4 และ 5 เป็นผู้มีสิทธิเลือกตั้งและ ZooKeeper 6 เป็นผู้สังเกตการณ์ใน DC-2

หากภูมิภาค DC-1 ไม่ทำงานหรือการเชื่อมต่อเครือข่ายระหว่าง DC-1 กับ DC-2 เสียหาย โหนด ZooKeeper จะเลือกผู้นำใหม่ใน DC-2 ไม่ได้และสื่อสารกับโหนดผู้นำไม่ได้ ผู้สังเกตการณ์ ZooKeeper ไม่สามารถเลือกผู้นำคนใหม่ได้และผู้มีสิทธิเลือกตั้ง 2 คนที่เหลือใน DC-2 ไม่มีโควต้าของผู้มีสิทธิเลือกตั้งอย่างน้อย 3 โหนดเพื่อเลือกผู้นำคนใหม่ ดังนั้น ZooKeepers ใน DC-2 จะดำเนินการตามคำขอไม่ได้ โหนด ZooKeeper ที่เหลืออยู่ใน DC-2 จะยังคงวนไปเรื่อยๆ และพยายามเชื่อมต่อกลับไปยังผู้โหวต ZooKeeper เพื่อค้นหาตัวแปรที่ดีที่สุด

ความละเอียด

โปรดใช้วิธีแก้ปัญหาต่อไปนี้เพื่อแก้ไขปัญหานี้ตามลำดับที่ระบุ

หากคุณไม่สามารถแก้ไขปัญหาได้หลังจากลองใช้วิธีแก้ปัญหาเหล่านี้แล้ว โปรดติดต่อฝ่ายสนับสนุนของ Apigee

โซลูชันที่ 1

  1. โปรดทำงานร่วมกับผู้ดูแลระบบเครือข่ายเพื่อแก้ไขปัญหาการเชื่อมต่อเครือข่ายระหว่างศูนย์ข้อมูล
  2. เมื่อกลุ่ม ZooKeeper สื่อสารกันได้ทั่วทั้งศูนย์ข้อมูลและเลือกผู้นำ ZooKeeper โหนดควรจะมีความสมบูรณ์และประมวลผลคำขอได้

โซลูชันที่ 2

  1. หากการเชื่อมต่อเครือข่ายต้องใช้เวลาในการซ่อมแซม วิธีแก้ปัญหาเบื้องต้นคือการกำหนดค่าโหนด ZooKeeper อีกครั้งในภูมิภาคที่ใช้งานไม่ได้ ตัวอย่างเช่น กำหนดค่าคลัสเตอร์ ZooKeeper ใหม่ใน DC-2 เพื่อให้โหนด ZooKeeper ในภูมิภาคนี้เป็นผู้โหวตทั้งหมดและนำ server.# ใน zoo.cfg ของ ZooKeepers ออกจากภูมิภาค DC-1
    1. ในตัวอย่างต่อไปนี้ zoo.cfg กำหนดค่าโหนดสำหรับ 2 ภูมิภาคโดยที่ DC-1 ใช้ชื่อโฮสต์ us-ea ที่แสดงถึงภูมิภาค US-ฝั่งตะวันออก และ DC-2 ใช้ชื่อโฮสต์ us-wo รายการที่แสดงถึงภูมิภาค US-West (หมายเหตุ: ระบบจะแสดงเฉพาะการกำหนดค่าที่เกี่ยวข้องเท่านั้น) ดังนี้
      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
      

      ในตัวอย่างข้างต้น ให้กำหนดค่า zoo.cfg ใหม่ดังนี้

      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. เมื่อใช้โค้ดที่มีการกำหนดค่า ให้สร้างไฟล์ /opt/apigee/customer/application/zookeeper.properties ที่มีข้อมูลต่อไปนี้
      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\
      

    ในข้างต้น ระบบจะนำโหนดจากสหรัฐอเมริกา-ตะวันออกออก และเลื่อนระดับโหนดระหว่างสหรัฐอเมริกาฝั่งตะวันตกให้แก่ผู้มีสิทธิเลือกตั้งเมื่อนำคำอธิบายประกอบ :observer ออก

  2. สำรองข้อมูล /opt/apigee/apigee-zookeeper/conf/zoo.cfg และ /opt/apigee/customer/application/zookeeper.properties เดิม

    ระบบจะใช้ไฟล์เหล่านี้เพื่อคืนค่าเริ่มต้นเมื่อมีการสำรองข้อมูลการเชื่อมต่อเครือข่ายระหว่างศูนย์ข้อมูล

  3. ปิดใช้สัญลักษณ์ผู้สังเกตการณ์สำหรับโหนดผู้สังเกตการณ์ หากต้องการดำเนินการ ให้เพิ่มการกำหนดค่าต่อไปนี้ที่ด้านบนของ /opt/apigee/customer/application/zookeeper.properties

    conf_zoo_peertype=
  4. แก้ไขไฟล์ /opt/apigee/data/apigee-zookeeper/data/myid ดังนี้

    • สำหรับ server.1 ให้เปลี่ยนรายการภายใน myid จาก 4 เป็น 1
    • สำหรับ server.2 ให้เปลี่ยน myid จาก 5 เป็น 2
    • สำหรับ server.3 ให้เปลี่ยน myid จาก 6 เป็น 3
  5. รีสตาร์ทโหนด ZooKeeper ในภูมิภาคที่คุณกำหนดค่าคลัสเตอร์ ZooKeeper ใหม่
  6. ทำซ้ำการกำหนดค่าข้างต้นจากขั้นตอนที่ 1b ถึงขั้นตอนที่ 5 บนโหนด ZooKeeper ทั้งหมดใน DC-2
  7. ตรวจสอบว่าโหนดทำงานได้แล้วด้วยผู้นำ:
    $ 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
    

    เอาต์พุตของคำสั่งนี้จะมีบรรทัดที่ระบุว่า "โหมด" ตามด้วย "ผู้นำ" หากเป็นผู้นำ หรือ "ผู้ติดตาม" หากเป็นผู้ติดตาม

    เมื่อมีการสร้างเครือข่ายระหว่างศูนย์ข้อมูลอีกครั้ง การกำหนดค่า ZooKeeper จะเปลี่ยนกลับได้ในโหนด ZooKeeper ใน DC-2

โซลูชันที่ 3

  1. หากโหนด ZooKeeper ในคลัสเตอร์ไม่ได้เริ่มต้น ให้รีสตาร์ท
  2. ตรวจสอบบันทึกของ ZooKeeper เพื่อหาสาเหตุที่โหนด ZooKeeper หยุดทำงาน

    บันทึก ZooKeeper จะอยู่ในไดเรกทอรีต่อไปนี้

    $ 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. โปรดติดต่อฝ่ายสนับสนุนของ Apigee และระบุบันทึกของ ZooKeeper เพื่อแก้ปัญหาสาเหตุของโหนด ZooKeeper ที่อาจหยุดทำงาน

โหนด ZooKeeper ไม่แสดงคำขอ

โหนด ZooKeeper ในกลุ่มอาจมีประสิทธิภาพไม่ดีและไม่สามารถตอบสนองต่อคำขอของไคลเอ็นต์ได้ ซึ่งอาจเป็นเพราะสาเหตุต่อไปนี้

  1. โหนดหยุดโดยไม่รีสตาร์ท
  2. โหนดได้รับการรีบูตโดยไม่ได้เปิดใช้งานการเริ่มต้นอัตโนมัติ
  3. ภาระงานของระบบในโหนดทำให้โหนดไม่ทำงานหรือมีประสิทธิภาพไม่ดี

การวินิจฉัย

  1. เรียกใช้คำสั่งการตรวจสอบประสิทธิภาพการทำงานของ ZooKeeper ต่อไปนี้บนโหนด ZooKeeper แต่ละรายการและตรวจสอบเอาต์พุต
    1. $ echo "ruok" | nc localhost 2181
      

      ตัวอย่างเอาต์พุต

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

      ตรวจสอบโหมดเพื่อดูว่าโหนด ZooKeeper เป็นผู้นำหรือผู้ติดตามหรือไม่

      ตัวอย่างเอาต์พุตสำหรับโหนด ZooKeeper รายการเดียวแบบรวมทั้งหมด

      $ 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
      

      คำสั่งนี้จะแสดงตัวแปร ZooKeeper ที่ใช้ตรวจสอบประสิทธิภาพการทำงานของคลัสเตอร์ ZooKeeper ได้

      ตัวอย่างเอาต์พุต

      $ 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
      

      คำสั่งนี้จะแสดงสถิติเกี่ยวกับประสิทธิภาพและไคลเอ็นต์ที่เชื่อมต่อ

      ตัวอย่างเอาต์พุต

      $ 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
      

      คำสั่งนี้จะให้รายละเอียดเพิ่มเติมเกี่ยวกับการเชื่อมต่อ ZooKeeper

      ตัวอย่างเอาต์พุต

      $ 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)
      

      หากคำสั่งการตรวจสอบประสิทธิภาพการทำงาน 3 รายการล่าสุดแสดงข้อความต่อไปนี้

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

      จากนั้นจึงระบุว่าโหนด ZooKeeper ที่เฉพาะเจาะจงไม่ได้ให้บริการคำขอ

  2. ตรวจสอบบันทึกของ ZooKeeper ในโหนดที่เฉพาะเจาะจงและพยายามค้นหาข้อผิดพลาดที่ทำให้ ZooKeeper ไม่ทำงาน บันทึก ZooKeeper จะอยู่ในไดเรกทอรีต่อไปนี้
    $ 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
    

ความละเอียด

  1. รีสตาร์ทโหนด ZooKeeper อื่นๆ ทั้งหมดในคลัสเตอร์ทีละรายการ
  2. เรียกใช้คำสั่งการตรวจสอบประสิทธิภาพการทำงานของ ZooKeeper อีกครั้งในแต่ละโหนดและดูว่าคุณได้รับผลลัพธ์ที่คาดหวังหรือไม่

โปรดติดต่อทีมสนับสนุนของ Apigee เพื่อแก้ปัญหาสาเหตุของภาระงานของระบบที่ยังคงอยู่หรือหากการรีสตาร์ทไม่ช่วยแก้ปัญหา