ไม่สามารถเริ่ม Zookeeper

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

ลักษณะปัญหา

ไม่สามารถเริ่มต้นกระบวนการ ZooKeeper

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

เมื่อคุณพยายามเริ่มต้นกระบวนการ ZooKeeper ข้อความแสดงข้อผิดพลาดต่อไปนี้จะปรากฏ ซึ่งระบุว่า ไม่สามารถเริ่ม ZooKeeper ได้:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

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

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

สาเหตุ สำหรับ
ZooKeeper myid ที่กำหนดค่าไม่ถูกต้อง ผู้ใช้ Edge Private Cloud
ใช้งานพอร์ตของ ZooKeeper ผู้ใช้ Edge Private Cloud
รหัสกระบวนการในไฟล์ apigee-zookeeper.pid ไม่ถูกต้อง ผู้ใช้ Edge Private Cloud
ความล้มเหลวในการเลือกตั้งผู้นำของ ZooKeeper ผู้ใช้ Edge Private Cloud

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

ZooKeeper myid ที่กำหนดค่าไม่ถูกต้อง

ส่วนต่อไปนี้จะให้ภาพรวมของไฟล์ myid และอธิบายวิธีการวินิจฉัยและ แก้ปัญหาการกำหนดค่าที่ไม่ถูกต้องได้

ภาพรวมของไฟล์ myid

ในแต่ละโหนด ZooKeeper จะมี 2 ไฟล์ ดังนี้

  1. ไฟล์ /opt/apigee/apigee-zookeeper/conf/zoo.cfg ที่มีรายการของ IP สำหรับโหนด ZooKeeper ทั้งหมดในคลัสเตอร์

    ตัวอย่างเช่น หาก /opt/apigee/apigee-zookeeper/conf/zoo.cfg มีพารามิเตอร์ IP ของโหนด ZooKeeper 3 โหนดซึ่งเป็นส่วนหนึ่งของคลัสเตอร์ดังนี้

    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. ไฟล์ /opt/apigee/data/apigee-zookeeper/data/myid ประกอบด้วยบรรทัดเดียวของ ที่สอดคล้องกับหมายเลขเซิร์ฟเวอร์ของโหนด ZooKeeper นั้น ความคิดเกี่ยวกับ เซิร์ฟเวอร์ 1 จะมีข้อความ "1" และไม่ต้องทำอะไรอีก รหัสต้องไม่ซ้ำกันภายในชุด และควรมีค่าระหว่าง 1 ถึง 255

    ตัวอย่างเช่น ใน ZooKeeper server.1 โค้ด ไฟล์ /opt/apigee/data/apigee-zookeeper/data/myid ควรมีเฉพาะข้อความ 1 ดังที่แสดงด้านล่าง

    $ cat myid
    1
    

การวินิจฉัย

  1. ตรวจสอบบันทึกของ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log สำหรับ
  2. หากเห็นข้อความ WARN คล้ายกับ "การเชื่อมต่อเสียหายสำหรับรหัส # รหัสของฉัน = #" ดังที่แสดงในรูปด้านล่าง สาเหตุที่เป็นไปได้สําหรับปัญหานี้อาจเกิดจากเซิร์ฟเวอร์ # ในไฟล์ myid ได้รับการกำหนดค่าอย่างไม่ถูกต้องหรือได้รับความเสียหาย
    [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. ตรวจสอบไฟล์ /opt/apigee/apigee-zookeeper/conf/zoo.cfg และจดบันทึก Server.# สำหรับโหนด ZooKeeper ปัจจุบัน
  4. ตรวจสอบไฟล์ /opt/apigee/data/apigee-zookeeper/data/myid และดูว่าข้อความ ในไฟล์นี้ตรงกับเซิร์ฟเวอร์# ที่ระบุไว้ในขั้นตอนที่ 2
  5. ถ้าข้อมูลไม่ตรงกัน แสดงว่าคุณได้ระบุสาเหตุที่ทำให้ ZooKeeper ล้มเหลวแล้ว เริ่ม

ความละเอียด

หากไฟล์ myid มีการกำหนดค่าไม่ถูกต้อง ให้แก้ไขไฟล์ myid และแทนที่ค่าเป็น ข้อความที่ถูกต้องซึ่งแสดงพารามิเตอร์ Server.# ใน Zoo.cfg

ใช้พอร์ต ZooKeeper อยู่

การวินิจฉัย

  1. ตรวจสอบบันทึกของ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log สำหรับ
  2. หากคุณสังเกตเห็นข้อยกเว้น java.net.BindException: Address already in use เมื่อเชื่อมโยงกับพอร์ต #2181 ดังที่แสดงในภาพด้านล่าง ก็แสดงว่า ZooKeeper มีการใช้พอร์ต 2181 โดยกระบวนการอื่น ดังนั้นจึงไม่สามารถเริ่มใช้งาน 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. ใช้คำสั่ง netstat ด้านล่างเพื่อยืนยันว่ามีการใช้พอร์ต ZooKeeper 2181 อยู่ โดยกระบวนการอื่น
    netstat -an | grep 2181
    

ความละเอียด

หากพอร์ต ZooKeeper 2181 ยังมีการใช้งานอยู่ ให้ทําตามขั้นตอนด้านล่างเพื่อแก้ไขปัญหานี้ ปัญหา:

  1. ใช้คำสั่ง netstat เพื่อค้นหากระบวนการที่เก็บพอร์ต 2181 ปิดกระบวนการที่ใช้พอร์ต 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. ล้างไฟล์ PID และล็อกไฟล์ หากมี
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. รีสตาร์ท ZooKeeper
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

รหัสกระบวนการในไฟล์ apigee-zookeeper.pid ไม่ถูกต้อง

เมื่อคุณพยายามหยุด/รีสตาร์ท ZooKeeper อาจไม่สำเร็จเนื่องจาก apigee-zookeeper.pid ไฟล์มี PID เก่า/ไม่ถูกต้องและไม่ใช่ไฟล์ การเรียกใช้กระบวนการ ZooKeeper กรณีนี้อาจเกิดขึ้นหากกระบวนการของ ZooKeeper สิ้นสุดลงโดยไม่คาดคิด หรือ ไม่ได้ลบไฟล์ apigee-zookeeper.pid อย่างกะทันหันด้วยเหตุผลบางอย่าง

การวินิจฉัย

  1. รับรหัสกระบวนการของกระบวนการ ZooKeeper ที่กำลังทำงานอยู่ในขณะนี้โดยการเรียกใช้การเรียก คำสั่ง ps:
    ps -ef | grep zookeeper
    
  2. ตรวจสอบว่าไฟล์ /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid มีอยู่ หากมี ให้จดรหัสกระบวนการที่เขียนไว้ในไฟล์นี้
  3. เปรียบเทียบรหัสกระบวนการที่ได้จากขั้นตอนที่ 1 และ #2 หากต่างกัน ก็แสดงว่า สำหรับปัญหานี้มีรหัสกระบวนการที่ไม่ถูกต้องใน apigee-zookeeper.pid file.

ความละเอียด

  1. แก้ไขไฟล์ apigee-zookeeper.pid และแทนที่รหัสกระบวนการที่ไม่ถูกต้องด้วยรหัสที่ถูกต้อง รหัสกระบวนการที่ได้รับจากคำสั่ง ps (ขั้นตอนที่ 1 ด้านบน)
  2. รีสตาร์ท ZooKeeper
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

การเลือกตั้งผู้นำ ZooKeeper ไม่สำเร็จ

การวินิจฉัย

วิธีวินิจฉัย

  1. ตรวจสอบบันทึกของ ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log สำหรับ
  2. ตรวจสอบว่ามีการเปลี่ยนแปลงการกำหนดค่าใดๆ ที่อาจทำให้เกิดการเลือก ZooKeeper หรือไม่ ล้มเหลวได้
  3. ตรวจสอบ/opt/apigee/apigee-zookeeper/conf/zoo.cfgและดูให้ครบ ZooKeepers ในคลัสเตอร์มีหมายเลขและที่อยู่ IP ที่เหมาะสมสำหรับพารามิเตอร์ Server.# ทั้งนี้ โปรดทราบว่าจะต้องมีผู้มีสิทธิเลือกตั้งอย่างน้อย 3 คนจึงจะเลือกผู้นำได้ และจำนวนผู้มีสิทธิเลือกตั้งควรเป็นเลขคี่ หากมีผู้ลงคะแนนน้อยเกินไป เช่น 2 คน ผู้ลงคะแนน ก็ไม่อาจมาอยู่ในโถงประชุมเพื่อตัดสินผู้นำในหมู่ผู้มีสิทธิเลือกตั้งเพียง 2 คนเท่านั้น

ความละเอียด

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

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