คู่มือ aWhere
ติดตั้งและดูแลแพลตฟอร์ม

แก้ปัญหา

คำสั่งที่ควรรันก่อน ข้อความเมื่อโหนดไม่ยอมเริ่มทำงาน migration ที่ล้มเหลว และสิ่งที่หน้าระบบแจ้ง

หน้านี้ช่วยหาสาเหตุเมื่อแพลตฟอร์มยังไม่พร้อมใช้งาน

เริ่มจากตรงนี้

  1. รัน awhere status เพื่อดูว่าคอนเทนเนอร์ไหนยังไม่พร้อม
  2. อ่าน log ของคอนเทนเนอร์นั้น เช่น awhere logs core-services -f
  3. รัน 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 5sNATS ไม่ได้เปิด 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 ให้บริการ

ในหน้านี้