คุณกำลังดูเอกสารประกอบของ 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 ที่กำหนดค่าไม่ถูกต้อง | ผู้ใช้ Edge Private Cloud |
ใช้งานพอร์ต ZooKeeper | ผู้ใช้ Edge Private Cloud |
รหัสกระบวนการในไฟล์ apigee-zookeeper.pid ไม่ถูกต้อง | ผู้ใช้ Edge Private Cloud |
ความล้มเหลวในการเลือกตั้งผู้นำของ ZooKeeper | ผู้ใช้ Edge Private Cloud |
คลิกลิงก์ในตารางเพื่อดูวิธีแก้ปัญหาที่เป็นไปได้ของสาเหตุนั้น
รหัส ZooKeeper ที่กำหนดค่าไม่ถูกต้อง
ส่วนต่อไปนี้จะอธิบายภาพรวมของไฟล์ myid และอธิบายวิธีวินิจฉัยและแก้ไขปัญหาการกำหนดค่าที่ไม่ถูกต้อง
ภาพรวมของไฟล์ myid
ในแต่ละโหนด ZooKeeper จะมีไฟล์ 2 ไฟล์ ดังนี้
- ไฟล์
/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
- ไฟล์
/opt/apigee/data/apigee-zookeeper/data/myid
จะมีบรรทัดข้อความ 1 บรรทัดที่สอดคล้องกับหมายเลขเซิร์ฟเวอร์ของโหนด ZooKeeper นั้นๆ myid ของเซิร์ฟเวอร์ 1 จะมีข้อความ "1" และไม่มีข้อความอื่น รหัสต้องไม่ซ้ำกันภายในชุดและควรมีค่าระหว่าง 1 ถึง 255เช่น ในเซิร์ฟเวอร์ ZooKeeper.1 ไฟล์
/opt/apigee/data/apigee-zookeeper/data/myid
ควรมีข้อความ 1 ตามที่แสดงด้านล่าง$ cat myid 1
การวินิจฉัย
- ตรวจสอบข้อผิดพลาดในบันทึก ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
- หากคุณเห็นข้อความ WARN ที่คล้ายกับ "การเชื่อมต่อไม่ทำงานสำหรับรหัส #, id ของฉัน = #" ดังที่แสดงในรูปด้านล่าง สาเหตุที่เป็นไปได้สำหรับปัญหานี้อาจเกิดจากเซิร์ฟเวอร์ # ในไฟล์ 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)
- ตรวจสอบไฟล์
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
และจดบันทึกในเซิร์ฟเวอร์# สำหรับโหนด ZooKeeper ปัจจุบัน - ตรวจสอบไฟล์
/opt/apigee/data/apigee-zookeeper/data/myid
และดูว่าข้อความในไฟล์นี้ตรงกับเซิร์ฟเวอร์หรือไม่# ที่ระบุไว้ในขั้นตอนที่ 2 - หากข้อมูลไม่ตรงกัน แสดงว่าคุณได้ระบุสาเหตุที่ทำให้ ZooKeeper เริ่มทำงานไม่สำเร็จ
ความละเอียด
หากมีการกำหนดค่าไฟล์ myid ไม่ถูกต้อง ให้แก้ไขไฟล์ myid แล้วแทนที่ค่าดังกล่าวด้วยข้อความที่ถูกต้องซึ่งแสดงพารามิเตอร์ Server.# ใน Zoo.cfg
ใช้พอร์ต ZooKeeper อยู่
การวินิจฉัย
- ตรวจสอบข้อผิดพลาดในบันทึก ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
- หากสังเกตเห็นข้อยกเว้น
java.net.BindException: Address already in use
ขณะเชื่อมโยงกับพอร์ต #2181 ดังที่แสดงในรูปด้านล่าง แสดงว่ามีกระบวนการอื่นใช้พอร์ต ZooKeeper อยู่ ดังนั้น 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)
- ใช้คำสั่ง netstat ด้านล่างเพื่อยืนยันว่ามีกระบวนการอื่นใช้พอร์ต ZooKeeper 2181 อยู่จริงๆ
netstat -an | grep 2181
ความละเอียด
หากพอร์ต 2181 ของ ZooKeeper ยังคงใช้งานอยู่ ให้ทำตามขั้นตอนด้านล่างเพื่อแก้ไขปัญหานี้
- ใช้คำสั่ง
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
- ล้างไฟล์ PID และล็อกไฟล์ (หากมี) ดังนี้
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- รีสตาร์ท ZooKeeper โดยทำดังนี้
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
รหัสกระบวนการในไฟล์ apigee-zookeeper.pid ไม่ถูกต้อง
เมื่อพยายามหยุด/รีสตาร์ท ZooKeeper อาจล้มเหลวเนื่องจากไฟล์ apigee-zookeeper.pid
มี pid เก่า/ไม่ถูกต้อง และไม่ใช่ไฟล์ของกระบวนการ ZooKeeper ที่ทํางานอยู่ในปัจจุบัน กรณีนี้อาจเกิดขึ้นหากกระบวนการ ZooKeeper สิ้นสุดลงโดยไม่คาดคิดหรือกระทันหันด้วยเหตุผลบางอย่าง และไฟล์ apigee-zookeeper.pid
ไม่ถูกลบ
การวินิจฉัย
- รับรหัสกระบวนการของกระบวนการ ZooKeeper ที่ทำงานอยู่ในปัจจุบันโดยเรียกใช้คำสั่ง
ps
:ps -ef | grep zookeeper
- ตรวจสอบว่ามีไฟล์
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
อยู่หรือไม่ หากมีอยู่แล้ว ให้จดรหัสกระบวนการที่เขียนไว้ในไฟล์นี้ - เปรียบเทียบรหัสกระบวนการที่ได้จากขั้นตอนที่ 1 และ 2 หากรหัสไม่ตรงกัน แสดงว่าสาเหตุของปัญหานี้คือรหัสกระบวนการไม่ถูกต้องใน
apigee-zookeeper.pid file.
ความละเอียด
- แก้ไขไฟล์ apigee-zookeeper.pid และแทนที่รหัสกระบวนการที่ไม่ถูกต้องด้วยรหัสกระบวนการที่ถูกต้องซึ่งได้จากคำสั่ง ps (ขั้นตอนที่ 1 ด้านบน)
- รีสตาร์ท ZooKeeper โดยทำดังนี้
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
การเลือกตั้งผู้นำ ZooKeeper ไม่สำเร็จ
การวินิจฉัย
วิธีวินิจฉัย
- ตรวจสอบข้อผิดพลาดในบันทึก ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
- โปรดตรวจสอบว่ามีการเปลี่ยนแปลงการกำหนดค่าที่อาจทำให้การเลือกผู้นำของ ZooKeeper ล้มเหลวหรือไม่
- ตรวจสอบ
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
และตรวจสอบว่า ZooKeepers ทั้งหมดในคลัสเตอร์มีหมายเลขและที่อยู่ IP ที่เหมาะสมสำหรับพารามิเตอร์ Server.# โปรดทราบว่าคุณจะต้องมีผู้ลงคะแนนเสียงอย่างน้อย 3 คนอย่างน้อย 3 คนและจำนวนผู้ลงคะแนนเสียงเป็นเลขคี่เพื่อให้การเลือกตั้งผู้นำได้สำเร็จ หากมีผู้มีสิทธิเลือกตั้งน้อยเกินไป เช่น ผู้มีสิทธิเลือกตั้งเพียง 2 คน จะถือว่ามีคนให้คะแนนในจำนวนสูงสุดเพียง 2 ผู้ลงคะแนนไม่ได้
ความละเอียด
โดยปกติแล้ว การเลือก ZooKeeper ล้มเหลวเกิดจากการกำหนดค่า myid ไม่ถูกต้อง ใช้การแก้ปัญหาใน ZooKeeper myid ที่กำหนดค่าไม่ถูกต้อง เพื่อจัดการกับความล้มเหลวในการเลือกตั้ง
หากปัญหายังคงอยู่และต้องการการวิเคราะห์เพิ่มเติม โปรดติดต่อฝ่ายสนับสนุนของ Apigee Edge