แก้ปัญหา
คำสั่งที่ควรรันก่อน ข้อความเมื่อโหนดไม่ยอมเริ่มทำงาน migration ที่ล้มเหลว และสิ่งที่หน้าระบบแจ้ง
หน้านี้ช่วยหาสาเหตุเมื่อแพลตฟอร์มยังไม่พร้อมใช้งาน
เริ่มจากตรงนี้
- รัน
awhere statusเพื่อดูว่าคอนเทนเนอร์ไหนยังไม่พร้อม - อ่าน log ของคอนเทนเนอร์นั้น เช่น
awhere logs core-services -f - รัน
awhere preflightเพื่อดูปัญหาทั้งหมดในครั้งเดียว
ถ้าจะเริ่มคอนเทนเนอร์ตัวใดตัวหนึ่งใหม่ ให้รัน awhere stop <component> แล้วตามด้วย awhere start <component>
โหนดไม่ยอมเริ่มทำงาน
ถ้าโหนดเห็นว่าทำงานอย่างปลอดภัยไม่ได้ จะเขียนข้อความหนึ่งก้อนลง log แล้วหยุดด้วย exit code 1
REFUSED TO START: core-services (release 5.0.0)
why: <what is wrong>
what to do: <what to do>why บอกว่า | สิ่งที่ต้องทำ |
|---|---|
N preflight checks failed: ตามด้วยการตรวจที่ไม่ผ่านบรรทัดละข้อ | แก้ env file ตามบรรทัด fix: แล้วรัน awhere start <component> ดูความหมายของแต่ละข้อได้ที่การตรวจทั้งหมดของ Preflight |
database `<db>` has Migration `<id>`, applied by release R ... | เวอร์ชันที่ใหม่กว่าเปลี่ยนข้อมูลไปแล้ว ให้ใช้เวอร์ชัน R หรือใหม่กว่า ถ้าจะกลับไปเวอร์ชันเก่าต้องกู้คืนจากข้อมูลที่สำรองไว้ (ย้อนกลับ) |
database `<db>` has data but has not applied Migration `<id>`, which release S no longer carries ... | แพลตฟอร์มอัปเกรดข้ามเวอร์ชันที่ห้ามข้าม ให้อัปเกรดไปเวอร์ชันที่ข้อความบอกก่อน |
Migration `<id>` failed in database `<db>`: <message> | ดูmigration ล้มเหลว |
database `<db>` is not on the MongoDB Provider ... | connection string ต้องขึ้นต้นด้วย mongodb:// หรือ mongodb+srv:// |
port <N> is already in use | เกิดได้เฉพาะ core-services และ authorization-server ให้หยุดโปรแกรมที่ใช้พอร์ตนั้นอยู่ หรือตั้ง PORT เป็นพอร์ตอื่น |
the session database did not answer after 30 attempts | เกิดได้เฉพาะ authorization-server ให้ตรวจ SESSION_STORE_URL |
โหนดพร้อมหรือยัง
ระหว่างรัน migration โหนดยังทำงานอยู่ แต่ยังไม่พร้อมให้บริการ ให้รอสักครู่แล้วรัน awhere status อีกครั้ง
ถ้าโหนดค้างอยู่ที่สถานะ waiting แปลว่าตัวโหนดเองไม่มีปัญหา สาเหตุมีได้สองอย่าง
- อีก replica หนึ่งของบริการเดียวกันกำลังรัน migration นั้นอยู่ ถ้า replica นั้นหยุดไป สิทธิ์รัน migration ที่ถือไว้จะหมดอายุเองภายใน 15 วินาที
- migration ต้องใช้บริการอื่นที่ยังไม่ได้เริ่ม ให้เริ่มบริการนั้น
ส่วนแอปถือว่าพร้อมเมื่อตอบ HTTP ที่พอร์ต 5000
migration ล้มเหลว
หน้า ระบบ จะแสดงแถวนั้นว่า ล้มเหลว พร้อมข้อผิดพลาด (ระบบ) ส่วนใน log จะเห็น [migrations] <id>: failed: <message>
- migration แบบ ต้องเสร็จก่อนเริ่มให้บริการ จะทำให้โหนดไม่ยอมเริ่มทำงาน ให้แก้สาเหตุตามข้อความ ที่เจอบ่อยคือฐานข้อมูลไม่ตอบ หรือผู้ใช้ไม่มีสิทธิ์ แล้วรัน
awhere start <component>migration จะทำต่อจากจุดที่ค้างไว้ - migration แบบ ทำเบื้องหลัง จะลองใหม่เอง โดยรอนานขึ้นเท่าตัวทุกครั้ง ตั้งแต่ 5 วินาทีจนถึง 5 นาที ระหว่างนั้นโหนดยังให้บริการตามปกติ
รัน migration ซ้ำได้เสมอ ไม่ทำให้ข้อมูลเสีย
สิ่งที่หน้าระบบแจ้ง
หน้าระบบเรียก migration ว่า "การย้ายข้อมูล"
| ข้อความในหน้าระบบ | สิ่งที่ต้องทำ |
|---|---|
"การย้ายข้อมูล <id> ล้มเหลวใน <database>" | ดูmigration ล้มเหลว |
"<node> ปฏิเสธที่จะเริ่มทำงาน" | อ่าน log ด้วย awhere logs <node> |
| "โหนดใช้เวอร์ชันไม่ตรงกัน" | เป็นเรื่องปกติระหว่างอัปเกรด ถ้าไม่ได้อัปเกรดอยู่ ให้รัน awhere upgrade <version> ซ้ำด้วยเวอร์ชันเดิม |
"การย้ายข้อมูล <id> หยุดชั่วคราว ..." | เริ่มโหนดของบริการนั้น |
"<node> ไม่ตอบสนอง" | ตรวจคอนเทนเนอร์ของโหนดนั้น |
"การย้ายข้อมูล <id> ข้ามไป <count> รายการ" | เปิดแถวนั้นแล้วดูทีละรายการ |
"การย้ายข้อมูล <id> กำลังทำงาน ..." | ไม่ต้องทำอะไร เป็นแค่ความคืบหน้า |
log ที่อาจเจอ
| ข้อความใน log | ความหมาย |
|---|---|
JetStream is not available (...): activity is not recorded; retrying every 5s | NATS ไม่ได้เปิด JetStream หรือเชื่อมต่อไม่ได้ เมื่อ JetStream กลับมาตอบ โหนดจะเริ่มบันทึกกิจกรรมเอง ดูสิ่งที่ต้องมี |
apps: PLATFORM_URL is unset, so apps get relative urls | ตั้ง PLATFORM_URL แล้วแก้ที่อยู่ของแอปที่หน้า แอป |
apps: <id> is not installed: ... | มี OAuth client ที่ผู้ใช้สร้างเองใช้ id ซ้ำกับแอปนั้น ให้เจ้าของสร้าง client ใหม่ของตัวเอง แล้วลบตัวเดิมแบบถาวร |
audit retention waits: the copy of the legacy logs is not done | เป็นเรื่องปกติจนกว่าจะคัดลอก log ของ v4 เสร็จ |
แอปที่ตอบ 500 ตั้งแต่หน้าแรก เกือบทุกครั้งเกิดจาก PLATFORM_URL ผิด ค่านี้ต้องเป็นที่อยู่ของ gateway ที่ core-services ให้บริการ