logologo
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
logologo
โหมดคลัสเตอร์
ภาพรวม
การเตรียมการ
การปรับใช้บน Kubernetes
กระบวนการดำเนินงาน
การแบ่งบริการ
ข้อมูลอ้างอิงสำหรับการพัฒนา
Previous Pageภาพรวม
Next Pageการปรับใช้บน Kubernetes
TIP

เอกสารนี้แปลโดย 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 เพื่อเพิ่มความเร็วในการเข้าถึงข้อมูล
  • สัญญาณซิงค์: ใช้ฟีเจอร์ Stream ของ Redis เพื่อส่งสัญญาณซิงค์ระหว่างคลัสเตอร์
  • คิวข้อความ: ใช้มิดเดิลแวร์คิวข้อความที่ใช้ Redis หรือ RabbitMQ เพื่อประมวลผลข้อความแบบอะซิงโครนัส
  • ล็อกแบบกระจาย: ใช้ล็อกแบบกระจายที่ใช้ Redis เพื่อรับประกันความปลอดภัยในการเข้าถึงทรัพยากรที่ใช้ร่วมกันในคลัสเตอร์

เมื่อส่วนประกอบมิดเดิลแวร์ทั้งหมดใช้ Redis คุณสามารถเริ่มบริการ Redis เพียงตัวเดียวในเครือข่ายภายในของคลัสเตอร์ (หรือ Kubernetes) ได้ครับ/ค่ะ หรือจะเปิดใช้งานบริการ Redis แยกกันสำหรับแต่ละฟังก์ชัน (แคช, สัญญาณซิงค์, คิวข้อความ และล็อกแบบกระจาย) ก็ได้เช่นกัน

ข้อแนะนำเวอร์ชัน

  • Redis: >=8.0 หรือเวอร์ชัน redis-stack ที่มีฟีเจอร์ Bloom Filter
  • RabbitMQ: >=4.0

#พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกัน

NocoBase จำเป็นต้องใช้ไดเรกทอรี storage เพื่อจัดเก็บไฟล์ที่เกี่ยวข้องกับระบบ ในโหมดหลายโหนด ควรเมานต์ดิสก์คลาวด์ (หรือ NFS) เพื่อรองรับการเข้าถึงที่ใช้ร่วมกันระหว่างหลายโหนดครับ/ค่ะ มิฉะนั้น พื้นที่จัดเก็บข้อมูลภายในเครื่องจะไม่ซิงค์โดยอัตโนมัติ และจะไม่สามารถใช้งานได้อย่างถูกต้อง

เมื่อติดตั้งด้วย Kubernetes โปรดดูส่วน การติดตั้ง Kubernetes: พื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกัน ครับ/ค่ะ

#โหลดบาลานซ์

โหมดคลัสเตอร์จำเป็นต้องใช้โหลดบาลานเซอร์เพื่อกระจายคำขอ รวมถึงการตรวจสอบสถานะ (Health Check) และการย้ายระบบเมื่อเกิดข้อผิดพลาด (Failover) ของอินสแตนซ์แอปพลิเคชันครับ/ค่ะ ส่วนนี้สามารถเลือกและกำหนดค่าได้เองตามความต้องการด้านการปฏิบัติงานของทีม

ตัวอย่างเช่น หากใช้ Nginx ที่ติดตั้งเอง ให้เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์คอนฟิกูเรชัน:

upstream myapp {
    # ip_hash; # ใช้สำหรับคงสถานะเซสชัน เมื่อเปิดใช้งาน คำขอจากไคลเอนต์เดียวกันจะถูกส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์เดียวกันเสมอ
    server 172.31.0.1:13000; # โหนดภายใน 1
    server 172.31.0.2:13000; # โหนดภายใน 2
    server 172.31.0.3:13000; # โหนดภายใน 3
}

server {
    listen 80;

    location / {
        # ใช้ upstream ที่กำหนดไว้สำหรับโหลดบาลานซ์
        proxy_pass http://myapp;
        # ... การตั้งค่าอื่นๆ
    }
}

ซึ่งหมายถึงการส่งต่อคำขอแบบ Reverse Proxy และกระจายไปยังโหนดเซิร์ฟเวอร์ต่างๆ เพื่อประมวลผลครับ/ค่ะ

สำหรับมิดเดิลแวร์โหลดบาลานซ์ที่ผู้ให้บริการคลาวด์รายอื่นมีให้ โปรดดูเอกสารการกำหนดค่าที่ผู้ให้บริการนั้นๆ จัดหาให้ครับ/ค่ะ

#การกำหนดค่าตัวแปรสภาพแวดล้อม

โหนดทั้งหมดในคลัสเตอร์ควรใช้การกำหนดค่าตัวแปรสภาพแวดล้อมเดียวกันครับ/ค่ะ นอกเหนือจากตัวแปรสภาพแวดล้อมพื้นฐานของ NocoBase แล้ว ยังต้องกำหนดค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับมิดเดิลแวร์ดังต่อไปนี้ด้วย

#โหมดหลายคอร์

เมื่อแอปพลิเคชันทำงานบนโหนดที่มีหลายคอร์ คุณสามารถเปิดใช้งานโหมดหลายคอร์ของโหนดได้ดังนี้:

# เปิดใช้งานโหมดหลายคอร์ของ PM2
# CLUSTER_MODE=max # ปิดใช้งานโดยค่าเริ่มต้น ต้องกำหนดค่าด้วยตนเอง

หากคุณกำลังติดตั้ง Pod ของแอปพลิเคชันใน Kubernetes คุณสามารถละเว้นการกำหนดค่านี้ได้ และควบคุมจำนวนอินสแตนซ์ของแอปพลิเคชันผ่านจำนวน Pod Replicas ครับ/ค่ะ

#แคช

# อะแดปเตอร์แคช ในโหมดคลัสเตอร์ต้องตั้งค่าเป็น redis (หากไม่ระบุจะใช้หน่วยความจำภายในเครื่องโดยค่าเริ่มต้น)
CACHE_DEFAULT_STORE=redis

# URL การเชื่อมต่ออะแดปเตอร์แคช Redis ต้องระบุ
CACHE_REDIS_URL=

#สัญญาณซิงค์

# URL การเชื่อมต่ออะแดปเตอร์ซิงค์ Redis หากไม่ระบุจะใช้ redis://localhost:6379/0 โดยค่าเริ่มต้น
PUBSUB_ADAPTER_REDIS_URL=

#ล็อกแบบกระจาย

# อะแดปเตอร์ล็อก ในโหมดคลัสเตอร์ต้องตั้งค่าเป็น redis (หากไม่ระบุจะใช้ล็อกภายในเครื่องแบบหน่วยความจำโดยค่าเริ่มต้น)
LOCK_ADAPTER_DEFAULT=redis

# URL การเชื่อมต่ออะแดปเตอร์ล็อก Redis หากไม่ระบุจะใช้ redis://localhost:6379/0 โดยค่าเริ่มต้น
LOCK_ADAPTER_REDIS_URL=

#คิวข้อความ

# เปิดใช้งาน Redis เป็นอะแดปเตอร์คิวข้อความ หากไม่ระบุจะใช้อะแดปเตอร์หน่วยความจำภายในเครื่องโดยค่าเริ่มต้น
QUEUE_ADAPTER=redis
# URL การเชื่อมต่ออะแดปเตอร์คิวข้อความ Redis หากไม่ระบุจะใช้ redis://localhost:6379/0 โดยค่าเริ่มต้น
QUEUE_ADAPTER_REDIS_URL=

#ตัวจัดสรร Worker ID

เนื่องจากตารางระบบบางส่วนใน NocoBase ใช้ ID ที่ไม่ซ้ำกันทั่วโลก (Globally Unique ID) เป็น Primary Key จึงจำเป็นต้องใช้ตัวจัดสรร Worker ID เพื่อให้แน่ใจว่าอินสแตนซ์แอปพลิเคชันแต่ละตัวในคลัสเตอร์ได้รับ Worker ID ที่ไม่ซ้ำกัน ซึ่งจะช่วยหลีกเลี่ยงปัญหา Primary Key ซ้ำกันได้ครับ/ค่ะ ปัจจุบัน Worker ID ถูกออกแบบให้อยู่ในช่วง 0-31 ซึ่งหมายความว่าแอปพลิเคชันเดียวกันสามารถรองรับการทำงานพร้อมกันได้สูงสุด 32 โหนด สำหรับรายละเอียดเกี่ยวกับการออกแบบ Global Unique ID โปรดดูที่ @nocobase/snowflake-id

# URL การเชื่อมต่อ Redis สำหรับตัวจัดสรร Worker ID หากไม่ระบุจะถูกจัดสรรแบบสุ่ม
REDIS_URL=
เคล็ดลับ

โดยปกติแล้ว อะแดปเตอร์ที่เกี่ยวข้องทั้งหมดสามารถใช้ Redis อินสแตนซ์เดียวกันได้ครับ/ค่ะ แต่จะดีที่สุดหากแยกใช้ฐานข้อมูลที่แตกต่างกันเพื่อหลีกเลี่ยงปัญหา Key ซ้ำกันที่อาจเกิดขึ้นได้ เช่น:

CACHE_REDIS_URL=redis://localhost:6379/0
PUBSUB_ADAPTER_REDIS_URL=redis://localhost:6379/1
LOCK_ADAPTER_REDIS_URL=redis://localhost:6379/2
QUEUE_ADAPTER_REDIS_URL=redis://localhost:6379/3
REDIS_URL=redis://localhost:6379/4

ในปัจจุบัน ปลั๊กอินแต่ละตัวใช้การกำหนดค่าตัวแปรสภาพแวดล้อม Redis ของตนเองครับ/ค่ะ ในอนาคต อาจมีการพิจารณาให้ใช้ REDIS_URL เป็นการกำหนดค่าสำรอง (Fallback Configuration) ที่เป็นมาตรฐานเดียวกัน

หากคุณใช้ Kubernetes ในการจัดการคลัสเตอร์ คุณสามารถกำหนดค่าตัวแปรสภาพแวดล้อมข้างต้นใน ConfigMap หรือ Secret ได้ครับ/ค่ะ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การติดตั้ง Kubernetes

เมื่อดำเนินการเตรียมความพร้อมทั้งหมดข้างต้นเสร็จสิ้นแล้ว คุณสามารถเข้าสู่ขั้นตอนการปฏิบัติงาน เพื่อจัดการอินสแตนซ์ของแอปพลิเคชันต่อไปได้เลยครับ/ค่ะ