เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
ก่อนที่จะติดตั้งแอปพลิเคชันแบบคลัสเตอร์ คุณต้องดำเนินการเตรียมความพร้อมดังต่อไปนี้ครับ/ค่ะ
การรันแอปพลิเคชัน NocoBase ในโหมดคลัสเตอร์จำเป็นต้องได้รับการสนับสนุนจากปลั๊กอินดังต่อไปนี้ครับ/ค่ะ
| ฟังก์ชัน | ปลั๊กอิน |
|---|---|
| อะแดปเตอร์แคช | Built-in |
| อะแดปเตอร์สัญญาณซิงค์ | @nocobase/plugin-pubsub-adapter-redis |
| อะแดปเตอร์คิวข้อความ | @nocobase/plugin-queue-adapter-redis หรือ @nocobase/plugin-queue-adapter-rabbitmq |
| อะแดปเตอร์ล็อกแบบกระจาย | @nocobase/plugin-lock-adapter-redis |
| ตัวจัดสรร Worker ID | @nocobase/plugin-workerid-allocator-redis |
ก่อนอื่น โปรดตรวจสอบให้แน่ใจว่าคุณได้รับสิทธิ์การใช้งานสำหรับปลั๊กอินข้างต้นแล้ว (คุณสามารถซื้อสิทธิ์การใช้งานปลั๊กอินที่เกี่ยวข้องได้จากแพลตฟอร์มบริการปลั๊กอินเชิงพาณิชย์ครับ/ค่ะ)
ส่วนประกอบของระบบอื่นๆ นอกเหนือจากอินสแตนซ์ของแอปพลิเคชันเอง สามารถเลือกใช้งานได้โดยบุคลากรฝ่ายปฏิบัติการตามความต้องการของทีมครับ/ค่ะ
เนื่องจากโหมดคลัสเตอร์ในปัจจุบันรองรับเฉพาะอินสแตนซ์ของแอปพลิเคชันเท่านั้น ฐานข้อมูลจึงรองรับเพียงโหนดเดียวเป็นการชั่วคราว หากคุณมีสถาปัตยกรรมฐานข้อมูลแบบ Master-Slave หรืออื่นๆ คุณจะต้องนำไปใช้งานเองผ่านมิดเดิลแวร์ และต้องแน่ใจว่าโปร่งใสต่อแอปพลิเคชัน NocoBase ครับ/ค่ะ
โหมดคลัสเตอร์ของ NocoBase ต้องอาศัยมิดเดิลแวร์บางอย่างเพื่อการสื่อสารและการประสานงานระหว่างคลัสเตอร์ ซึ่งรวมถึง:
เมื่อส่วนประกอบมิดเดิลแวร์ทั้งหมดใช้ Redis คุณสามารถเริ่มบริการ Redis เพียงตัวเดียวในเครือข่ายภายในของคลัสเตอร์ (หรือ Kubernetes) ได้ครับ/ค่ะ หรือจะเปิดใช้งานบริการ Redis แยกกันสำหรับแต่ละฟังก์ชัน (แคช, สัญญาณซิงค์, คิวข้อความ และล็อกแบบกระจาย) ก็ได้เช่นกัน
ข้อแนะนำเวอร์ชัน
redis-stack ที่มีฟีเจอร์ Bloom FilterNocoBase จำเป็นต้องใช้ไดเรกทอรี storage เพื่อจัดเก็บไฟล์ที่เกี่ยวข้องกับระบบ ในโหมดหลายโหนด ควรเมานต์ดิสก์คลาวด์ (หรือ NFS) เพื่อรองรับการเข้าถึงที่ใช้ร่วมกันระหว่างหลายโหนดครับ/ค่ะ มิฉะนั้น พื้นที่จัดเก็บข้อมูลภายในเครื่องจะไม่ซิงค์โดยอัตโนมัติ และจะไม่สามารถใช้งานได้อย่างถูกต้อง
เมื่อติดตั้งด้วย Kubernetes โปรดดูส่วน การติดตั้ง Kubernetes: พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกัน ครับ/ค่ะ
โหมดคลัสเตอร์จำเป็นต้องใช้โหลดบาลานเซอร์เพื่อกระจายคำขอ รวมถึงการตรวจสอบสถานะ (Health Check) และการย้ายระบบเมื่อเกิดข้อผิดพลาด (Failover) ของอินสแตนซ์แอปพลิเคชันครับ/ค่ะ ส่วนนี้สามารถเลือกและกำหนดค่าได้เองตามความต้องการด้านการปฏิบัติงานของทีม
ตัวอย่างเช่น หากใช้ Nginx ที่ติดตั้งเอง ให้เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์คอนฟิกูเรชัน:
ซึ่งหมายถึงการส่งต่อคำขอแบบ Reverse Proxy และกระจายไปยังโหนดเซิร์ฟเวอร์ต่างๆ เพื่อประมวลผลครับ/ค่ะ
สำหรับมิดเดิลแวร์โหลดบาลานซ์ที่ผู้ให้บริการคลาวด์รายอื่นมีให้ โปรดดูเอกสารการกำหนดค่าที่ผู้ให้บริการนั้นๆ จัดหาให้ครับ/ค่ะ
โหนดทั้งหมดในคลัสเตอร์ควรใช้การกำหนดค่าตัวแปรสภาพแวดล้อมเดียวกันครับ/ค่ะ นอกเหนือจากตัวแปรสภาพแวดล้อมพื้นฐานของ NocoBase แล้ว ยังต้องกำหนดค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับมิดเดิลแวร์ดังต่อไปนี้ด้วย
เมื่อแอปพลิเคชันทำงานบนโหนดที่มีหลายคอร์ คุณสามารถเปิดใช้งานโหมดหลายคอร์ของโหนดได้ดังนี้:
หากคุณกำลังติดตั้ง Pod ของแอปพลิเคชันใน Kubernetes คุณสามารถละเว้นการกำหนดค่านี้ได้ และควบคุมจำนวนอินสแตนซ์ของแอปพลิเคชันผ่านจำนวน Pod Replicas ครับ/ค่ะ
เนื่องจากตารางระบบบางส่วนใน NocoBase ใช้ ID ที่ไม่ซ้ำกันทั่วโลก (Globally Unique ID) เป็น Primary Key จึงจำเป็นต้องใช้ตัวจัดสรร Worker ID เพื่อให้แน่ใจว่าอินสแตนซ์แอปพลิเคชันแต่ละตัวในคลัสเตอร์ได้รับ Worker ID ที่ไม่ซ้ำกัน ซึ่งจะช่วยหลีกเลี่ยงปัญหา Primary Key ซ้ำกันได้ครับ/ค่ะ ปัจจุบัน Worker ID ถูกออกแบบให้อยู่ในช่วง 0-31 ซึ่งหมายความว่าแอปพลิเคชันเดียวกันสามารถรองรับการทำงานพร้อมกันได้สูงสุด 32 โหนด สำหรับรายละเอียดเกี่ยวกับการออกแบบ Global Unique ID โปรดดูที่ @nocobase/snowflake-id
โดยปกติแล้ว อะแดปเตอร์ที่เกี่ยวข้องทั้งหมดสามารถใช้ Redis อินสแตนซ์เดียวกันได้ครับ/ค่ะ แต่จะดีที่สุดหากแยกใช้ฐานข้อมูลที่แตกต่างกันเพื่อหลีกเลี่ยงปัญหา Key ซ้ำกันที่อาจเกิดขึ้นได้ เช่น:
ในปัจจุบัน ปลั๊กอินแต่ละตัวใช้การกำหนดค่าตัวแปรสภาพแวดล้อม Redis ของตนเองครับ/ค่ะ ในอนาคต อาจมีการพิจารณาให้ใช้ REDIS_URL เป็นการกำหนดค่าสำรอง (Fallback Configuration) ที่เป็นมาตรฐานเดียวกัน
หากคุณใช้ Kubernetes ในการจัดการคลัสเตอร์ คุณสามารถกำหนดค่าตัวแปรสภาพแวดล้อมข้างต้นใน ConfigMap หรือ Secret ได้ครับ/ค่ะ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การติดตั้ง Kubernetes
เมื่อดำเนินการเตรียมความพร้อมทั้งหมดข้างต้นเสร็จสิ้นแล้ว คุณสามารถเข้าสู่ขั้นตอนการปฏิบัติงาน เพื่อจัดการอินสแตนซ์ของแอปพลิเคชันต่อไปได้เลยครับ/ค่ะ