Workstation Logo
ผลิตภัณฑ์
AI LabsOpenAI AgentsClaude AgentsGrok BotWorkstation CRM (WSL CRM)การตลาดผลิตภัณฑ์ทั้งหมด
โซลูชัน AI
เวิร์กสเตชัน AIAI SME PackagesAI ส่วนตัวคลัสเตอร์ GPUEdge AIแล็บ AI องค์กรAI ตามอุตสาหกรรม
บริการ
Platform ModernisationDigital EngineeringData Foundations & AIAutonomous Operationsที่ปรึกษา AIระบบอัตโนมัติ DevOpsความมั่นคงปลอดภัยไซเบอร์การพัฒนาซอฟต์แวร์การสร้างเอเจนต์การตั้งค่า MLOps
เกี่ยวกับเรา
พาร์ทเนอร์เรื่องราวลูกค้า
บทความ
เอกสาร
WSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7
บล็อก
ติดต่อเราLogin
Workstation

เวิร์กสเตชัน AI ซอฟต์แวร์มัลติเอเจนต์ AI โครงสร้างพื้นฐาน GPU และโซลูชันเอเจนต์อัจฉริยะสำหรับธุรกิจยุคใหม่

ติดต่อเรา

โซลูชัน AI

เวิร์กสเตชัน AIAI SME PackagesAI ส่วนตัวคลัสเตอร์ GPUEdge AIแล็บ AI องค์กรAI ตามอุตสาหกรรม

ผลิตภัณฑ์

ผลิตภัณฑ์ทั้งหมดWSL CRM และ ERPการตลาดOpenAI AgentsWSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7

บริษัท

เกี่ยวกับเราทำไมต้อง Workstationพาร์ทเนอร์เรื่องราวลูกค้าราคาติดต่อ

แหล่งข้อมูล

บทความเอกสารประกอบบล็อกค้นหาแผนผังเว็บไซต์
สำนักงานสหราชอาณาจักร
77-79 Marlowes, Hemel Hempstead HP1 1LFเส้นทาง - ออกทางแยกที่ 20 จาก M25 Outer Londonเลขทะเบียนบริษัท: 11641870จ. - ศ.: 9:00 - 18:00 น. GMT
+44 7515 356 146
สำนักงานเบลเยียม
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683จ. - ศ.: 9:00 - 18:00 น. CET
+32 492 45 67 46
สำนักงานอินเดีย
#159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

© 2026 Workstation AI สงวนลิขสิทธิ์

ความเป็นส่วนตัวคุกกี้ข้อกำหนดการให้บริการแผนผังเว็บไซต์

Loading blog...

Home / Blog
DatabaseKubernetesDevOpsBackend

Couchbase ความพร้อมใช้งานสูงในการผลิต: XDCR, Kubernetes Operator และการปรับใช้หลายภูมิภาค

Enterprise Couchbase HA พร้อมด้วย XDCR, Autonomous Operator และการปรับใช้ Multi-Cloud

Balinder Walia12 เมษายน 256925 min read
บทนำ

: ทำไมต้อง Couchbase สำหรับปริมาณงานการผลิตที่มีความพร้อมใช้งานสูง

Couchbase Server เป็นฐานข้อมูล NoSQL หลายรุ่นแบบกระจายที่ออกแบบมาเพื่อแอปพลิเคชันเชิงโต้ตอบที่ต้องการประสิทธิภาพที่มีความหน่วงต่ำสม่ำเสมอในทุกขนาด ต่างจากฐานข้อมูลที่ใช้ฟีเจอร์แบบกระจายในภายหลัง Couchbase ได้รับการออกแบบทางสถาปัตยกรรมตั้งแต่เริ่มต้นโดยมีโทโพโลยีแบบ peer-to-peer ที่ใช้ร่วมกันโดยที่ทุกโหนดเท่ากัน และข้อมูลจะถูกแบ่งส่วนทั่วทั้งคลัสเตอร์โดยอัตโนมัติโดยใช้กลไกแฮชที่กำหนดขึ้นเองที่เรียกว่าvBucketsตัวเลือกทางสถาปัตยกรรมนี้ช่วยลดความล้มเหลวเพียงจุดเดียวในชั้นข้อมูล และเปิดใช้งานการปรับขนาดแนวนอนโดยไม่ต้องเปลี่ยนแปลงแอปพลิเคชัน

สิ่งที่ทำให้ Couchbase แตกต่างออกไปในพื้นที่ที่มีความพร้อมใช้งานสูงคือCross Data Center Replication (XDCR)ซึ่งเป็นกลไกการจำลองแบบอะซิงโครนัสในตัวที่ส่งกระแสข้อมูลการกลายพันธุ์อย่างต่อเนื่องระหว่างคลัสเตอร์ที่มีการกระจายทางภูมิศาสตร์ เมื่อรวมกับระบบเฟลโอเวอร์อัตโนมัติ การรับรู้แร็ค/โซน และชุดบริการครบวงจร (ข้อมูล ดัชนี การสืบค้น การค้นหา การวิเคราะห์ และเหตุการณ์) Couchbase มอบแพลตฟอร์มแบบครบวงจรที่สามารถใช้เป็นทั้งฐานข้อมูลการปฏิบัติงานและกลไกการวิเคราะห์สำหรับแอปพลิเคชันสมัยใหม่

ในคู่มือที่ครอบคลุมนี้ เราจะสำรวจทุกแง่มุมของการรันเซิร์ฟเวอร์ Couchbase ในสภาพแวดล้อมการผลิตที่มีความพร้อมใช้งานสูง: สถาปัตยกรรมภายในที่ทำให้ HA เป็นไปได้, การกำหนดค่า XDCR สำหรับการปรับใช้หลายภูมิภาค, Couchbase Autonomous Operator สำหรับ Kubernetes, รูปแบบการปรับใช้เฉพาะคลาวด์สำหรับ AWS EKS, Azure AKS และ GCP GKE, การปรับใช้ k3s แบบ Bare Metal พร้อม Rancher และ Longhorn, กลยุทธ์การสำรองและกู้คืน การปรับแต่งแบบสอบถาม N1QL การเพิ่มความปลอดภัย การตรวจสอบ และ Couchbase Mobile พร้อม Sync Gateway สำหรับการปรับใช้ Edge ในตอนท้าย คุณจะมีความรู้ที่สามารถนำไปใช้ได้จริงในการปรับใช้และดำเนินการคลัสเตอร์ Couchbase ระดับการผลิตบนโครงสร้างพื้นฐานใดๆ

สถาปัตยกรรมเซิร์ฟเวอร์

Couchbase: บริการ, vBuckets และการแบ่งส่วนอัตโนมัติ

การทำความเข้าใจสถาปัตยกรรมภายในของ Couchbase เป็นสิ่งสำคัญก่อนที่จะปรับใช้เพื่อความพร้อมใช้งานสูง Couchbase ใช้สถาปัตยกรรมMulti-Dimensional Scaling (MDS)ซึ่งสามารถปรับใช้และปรับขนาดบริการต่างๆ ได้อย่างอิสระทั่วทั้งโหนดคลัสเตอร์ ช่วยให้ผู้ปฏิบัติงานสามารถควบคุมการจัดสรรทรัพยากรและการแยกประสิทธิภาพได้อย่างละเอียด

บริการหลักหกประการ

Couchbase Server ให้บริการแบบรวมหกบริการ โดยแต่ละบริการจัดการประเภทภาระงานที่แตกต่างกัน:

  • Data Service (KV)— กลไกคีย์-ค่าหลักที่สร้างขึ้นบนสถาปัตยกรรมที่เน้นหน่วยความจำเป็นหลัก โดยจะจัดการการดำเนินการ CRUD จัดการการกระจาย vBucket และทำหน้าที่เป็นเลเยอร์การคงอยู่ ข้อมูลถูกเก็บไว้ในหน่วยความจำ (แคชที่มีการจัดการ) และคงอยู่ในดิสก์แบบอะซิงโครนัส บริการนี้ต้องทำงานบนโหนดอย่างน้อยหนึ่งโหนดในทุกคลัสเตอร์
  • Index Service (GSI)— รักษา Global Secondary Indexes ที่รองรับการสืบค้น N1QL ดัชนีจะถูกจัดเก็บแยกจากข้อมูล ทำให้สามารถปรับขนาดได้อย่างอิสระ รองรับโหมดการจัดเก็บดัชนีมาตรฐานและเพิ่มประสิทธิภาพหน่วยความจำ
  • Query Service (N1QL)— ดำเนินการค้นหา N1QL (SQL++ สำหรับ JSON) กับคลัสเตอร์ ไร้สัญชาติด้วยการออกแบบ ทำให้ง่ายต่อการปรับขนาดในแนวนอน ประสานงานกับบริการข้อมูลและดัชนีเพื่อวางแผนและดำเนินการสืบค้น
  • Search Service (FTS)— ให้ความสามารถในการค้นหาข้อความแบบเต็มที่ขับเคลื่อนโดยเครื่องมือค้นหา Bleve รองรับการจับคู่แบบคลุมเครือ การสืบค้นเชิงพื้นที่ การค้นหาแบบประกอบ และเครื่องวิเคราะห์แบบกำหนดเอง ดัชนีจะถูกแบ่งพาร์ติชันและจำลองแบบข้ามโหนดการค้นหา
  • Analytics Service (CBAS)— รันการสืบค้นเชิงวิเคราะห์ที่ซับซ้อนโดยใช้กลไกการประมวลผลแบบขนานที่ใช้ Apache Asterix ทำงานบนสำเนาข้อมูลของตัวเอง ทำให้มั่นใจได้ว่าปริมาณงานเชิงวิเคราะห์จะไม่ส่งผลกระทบต่อเวลาแฝงในการปฏิบัติงาน
  • Eventing Service— ดำเนินการฟังก์ชัน JavaScript ฝั่งเซิร์ฟเวอร์เพื่อตอบสนองต่อการเปลี่ยนแปลงข้อมูล เปิดใช้งานการเพิ่มคุณค่าข้อมูล การแปลง การลบแบบเรียงซ้อน และทริกเกอร์การรวมข้อมูลแบบเรียลไทม์โดยไม่ต้องใช้โครงสร้างพื้นฐานภายนอก
เอ็กซ์แท็ก49เอ็กซ์สถาปัตยกรรมคลัสเตอร์Couchbase & บริการจำหน่ายCouchbase Cluster (เปิดใช้งาน Auto-Failover, การตรวจจับ 3 วินาที)โหนด 1 (10.0.1.10)บริการข้อมูล (KV)vบัคเก็ต 0-341 | แคช 256MBบริการดัชนี(GSI)บริการสืบค้น(N1QL)แผนที่ vBucket (ใช้งานอยู่)0-341 แอคทีฟ | 342-682 แบบจำลองคงอยู่อัตโนมัติบนดิสก์ (async)โหนด 2 (10.0.1.11)บริการข้อมูล (KV)vบัคเก็ต 342-682 | แคช 256MBบริการค้นหา (FTS)บริการวิเคราะห์ (CBAS)แผนที่ vBucket (ใช้งานอยู่)342-682 แอคทีฟ | 683-1023 แบบจำลองDCP สตรีมไปยัง Analyticsโหนด 3 (10.0.1.12)บริการข้อมูล (KV)vบัคเก็ต 683-1023 | แคช 256MBบริการอีเว้นท์บริการสืบค้น(N1QL)แผนที่ vBucket (ใช้งานอยู่)683-1023 แอคทีฟ | 0-341 แบบจำลองอีเวนติ้ง DCP คอนซูเมอร์ตัวจัดการความล้มเหลวอัตโนมัติการตรวจสอบการเต้นของหัวใจ | การตรวจจับ 3 วินาที | โปรโมชั่น vBucket | ความล้มเหลวตามลำดับสูงสุด 3 ครั้งข้อมูล (KV)ดัชนี/แบบสอบถามค้นหา/วิเคราะห์/Eventingการจำลองแบบภายในคลัสเตอร์ฮาร์ทบีท

การกระจาย vBucket และการแบ่งส่วนอัตโนมัติ

Couchbase กระจายข้อมูลทั่วทั้งคลัสเตอร์โดยใช้1024 vBuckets(บัคเก็ตเสมือน) เอกสารทุกฉบับถูกแมปกับ vBucket โดยใช้แฮช CRC32 ของคีย์เอกสาร modulo 1024 แมปคลัสเตอร์ — ดูแลโดยทุกโหนดและแคชโดยไคลเอนต์ SDK ทุกตัว — แมปแต่ละ vBucket กับโหนดเฉพาะ การแม็ปตามที่กำหนดนี้หมายความว่าไคลเอ็นต์จะรู้เสมอว่าโหนดใดเก็บเอกสารใด ๆ ไว้ ทำให้สามารถอ่านและเขียนแบบฮอปเดียวโดยมีเวลาแฝงต่ำกว่ามิลลิวินาที

เมื่อมีการเพิ่มหรือลบโหนด Couchbase จะแจกจ่าย vBuckets ใหม่โดยอัตโนมัติผ่านกระบวนการที่เรียกว่าปรับสมดุลในระหว่างการปรับสมดุล คลัสเตอร์จะย้าย vBuckets ระหว่างโหนดในขณะที่ยังคงทำงานได้อย่างสมบูรณ์ การปรับสมดุลได้รับการจัดการอย่างระมัดระวังเพื่อรักษาจำนวนเรพลิกาที่กำหนดค่าไว้ตลอดเวลา และไคลเอนต์จะถูกเปลี่ยนเส้นทางไปยังตำแหน่ง vBucket ใหม่อย่างราบรื่นผ่านการอัพเดตแผนที่คลัสเตอร์

การจำลองภายในคลัสเตอร์และการเฟลโอเวอร์อัตโนมัติ

แต่ละ vBucket มีสำเนาที่ใช้งานอยู่หนึ่งสำเนาและสำเนาแบบจำลองสูงสุดสามชุดที่กระจายไปตามโหนดต่างๆ เมื่อไคลเอนต์เขียนเอกสาร การเขียนจะไปที่ vBucket ที่ใช้งานอยู่บนโหนดที่รับผิดชอบ จากนั้น Data Service จะจำลองการกลายพันธุ์เพื่อจำลอง vBuckets บนโหนดอื่นๆ ผ่านทางสตรีมDCP (Database Change Protocol) ภายในตามค่าเริ่มต้น Couchbase จะกำหนดค่าแบบจำลองหนึ่งรายการ แต่สำหรับการปรับใช้ HA ที่ใช้งานจริง แนะนำให้ใช้สองแบบจำลอง:

# Configure bucket with 2 replicas via CLI
/opt/couchbase/bin/couchbase-cli bucket-create \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --bucket production-data \
  --bucket-type couchbase \
  --bucket-ramsize 4096 \
  --bucket-replica 2 \
  --bucket-priority high \
  --bucket-eviction-policy valueOnly \
  --enable-flush 0 \
  --compression-mode active \
  --max-ttl 0 \
  --durability-min-level majorityAndPersistActive

การเฟลโอเวอร์อัตโนมัติเป็นกลไกของ Couchbase สำหรับการตรวจจับและกู้คืนจากความล้มเหลวของโหนดโดยอัตโนมัติ เมื่อโหนดไม่ตอบสนอง ตัวจัดการคลัสเตอร์จะรอการหมดเวลาที่สามารถกำหนดค่าได้ (ขั้นต่ำ 5 วินาที แนะนำ 30 วินาทีสำหรับการผลิต) จากนั้นเลื่อนระดับ vBuckets จำลองบนโหนดที่รอดมาสู่สถานะใช้งานอยู่ สิ่งนี้เกิดขึ้นโดยไม่มีการแทรกแซงด้านแอปพลิเคชัน — ไคลเอนต์ SDK จะได้รับแผนที่คลัสเตอร์ที่อัปเดตและกำหนดเส้นทางคำขอไปยัง vBuckets ใหม่ที่ใช้งานอยู่ทันที

# Configure auto-failover settings
/opt/couchbase/bin/couchbase-cli setting-autofailover \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --enable-auto-failover 1 \
  --auto-failover-timeout 30 \
  --max-failovers 3 \
  --enable-failover-of-server-groups 1 \
  --failover-on-data-disk-issues 1 \
  --failover-data-disk-period 120 \
  --can-abort-rebalance 1

พารามิเตอร์การเฟลโอเวอร์อัตโนมัติที่สำคัญ:

  • การเฟลโอเวอร์อัตโนมัติ-หมดเวลา— วินาทีที่รอก่อนที่จะทริกเกอร์เฟลโอเวอร์ ค่าที่ต่ำกว่าจะช่วยลดเวลาหยุดทำงานแต่เพิ่มความเสี่ยงที่เป็นผลบวกลวง 30 วินาทีคือการตั้งค่าการผลิตที่แนะนำ
  • การเฟลโอเวอร์สูงสุด— จำนวนสูงสุดของการเฟลโอเวอร์อัตโนมัติตามลำดับก่อนที่จะต้องมีการแทรกแซงด้วยตนเอง ตั้งค่าเป็น 3 สำหรับคลัสเตอร์ 5 โหนด (เพื่อรักษาองค์ประชุม)
  • เปิดใช้งาน-เฟลโอเวอร์ของกลุ่มเซิร์ฟเวอร์— เปิดใช้งานเฟลโอเวอร์ของกลุ่มเซิร์ฟเวอร์ทั้งหมด (แร็ค/โซน) ซึ่งสำคัญมากสำหรับการปรับใช้แบบทราบโซน
  • ปัญหาการเฟลโอเวอร์บนดิสก์ข้อมูล— ทริกเกอร์การเฟลโอเวอร์เมื่อ Data Service ตรวจพบข้อผิดพลาด I/O ของดิสก์อย่างต่อเนื่อง

XDCR: การจำลองข้ามศูนย์ข้อมูล

XDCR คือเทคโนโลยีการจำลองแบบหลายภูมิภาคที่โดดเด่นของ Couchbase ต่างจากการจำลองระดับฐานข้อมูลที่พบในระบบ RDBMS แบบดั้งเดิม XDCR ทำงานที่ระดับบัคเก็ตและสตรีมการเปลี่ยนแปลงเอกสารแต่ละรายการระหว่างคลัสเตอร์ Couchbase อิสระ แต่ละคลัสเตอร์ยังคงเป็นอิสระโดยสมบูรณ์ โดยสามารถรับการอ่านและเขียนได้อย่างอิสระ ทำให้ XDCR เหมาะอย่างยิ่งสำหรับการปรับใช้หลายภูมิภาคที่ใช้งานอยู่ ซึ่งผู้ใช้ต้องการการเข้าถึงที่มีเวลาแฝงต่ำจากทุกภูมิศาสตร์

ทิศทางเดียวเทียบกับแบบสองทิศทาง XDCR

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

XDCR แบบสองทิศทางสร้างลิงก์การจำลองในทั้งสองทิศทางระหว่างสองคลัสเตอร์ ทำให้สามารถใช้งานแบบแอ็กทีฟและแอคทีฟโดยที่ทั้งสองคลัสเตอร์ยอมรับการเขียน นี่คือการกำหนดค่าที่ทรงพลังที่สุด แต่ต้องมีการวางแผนการแก้ไขข้อขัดแย้งอย่างระมัดระวัง

XDCR การจำลองแบบสองทิศทางหลายภูมิภาคUS-EAST (AWS EKS)คลัสเตอร์: cb-us-east5 โหนด | ข้อมูล+ดัชนี+แบบสอบถามที่ฝากข้อมูล: แอปที่เก็บข้อมูล: ผู้ใช้การแก้ไขข้อขัดแย้ง: LWW (การประทับเวลา)XDCR: การบีบอัดเปิด | TLS 1.3เขียน: ~15k ปฏิบัติการ/วินาทีEU-WEST (Azure AKS)คลัสเตอร์: cb-eu-west5 โหนด | ข้อมูล+ดัชนี+แบบสอบถามที่เก็บข้อมูล: แอปที่เก็บข้อมูล: ผู้ใช้การแก้ไขข้อขัดแย้ง: LWW (การประทับเวลา)XDCR: การบีบอัด | TLS 1.3เขียน: ~12k การดำเนินการ/วินาทีAP-SOUTH (GCP GKE)คลัสเตอร์: cb-ap-south3 โหนด | ข้อมูล+ดัชนี+แบบสอบถามที่ฝากข้อมูล: แอปที่เก็บข้อมูล: ผู้ใช้การแก้ไขข้อขัดแย้ง: LWW (การประทับเวลา)XDCR: การบีบอัดเปิด | TLS 1.3เขียน: ~8k การดำเนินการ/วินาทีXDCRXDCRXDCR (แบบสองทิศทาง)กลยุทธ์การแก้ไขข้อขัดแย้งLWW (การเขียนครั้งสุดท้ายชนะตามเวลาประทับ) | หมายเลขลำดับ | การแก้ไขข้อขัดแย้งแบบกำหนดเองผ่าน Merge Functions (Enterprise)XDCR ไปข้างหน้าXDCR ย้อนกลับลิงก์ข้ามภูมิภาคAWSAzureGCP

การตั้งค่าการจำลอง XDCR

การกำหนดค่า XDCR เกี่ยวข้องกับการสร้างการอ้างอิงคลัสเตอร์ระยะไกล จากนั้นกำหนดลิงก์การจำลองที่ระดับบัคเก็ต ด้านล่างนี้คือคำสั่ง CLI และการเรียก REST API สำหรับการตั้งค่าแบบสองทิศทางโดยสมบูรณ์:

# Step 1: Create remote cluster reference on the US-EAST cluster
/opt/couchbase/bin/couchbase-cli xdcr-setup \
  --cluster cb-us-east.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name eu-west-cluster \
  --xdcr-hostname cb-eu-west.example.com:8091 \
  --xdcr-username Administrator \
  --xdcr-password password \
  --xdcr-demand-encryption 1 \
  --xdcr-encryption-type full \
  --xdcr-certificate /path/to/eu-west-ca.pem

# Step 2: Create replication from US-EAST to EU-WEST for the 'app' bucket
/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster cb-us-east.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name eu-west-cluster \
  --xdcr-from-bucket app \
  --xdcr-to-bucket app \
  --xdcr-replication-mode xmem \
  --enable-compression 1 \
  --filter-expression "" \
  --priority high \
  --network-usage-limit 0

# Step 3: Create the reverse replication on EU-WEST cluster (bidirectional)
/opt/couchbase/bin/couchbase-cli xdcr-setup \
  --cluster cb-eu-west.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name us-east-cluster \
  --xdcr-hostname cb-us-east.example.com:8091 \
  --xdcr-username Administrator \
  --xdcr-password password \
  --xdcr-demand-encryption 1 \
  --xdcr-encryption-type full \
  --xdcr-certificate /path/to/us-east-ca.pem

/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster cb-eu-west.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name us-east-cluster \
  --xdcr-from-bucket app \
  --xdcr-to-bucket app \
  --xdcr-replication-mode xmem \
  --enable-compression 1

กลยุทธ์การแก้ไขข้อขัดแย้ง

ใน XDCR แบบสองทิศทาง สามารถแก้ไขเอกสารเดียวกันพร้อมกันบนคลัสเตอร์ที่แตกต่างกัน ทำให้เกิดข้อขัดแย้ง Couchbase มีกลยุทธ์การแก้ไขข้อขัดแย้งหลายประการ:

  • อิงตามการประทับเวลา (LWW — การเขียนชนะครั้งล่าสุด)— การเปลี่ยนแปลงที่มีการประทับเวลาล่าสุดชนะ นี่เป็นค่าเริ่มต้นและทำงานได้ดีกับกรณีการใช้งานส่วนใหญ่ จำเป็นต้องมีการซิงโครไนซ์ NTP ในทุกคลัสเตอร์ (เอียงภายใน 5 วินาที) ตั้งค่าไว้ที่เวลาสร้างที่เก็บข้อมูลและไม่สามารถเปลี่ยนแปลงได้ในภายหลัง
  • อิงตามหมายเลขลำดับ— ใช้หมายเลขลำดับภายใน (ID การแก้ไข) เพื่อระบุผู้ชนะ การกลายพันธุ์ที่มีจำนวนการแก้ไขสูงกว่าจะชนะ มีประโยชน์เมื่อการซิงโครไนซ์การประทับเวลาไม่น่าเชื่อถือ
  • Custom Conflict Resolution (Enterprise)— Couchbase Enterprise Edition รองรับฟังก์ชันผสานแบบกำหนดเองที่รัน JavaScript ฝั่งเซิร์ฟเวอร์เพื่อแก้ไขข้อขัดแย้งด้วยตรรกะเฉพาะแอปพลิเคชัน ซึ่งเปิดใช้งานสถานการณ์ต่างๆ เช่น การรวมสินค้าในรถเข็นจากภูมิภาคต่างๆ หรือใช้กฎการแก้ไขข้อขัดแย้งเฉพาะโดเมน
# Create a bucket with timestamp-based conflict resolution
curl -X POST http://localhost:8091/pools/default/buckets \
  -u Administrator:password \
  -d name=app \
  -d ramQuota=4096 \
  -d replicaNumber=2 \
  -d bucketType=couchbase \
  -d conflictResolutionType=lww \
  -d compressionMode=active \
  -d durabilityMinLevel=majorityAndPersistActive

# XDCR advanced settings via REST API
curl -X POST http://localhost:8091/settings/replications/<replication-id> \
  -u Administrator:password \
  -d optimisticReplicationThreshold=256 \
  -d sourceNozzlePerNode=4 \
  -d targetNozzlePerNode=4 \
  -d checkpointInterval=600 \
  -d batchCount=500 \
  -d batchSize=2048 \
  -d failureRestartInterval=10 \
  -d docBatchSizeKb=2048 \
  -d networkUsageLimit=0 \
  -d priority=High

XDCR กรอง

XDCR รองรับการกรอง ดังนั้นคุณจึงสามารถจำลองเอกสารได้เพียงบางส่วนเท่านั้น ตัวกรองใช้นิพจน์ทั่วไปกับคีย์เอกสารและยังสามารถกรองตามการหมดอายุหรือการลบเอกสาร:

# Replicate only documents with keys starting with 'user::'
/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name remote-cluster \
  --xdcr-from-bucket app \
  --xdcr-to-bucket app-users \
  --filter-expression "^user::" \
  --filter-skip-restream 0

# Replicate documents matching a complex pattern
# (orders from 2026 with specific type)
--filter-expression "REGEXP_CONTAINS(META().id, '^order::2026') AND type='premium'"

Couchbase ตัวดำเนินการอัตโนมัติสำหรับ Kubernetes

Couchbase Autonomous Operator (CAO)คือตัวดำเนินการ Kubernetes ระดับองค์กรที่ทำให้การใช้งาน การจัดการ การปรับขนาด และการกู้คืนคลัสเตอร์เซิร์ฟเวอร์ Couchbase เป็นไปโดยอัตโนมัติ ต่างจากการใช้ StatefulSet แบบธรรมดาตรงที่ Autonomous Operator เข้าใจโทโพโลยีภายในของ Couchbase โดยจะจัดการการดำเนินการปรับสมดุล ประสานการอัพเกรดแบบกลิ้ง จัดการการรับรู้กลุ่มเซิร์ฟเวอร์ และผสานรวมกับการกำหนดเวลาดั้งเดิมของ Kubernetes เพื่อให้มั่นใจว่าพ็อด Couchbase จะวางตำแหน่งอย่างเหมาะสมที่สุด

Couchbase ตัวดำเนินการอัตโนมัติบน KubernetesCouchbase ตัวดำเนินการอัตโนมัตินาฬิกา CouchbaseCluster CRD | ปรับยอดCouchbaseคลัสเตอร์ CRDประกาศสถานะที่ต้องการTLS ความลับหมุนอัตโนมัติผ่านผู้จัดการใบรับรองกลุ่มเซิร์ฟเวอร์: โซน-a (แร็ค-1)StatefulSet: cb-prod-data-zacb-prod-0000ข้อมูล + ดัชนี4 CPU | 16GiPVC: 100Gi gp3cb-prod-0001แบบสอบถาม + ค้นหา4 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)คลัสเตอร์IP SvcAnti-Affinity: โหนดโซน A เท่านั้นกลุ่มเซิร์ฟเวอร์: โซน-b (แร็ค-2)StatefulSet: cb-prod-data-zbcb-prod-0002ข้อมูล + ดัชนี4 CPU | 16GiPVC: 100Gi gp3cb-prod-0003แบบสอบถาม + ค้นหา4 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)คลัสเตอร์ IP SvcAnti-Affinity: โหนดโซน b เท่านั้นกลุ่มเซิร์ฟเวอร์: โซน -c (แร็ค 3)StatefulSet: cb-prod-data-zccb-prod-0004ข้อมูล + การวิเคราะห์8 CPU | 32GiPVC: 200Gi gp3cb-prod-0005อีเวนติ้ง2 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)คลัสเตอร์ IP SvcAnti-Affinity: โหนดโซน c เท่านั้นบริการที่เปิดเผยNodePort 8091 | SDK 11210 | N1QL 8093ตัวควบคุมการรับเข้าตรวจสอบ CRD | เว็บฮุค TLSตัวควบคุมการสำรองข้อมูลcbbackupmgr | S3/GCS/Azureโอเปอเรเตอร์ข้อมูล/ดัชนี/แบบสอบถามการวิเคราะห์/เหตุการณ์PVC อุปกรณ์จัดเก็บข้อมูลการตั้งเวลาพ็อดความปลอดภัย/การตรวจสอบ

Couchbaseคลัสเตอร์ CRD ข้อมูลจำเพาะ

CouchbaseCluster CRD เป็นการกำหนดค่าส่วนกลางที่ประกาศสถานะที่ต้องการของการปรับใช้ Couchbase ของคุณ ตัวดำเนินการอัตโนมัติจะกระทบยอดสิ่งนี้กับทรัพยากร StatefulSets, Services, PVCs, Secrets และ RBAC ด้านล่างนี้คือ CRD ที่พร้อมสำหรับการผลิต:

apiVersion: couchbase.com/v2
kind: CouchbaseCluster
metadata:
  name: cb-production
  namespace: couchbase
spec:
  image: couchbase/server:7.6.1-enterprise
  antiAffinity: true
  platform: aws
  cluster:
    autoFailoverTimeout: 30s
    autoFailoverMaxCount: 3
    autoFailoverOnDataDiskIssues: true
    autoFailoverOnDataDiskIssuesTimePeriod: 120s
    autoFailoverServerGroup: true
    clusterName: cb-production
    dataServiceMemoryQuota: 8Gi
    indexServiceMemoryQuota: 4Gi
    searchServiceMemoryQuota: 2Gi
    analyticsServiceMemoryQuota: 4Gi
    eventingServiceMemoryQuota: 2Gi
    indexStorageSetting: memory_optimized
    autoCompaction:
      databaseFragmentationThreshold:
        percent: 30
        size: 1Gi
      viewFragmentationThreshold:
        percent: 30
        size: 1Gi
      parallelCompaction: false
      timeWindow:
        start: "02:00"
        end: "06:00"
        abortCompactionOutsideWindow: true
  security:
    adminSecret: cb-admin-credentials
    rbac:
      managed: true
      selector:
        matchLabels:
          cluster: cb-production
    ldap:
      hosts:
      - ldap.example.com
      port: 636
      encryption: TLS
  networking:
    tls:
      static:
        serverSecret: couchbase-server-tls
        operatorSecret: couchbase-operator-tls
    exposeAdminConsole: true
    adminConsoleServices:
    - data
    adminConsoleServiceType: NodePort
    exposedFeatures:
    - client
    - xdcr
    exposedFeatureServiceType: NodePort
  buckets:
    managed: true
    selector:
      matchLabels:
        cluster: cb-production
  servers:
  - name: data-zone-a
    size: 2
    services:
    - data
    - index
    serverGroups:
    - zone-a
    pod:
      metadata:
        labels:
          couchbase-service: data-index
        annotations:
          prometheus.io/scrape: "true"
          prometheus.io/port: "9091"
      spec:
        nodeSelector:
          topology.kubernetes.io/zone: us-east-1a
        tolerations:
        - key: couchbase
          operator: Equal
          value: "true"
          effect: NoSchedule
        resources:
          requests:
            cpu: "4"
            memory: 16Gi
          limits:
            cpu: "8"
            memory: 20Gi
    volumeMounts:
      default: couchbase-data
      data: couchbase-data
      index: couchbase-index
  - name: data-zone-b
    size: 2
    services:
    - data
    - index
    serverGroups:
    - zone-b
    pod:
      spec:
        nodeSelector:
          topology.kubernetes.io/zone: us-east-1b
        tolerations:
        - key: couchbase
          operator: Equal
          value: "true"
          effect: NoSchedule
        resources:
          requests:
            cpu: "4"
            memory: 16Gi
          limits:
            cpu: "8"
            memory: 20Gi
    volumeMounts:
      default: couchbase-data
      data: couchbase-data
      index: couchbase-index
  - name: query-search
    size: 2
    services:
    - query
    - search
    serverGroups:
    - zone-a
    - zone-b
    pod:
      spec:
        resources:
          requests:
            cpu: "4"
            memory: 8Gi
          limits:
            cpu: "8"
            memory: 12Gi
    volumeMounts:
      default: couchbase-default
  - name: analytics-eventing
    size: 2
    services:
    - analytics
    - eventing
    serverGroups:
    - zone-c
    pod:
      spec:
        nodeSelector:
          topology.kubernetes.io/zone: us-east-1c
        resources:
          requests:
            cpu: "8"
            memory: 32Gi
          limits:
            cpu: "16"
            memory: 40Gi
    volumeMounts:
      default: couchbase-analytics
      analytics:
      - couchbase-analytics
  serverGroups:
  - zone-a
  - zone-b
  - zone-c
  volumeClaimTemplates:
  - metadata:
      name: couchbase-data
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 100Gi
  - metadata:
      name: couchbase-index
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 50Gi
  - metadata:
      name: couchbase-default
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 20Gi
  - metadata:
      name: couchbase-analytics
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 200Gi
การติดตั้งตัวดำเนินการ

ผ่าน Helm

# Add Couchbase Helm repository
helm repo add couchbase https://couchbase-partners.github.io/helm-charts/
helm repo update

# Install the Couchbase Autonomous Operator
helm install couchbase-operator couchbase/couchbase-operator \
  --namespace couchbase \
  --create-namespace \
  --set operator.image.repository=couchbase/operator \
  --set operator.image.tag=2.7.1 \
  --set admissionController.enabled=true

# Create the admin credentials secret
kubectl create secret generic cb-admin-credentials \
  --namespace couchbase \
  --from-literal=username=Administrator \
  --from-literal=password=$(openssl rand -base64 24)

# Deploy the CouchbaseCluster CRD
kubectl apply -f couchbase-cluster.yaml

# Verify deployment
kubectl get couchbaseclusters -n couchbase
kubectl get pods -n couchbase -l app=couchbase
kubectl get svc -n couchbase
กลุ่มเซิร์ฟเวอร์

และการรับรู้แร็ค/โซน

กลุ่มเซิร์ฟเวอร์

เป็นกลไกของ Couchbase ในการรับรองว่า vBuckets ที่ใช้งานอยู่และเรพลิกาจะอยู่ในโดเมนความล้มเหลวที่แตกต่างกัน (โซนความพร้อมใช้งาน ชั้นวาง หรือศูนย์ข้อมูล) เมื่อมีการกำหนดค่ากลุ่มเซิร์ฟเวอร์ Couchbase รับประกันว่าไม่มีคู่ที่ใช้งานอยู่และคู่จำลองสำหรับ vBucket เดียวกันอยู่ในกลุ่มเซิร์ฟเวอร์เดียวกัน ซึ่งหมายความว่าความล้มเหลวของโซนโดยสมบูรณ์จะไม่ส่งผลให้ข้อมูลสูญหาย

ตัวดำเนินการอัตโนมัติจะแมปกลุ่มเซิร์ฟเวอร์กับป้ายกำกับโทโพโลยีโหนด Kubernetes โดยจะกำหนดเวลาพ็อดในโซนที่ถูกต้องโดยอัตโนมัติ เมื่อใช้ร่วมกับกฎการต่อต้านความสัมพันธ์ของพ็อด ช่วยให้มั่นใจได้ว่าพ็อด Couchbase จะถูกกระจายไปทั่วโครงสร้างพื้นฐานทางกายภาพเพื่อความยืดหยุ่นสูงสุด

AWS EKS การใช้งาน

Amazon EKS ต้องการการกำหนดค่าเฉพาะเพื่อประสิทธิภาพ Couchbase ที่เหมาะสมที่สุด ข้อควรพิจารณาที่สำคัญคือพื้นที่จัดเก็บข้อมูล (EBS gp3 สำหรับปริมาณการประมวลผล) ประเภทอินสแตนซ์ (r6i/r7i ที่ปรับให้เหมาะสมหน่วยความจำสำหรับโหนดข้อมูล) และการสร้างเครือข่าย (VPC CNI สำหรับการสร้างเครือข่ายระดับพ็อด)

# EBS gp3 StorageClass optimized for Couchbase
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-gp3-couchbase
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  iops: "6000"
  throughput: "500"
  encrypted: "true"
  kmsKeyId: "arn:aws:kms:us-east-1:123456789:key/mrk-abcdef"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# Recommended EKS node groups for Couchbase
# Data nodes:     r6i.2xlarge (8 vCPU, 64 GiB) or r7i.2xlarge
# Index/Query:    m6i.2xlarge (8 vCPU, 32 GiB)
# Analytics:      r6i.4xlarge (16 vCPU, 128 GiB)
# Eventing:       m6i.xlarge  (4 vCPU, 16 GiB)

# EKS managed node group with taints for Couchbase
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: couchbase-eks
  region: us-east-1
managedNodeGroups:
- name: cb-data
  instanceType: r6i.2xlarge
  desiredCapacity: 4
  minSize: 4
  maxSize: 8
  volumeSize: 200
  volumeType: gp3
  volumeIOPS: 6000
  volumeThroughput: 500
  availabilityZones: ["us-east-1a", "us-east-1b"]
  labels:
    workload: couchbase-data
  taints:
  - key: couchbase
    value: "true"
    effect: NoSchedule
  iam:
    attachPolicyARNs:
    - arn:aws:iam::policy/AmazonEBSCSIDriverPolicy
- name: cb-query
  instanceType: m6i.2xlarge
  desiredCapacity: 2
  minSize: 2
  maxSize: 4
  availabilityZones: ["us-east-1a", "us-east-1b"]
  labels:
    workload: couchbase-query

Azure AKS การปรับใช้

Azure AKS ใช้ Premium SSD v2 หรือ Ultra Disk สำหรับความต้องการ I/O ของ Couchbase และ Azure Private Link สำหรับการเชื่อมต่อ XDCR ที่ปลอดภัยระหว่างภูมิภาค

# Azure Premium SSD v2 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azure-premium-couchbase
provisioner: disk.csi.azure.com
parameters:
  skuName: PremiumV2_LRS
  DiskIOPSReadWrite: "6000"
  DiskMBpsReadWrite: "500"
  cachingMode: None
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# Ultra Disk StorageClass for high-performance workloads
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azure-ultra-couchbase
provisioner: disk.csi.azure.com
parameters:
  skuName: UltraSSD_LRS
  DiskIOPSReadWrite: "10000"
  DiskMBpsReadWrite: "1000"
  cachingMode: None
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# AKS recommended VM sizes:
# Data nodes:      Standard_E8s_v5  (8 vCPU, 64 GiB)
# Index/Query:     Standard_D8s_v5  (8 vCPU, 32 GiB)
# Analytics:       Standard_E16s_v5 (16 vCPU, 128 GiB)

GCP GKE การปรับใช้

Google Kubernetes Engine ใช้ดิสก์ถาวร SSD และ Workload Identity เพื่อการเข้าถึง Google Cloud Storage อย่างปลอดภัยสำหรับการสำรองข้อมูล

# GKE SSD Persistent Disk StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd-couchbase
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
  provisioned-iops-on-create: "6000"
  provisioned-throughput-on-create: "500"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# GKE Hyperdisk Balanced for cost-effective performance
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: hyperdisk-couchbase
provisioner: pd.csi.storage.gke.io
parameters:
  type: hyperdisk-balanced
  provisioned-iops-on-create: "6000"
  provisioned-throughput-on-create: "500"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# GKE recommended machine types:
# Data nodes:      n2-highmem-8   (8 vCPU, 64 GB)
# Index/Query:     n2-standard-8  (8 vCPU, 32 GB)
# Analytics:       n2-highmem-16  (16 vCPU, 128 GB)

โลหะเปลือย k3s/Rancher พร้อม Longhorn

สำหรับองค์กรที่ต้องการการควบคุมโครงสร้างพื้นฐานเต็มรูปแบบโดยไม่ต้องล็อคอินผู้จำหน่ายระบบคลาวด์ Bare Metal k3s พร้อมการจัดการ Rancher และพื้นที่จัดเก็บแบบกระจาย Longhorn มอบรากฐานที่ยอดเยี่ยมสำหรับ Couchbase HA สถาปัตยกรรมนี้ได้รับความนิยมในอุตสาหกรรมที่มีการควบคุม สถานการณ์การประมวลผลแบบ Edge และสภาพแวดล้อมที่คำนึงถึงต้นทุน

k3s / Rancher Bare Metal Couchbase การใช้งานคอนโซลการจัดการ Rancherโหนด 1: เซิร์ฟเวอร์ k3s (แร็ค-1)Couchbase ข้อมูล + ดัชนีcb-prod-0000 | 8 CPU, 64GBvBuckets 0-341 ใช้งาน | พอร์ต SDK 11210Couchbase แบบสอบถาม (N1QL)cb-prod-0001 | พอร์ต 8093MetalLB VIPPrometheusลองฮอร์น โวลุ่ม/dev/sdb NVMe | 3 เรพลิกาข้ามโหนดการต่อต้านความสัมพันธ์: ไม่มีพ็อด Couchbase ที่จัดตำแหน่งโหนด 2: เซิร์ฟเวอร์ k3s (แร็ค-2)Couchbase ข้อมูล + ดัชนีcb-prod-0002 | 8 CPU, 64GBvBuckets 342-682 ใช้งาน | พอร์ต SDK 11210Couchbase ค้นหา (FTS)cb-prod-0003 | พอร์ต 8094MetalLB VIPGrafanaวอลลุ่มเสียงยาว/dev/sdb NVMe | 3 เรพลิกาข้ามโหนดการต่อต้านความสัมพันธ์: ไม่มีพ็อด Couchbase ที่จัดตำแหน่งโหนด 3: เอเจนต์ k3s (แร็ค-3)Couchbase ข้อมูล + การวิเคราะห์cb-prod-0004 | 16 CPU, 128GBvBuckets 683-1023 ใช้งาน | ซีบีเอเอสCouchbase อีเวนติ้งcb-prod-0005 | DCP คอนซูเมอร์MetalLB VIPCAO โอเปอเรเตอร์ลองฮอร์น โวลุ่ม/dev/sdb NVMe | 3 เรพลิกาข้ามโหนดการต่อต้านความสัมพันธ์: ไม่มีพ็อด Couchbase ที่จัดตำแหน่งMetalLB LoadBalancerวีไอพี: 192.168.1.200-210 | SDK + เว็บคอนโซล + XDCRการสำรองข้อมูล: cbbackupmgr → MinIO S3รายวันเต็ม + เพิ่มรายชั่วโมง | MiniIO บน NVMeโดยเฉพาะข้อมูล/ดัชนีแบบสอบถาม/ค้นหาการวิเคราะห์/อีเวนติ้ง/MetalLBลองฮอร์นการจำลองแบบ DCPการจัดการฟาร์มปศุสัตว์
# k3s bare metal setup for Couchbase

# Install k3s on master nodes (HA with embedded etcd)
curl -sfL https://get.k3s.io | sh -s - server \
  --cluster-init \
  --disable traefik \
  --disable servicelb \
  --write-kubeconfig-mode 644 \
  --node-taint couchbase=true:NoSchedule \
  --node-label topology.kubernetes.io/zone=rack-1

# Join additional server nodes
curl -sfL https://get.k3s.io | sh -s - server \
  --server https://master-1:6443 \
  --token $(cat /var/lib/rancher/k3s/server/node-token) \
  --node-taint couchbase=true:NoSchedule \
  --node-label topology.kubernetes.io/zone=rack-2

# Join agent nodes
curl -sfL https://get.k3s.io | sh -s - agent \
  --server https://master-1:6443 \
  --token $(cat /var/lib/rancher/k3s/server/node-token) \
  --node-taint couchbase=true:NoSchedule \
  --node-label topology.kubernetes.io/zone=rack-3

# Install Longhorn for distributed storage
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --create-namespace \
  --set defaultSettings.defaultReplicaCount=3 \
  --set defaultSettings.defaultDataPath=/mnt/longhorn \
  --set defaultSettings.guaranteedInstanceManagerCPU=12

# Create Longhorn StorageClass for Couchbase
kubectl apply -f - <

สำรองและกู้คืนด้วย cbbackupmgr

Couchbase มีcbbackupmgrซึ่งเป็นเครื่องมือสำรองข้อมูลระดับองค์กรที่รองรับการสำรองข้อมูลแบบเต็ม ส่วนเพิ่ม และส่วนต่างด้วยการบีบอัดและการเข้ารหัสเพิ่มเติม สำหรับการปรับใช้ HA ที่ใช้งานจริง กลยุทธ์การสำรองข้อมูลที่แข็งแกร่งจะรวมการสำรองข้อมูลระดับ Couchbase เข้ากับความสามารถของสแน็ปช็อตบนคลาวด์

การกำหนดค่าการสำรองข้อมูล

# Initialize a backup repository
/opt/couchbase/bin/cbbackupmgr config \
  --archive /backup/couchbase \
  --repo production-backup \
  --include-data production-data \
  --include-data user-profiles \
  --exclude-data _system

# Run a full backup
/opt/couchbase/bin/cbbackupmgr backup \
  --archive /backup/couchbase \
  --repo production-backup \
  --cluster couchbase://localhost \
  --username Administrator \
  --password "$CB_PASSWORD" \
  --threads 4 \
  --no-progress-bar

# Run an incremental backup (only mutations since last backup)
/opt/couchbase/bin/cbbackupmgr backup \
  --archive /backup/couchbase \
  --repo production-backup \
  --cluster couchbase://localhost \
  --username Administrator \
  --password "$CB_PASSWORD" \
  --threads 4

# List available backups
/opt/couchbase/bin/cbbackupmgr list \
  --archive /backup/couchbase \
  --repo production-backup

# Restore from a specific backup
/opt/couchbase/bin/cbbackupmgr restore \
  --archive /backup/couchbase \
  --repo production-backup \
  --cluster couchbase://target-cluster:8091 \
  --username Administrator \
  --password "$CB_PASSWORD" \
  --start 2026-04-12T00_00_00 \
  --end 2026-04-12T14_30_00 \
  --threads 4

สคริปต์สำรองข้อมูลอัตโนมัติสำหรับ Kubernetes

#!/bin/bash
# couchbase-backup.sh — Automated backup to S3-compatible storage

set -euo pipefail

CLUSTER_HOST="cb-production-srv.couchbase.svc.cluster.local"
BACKUP_DIR="/backup/couchbase"
REPO_NAME="prod-$(date +%Y%m%d)"
S3_BUCKET="s3://couchbase-backups/production"
RETENTION_DAYS=14

log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*"; }

log "Starting Couchbase backup for cluster: $CLUSTER_HOST"

if [ ! -d "$BACKUP_DIR/$REPO_NAME" ]; then
  log "Configuring new backup repository: $REPO_NAME"
  cbbackupmgr config \
    --archive "$BACKUP_DIR" \
    --repo "$REPO_NAME" \
    --include-data production-data \
    --include-data user-profiles
fi

log "Running incremental backup..."
cbbackupmgr backup \
  --archive "$BACKUP_DIR" \
  --repo "$REPO_NAME" \
  --cluster "couchbase://$CLUSTER_HOST" \
  --username "$CB_USERNAME" \
  --password "$CB_PASSWORD" \
  --threads 4 \
  --no-progress-bar

BACKUP_SIZE=$(du -sh "$BACKUP_DIR/$REPO_NAME" | cut -f1)
log "Backup complete. Size: $BACKUP_SIZE"

log "Syncing to S3: $S3_BUCKET/$REPO_NAME"
aws s3 sync "$BACKUP_DIR/$REPO_NAME" "$S3_BUCKET/$REPO_NAME" \
  --storage-class STANDARD_IA \
  --sse aws:kms

log "Cleaning up backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -maxdepth 1 -name "prod-*" -mtime +"$RETENTION_DAYS" -exec rm -rf {} \;

log "Backup pipeline complete."

CouchbaseBackup CRD (จัดการโดยผู้ดำเนินการ)

ผู้ดำเนินการอัตโนมัติมอบ CRDs สำหรับการจัดการการสำรองข้อมูลอัตโนมัติ:

apiVersion: couchbase.com/v2
kind: CouchbaseBackup
metadata:
  name: cb-daily-backup
  namespace: couchbase
spec:
  strategy: full_incremental
  full:
    schedule: "0 2 * * 0"   # Full backup every Sunday at 2 AM
  incremental:
    schedule: "0 2 * * 1-6" # Incremental Mon-Sat at 2 AM
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 3
  backOffLimit: 3
  logRetention: 168h
  size: 100Gi
  s3bucket: s3://couchbase-backups/production
---
apiVersion: couchbase.com/v2
kind: CouchbaseBackupRestore
metadata:
  name: cb-restore-pitr
  namespace: couchbase
spec:
  backup: cb-daily-backup
  repo: "20260412"
  start:
    int: 1
  end:
    int: 5
  backOffLimit: 3

N1QL การปรับแต่งประสิทธิภาพการค้นหา

N1QL (SQL++ สำหรับ JSON) เป็นภาษาคิวรีของ Couchbase การปรับแต่งประสิทธิภาพ N1QL จำเป็นต้องทำความเข้าใจกับเครื่องมือวางแผนคิวรี การออกแบบดัชนี และการเพิ่มประสิทธิภาพฝั่งเซิร์ฟเวอร์

กลยุทธ์ดัชนี

: GSI และ FTS

-- Global Secondary Index (GSI) for common query patterns

-- Composite index for user lookups
CREATE INDEX idx_users_email_status
  ON `user-profiles`(email, status)
  WHERE type = 'user'
  WITH {"num_replica": 1, "defer_build": false};

-- Covering index (includes all queried fields to avoid fetch)
CREATE INDEX idx_orders_covering
  ON `production-data`(customer_id, order_date, total_amount, status)
  WHERE type = 'order'
  WITH {"num_replica": 1};

-- Array index for nested documents
CREATE INDEX idx_order_items
  ON `production-data`(DISTINCT ARRAY item.product_id FOR item IN items END)
  WHERE type = 'order'
  WITH {"num_replica": 1};

-- Partial index for active records only
CREATE INDEX idx_active_sessions
  ON `production-data`(user_id, created_at)
  WHERE type = 'session' AND status = 'active'
  WITH {"num_replica": 1};

-- Adaptive index for dynamic query patterns
CREATE INDEX idx_adaptive_products
  ON `production-data`(DISTINCT PAIRS(self))
  WHERE type = 'product'
  WITH {"num_replica": 1};

-- Check index status
SELECT name, state, num_docs_indexed, num_docs_pending
FROM system:indexes
WHERE keyspace_id = 'production-data';

-- Analyze query execution plan
EXPLAIN SELECT u.name, u.email, COUNT(o.id) AS order_count
FROM `user-profiles` u
JOIN `production-data` o ON o.customer_id = u.id
WHERE u.status = 'active' AND o.type = 'order'
GROUP BY u.name, u.email
ORDER BY order_count DESC
LIMIT 100;

-- Use ADVISE to get index recommendations
ADVISE SELECT * FROM `production-data`
WHERE type = 'order'
  AND customer_id = 'cust-12345'
  AND order_date BETWEEN '2026-01-01' AND '2026-04-12'
ORDER BY order_date DESC;
เคล็ดลับการเพิ่มประสิทธิภาพการค้นหา

-- Use PREPARE for frequently executed queries (cached plan)
PREPARE get_user_orders AS
SELECT o.id, o.order_date, o.total_amount, o.status
FROM `production-data` o
WHERE o.type = 'order'
  AND o.customer_id = $customer_id
ORDER BY o.order_date DESC
LIMIT $page_size OFFSET $page_offset;

-- Execute prepared statement
EXECUTE get_user_orders
USING {"customer_id": "cust-12345", "page_size": 20, "page_offset": 0};

-- Use META().id for direct key-value lookups (fastest path)
SELECT META().id, *
FROM `production-data`
USE KEYS ["order::2026-001", "order::2026-002", "order::2026-003"];

-- Correlated subquery with USE KEYS for joins
SELECT u.name,
  (SELECT o.id, o.total_amount
   FROM `production-data` o
   USE KEYS u.order_ids
   WHERE o.status = 'completed') AS completed_orders
FROM `user-profiles` u
WHERE META(u).id = 'user::12345';

-- Use INFER to understand document schema
INFER `production-data` WITH {"sample_size": 10000, "similarity_metric": 0.6};
การจัดการหน่วยความจำ

และการกำหนดค่าบัคเก็ต

สถาปัตยกรรมที่เน้นหน่วยความจำเป็นหลักของ

Couchbase หมายความว่าการจัดสรร RAM ส่งผลโดยตรงต่อประสิทธิภาพ แต่ละบริการมีโควต้าหน่วยความจำของตัวเอง และที่เก็บข้อมูลจะแชร์โควต้าบริการข้อมูล การกำหนดขนาดที่เหมาะสมจะป้องกันการขับไล่แคชที่ลดเวลาแฝง

# Configure cluster-level memory quotas
/opt/couchbase/bin/couchbase-cli setting-cluster \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --cluster-ramsize 8192 \
  --cluster-index-ramsize 4096 \
  --cluster-fts-ramsize 2048 \
  --cluster-eventing-ramsize 2048 \
  --cluster-analytics-ramsize 4096

# Memory allocation guidelines:
# Data Service:      60% of available node RAM
# Index Service:     20% of available node RAM
# Search Service:    10% of available node RAM
# OS/overhead:       10% reserved

# Bucket memory sizing formula:
# Required RAM = (avg_doc_size * num_docs * 2.5) / num_data_nodes
# The 2.5 multiplier accounts for:
#   - Metadata overhead (~56 bytes per document)
#   - Internal fragmentation
#   - Replica copies in memory

# Create an optimized production bucket
curl -X POST http://localhost:8091/pools/default/buckets \
  -u Administrator:password \
  -d name=production-data \
  -d ramQuota=4096 \
  -d bucketType=couchbase \
  -d replicaNumber=2 \
  -d threadsNumber=8 \
  -d evictionPolicy=valueOnly \
  -d compressionMode=active \
  -d maxTTL=0 \
  -d conflictResolutionType=lww \
  -d flushEnabled=0 \
  -d durabilityMinLevel=majorityAndPersistActive

# Eviction policies:
# valueOnly  - Evicts document values but keeps metadata in RAM
#              Best for workloads where key access patterns are predictable
# fullEviction - Evicts both values and metadata
#                Best for very large datasets that exceed available RAM
# noEviction - (Ephemeral buckets only) Rejects writes when RAM is full
#              Best for caching use cases
การเข้ารหัส

TLS และ RBAC

การรักษาความปลอดภัย Couchbase ในการใช้งานจริงจำเป็นต้องมีการเข้ารหัสข้อมูลระหว่างทาง (TLS) การควบคุมการเข้าถึงตามบทบาทที่ละเอียด (RBAC) และการบันทึกการตรวจสอบ

# Enable TLS for all Couchbase services
/opt/couchbase/bin/couchbase-cli ssl-manage \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set-node-certificate

# Enforce minimum TLS version
/opt/couchbase/bin/couchbase-cli setting-security \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --tls-min-version tlsv1.2 \
  --tls-honor-cipher-order 1 \
  --hsts-max-age 31536000 \
  --hsts-preload-enabled 1

# Create application-specific RBAC users
/opt/couchbase/bin/couchbase-cli user-manage \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --rbac-username app-service \
  --rbac-password "$(openssl rand -base64 32)" \
  --rbac-name "Application Service Account" \
  --roles 'data_reader[production-data],data_writer[production-data],query_select[production-data],query_insert[production-data],query_update[production-data],query_delete[production-data]' \
  --auth-domain local

# Create a read-only analytics user
/opt/couchbase/bin/couchbase-cli user-manage \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --rbac-username analytics-reader \
  --rbac-password "$(openssl rand -base64 32)" \
  --roles 'data_reader[production-data],query_select[production-data],analytics_reader[production-data]' \
  --auth-domain local

# Enable audit logging
/opt/couchbase/bin/couchbase-cli setting-audit \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --audit-enabled 1 \
  --audit-log-path /opt/couchbase/var/lib/couchbase/logs \
  --audit-log-rotate-interval 86400 \
  --audit-log-rotate-size 20971520

Kubernetes TLS พร้อมผู้จัดการใบรับรอง

# Certificate for Couchbase server TLS
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: couchbase-server-tls
  namespace: couchbase
spec:
  secretName: couchbase-server-tls
  duration: 8760h   # 1 year
  renewBefore: 720h  # 30 days before expiry
  privateKey:
    algorithm: RSA
    size: 4096
  usages:
  - server auth
  - client auth
  dnsNames:
  - "*.cb-production.couchbase.svc.cluster.local"
  - "*.cb-production.couchbase.svc"
  - "cb-production-srv.couchbase.svc.cluster.local"
  - "localhost"
  issuerRef:
    name: couchbase-ca-issuer
    kind: ClusterIssuer
การตรวจสอบ

ด้วย Prometheus ผู้ส่งออก

Couchbase เปิดเผยตัววัดที่สมบูรณ์ผ่าน REST APIcouchbase-exporterแปลสิ่งเหล่านี้เป็นรูปแบบ Prometheus เพื่อการตรวจสอบที่ครอบคลุม

# Deploy Couchbase Prometheus Exporter
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchbase-exporter
  namespace: couchbase
spec:
  replicas: 1
  selector:
    matchLabels:
      app: couchbase-exporter
  template:
    metadata:
      labels:
        app: couchbase-exporter
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9091"
    spec:
      containers:
      - name: exporter
        image: couchbase/exporter:1.0.9
        args:
        - --couchbase-address=cb-production-srv.couchbase.svc.cluster.local
        - --couchbase-port=8091
        - --couchbase-username=$(CB_USERNAME)
        - --couchbase-password=$(CB_PASSWORD)
        - --server-address=0.0.0.0:9091
        - --per-node-refresh=5
        env:
        - name: CB_USERNAME
          valueFrom:
            secretKeyRef:
              name: cb-admin-credentials
              key: username
        - name: CB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: cb-admin-credentials
              key: password
        ports:
        - containerPort: 9091
          name: metrics
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 256Mi
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: couchbase-monitor
  namespace: couchbase
spec:
  selector:
    matchLabels:
      app: couchbase-exporter
  endpoints:
  - port: metrics
    interval: 15s
    path: /metrics

คีย์เมตริก Couchbase เพื่อตรวจสอบ

  • cb_bucket_ops_per_sec— การดำเนินการทั้งหมดต่อวินาทีต่อบัคเก็ต กำหนดพื้นฐานปริมาณงานตามปกติและการแจ้งเตือนเกี่ยวกับความผิดปกติ
  • cb_bucket_mem_used_bytes— การใช้งานหน่วยความจำบัคเก็ต แจ้งเตือนเมื่อใกล้ถึงโควต้า RAM เพื่อป้องกันการถูกขับไล่
  • cb_bucket_cache_miss_ratio— อัตราส่วนของคำขอที่พลาดแคชและจำเป็นต้องดึงข้อมูลดิสก์ ควรอยู่ต่ำกว่า 2% เพื่อประสิทธิภาพสูงสุด
  • cb_bucket_disk_queue_items— ความลึกของคิวการเขียนดิสก์ คิวที่เพิ่มขึ้นบ่งชี้ว่า I/O ของดิสก์ไม่สามารถตามทรูพุตการเขียนได้
  • cb_xdcr_changes_left— จำนวนการกลายพันธุ์ที่รอการจำลอง XDCR บ่งชี้ถึงความล่าช้าในการจำลองแบบข้ามภูมิภาค
  • cb_xdcr_docs_write— เอกสารที่จำลองต่อวินาทีผ่าน XDCR
  • cb_node_cpu_utilization_percent— การใช้งาน CPU ต่อโหนด Couchbase มีความเข้มข้น CPU สำหรับการบดอัดและการจัดทำดัชนี
  • cb_bucket_vbucket_active_num— จำนวน vBuckets ที่ใช้งานอยู่ต่อโหนด ควรจะเท่ากันทั่วทั้งโหนดข้อมูล
  • cb_index_num_docs_pending— เอกสารที่รอการอัปเดตดัชนี บ่งชี้ถึงความล่าช้าในการสร้างดัชนี
  • cb_n1ql_requests_per_sec— ปริมาณงานการสืบค้น N1QL เมื่อรวมกับเวลาแฝงโดยเฉลี่ย จะระบุปัญหาด้านประสิทธิภาพของคิวรี

Prometheus กฎการแจ้งเตือน

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: couchbase-alerts
  namespace: couchbase
spec:
  groups:
  - name: couchbase.rules
    rules:
    - alert: CouchbaseNodeDown
      expr: cb_node_healthy == 0
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "Couchbase node {{ $labels.node }} is unhealthy"
    - alert: CouchbaseHighCacheMissRate
      expr: cb_bucket_cache_miss_ratio > 0.05
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Cache miss rate {{ $value | humanizePercentage }} on bucket {{ $labels.bucket }}"
    - alert: CouchbaseXDCRLag
      expr: cb_xdcr_changes_left > 10000
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: "XDCR replication lag: {{ $value }} pending mutations"
    - alert: CouchbaseDiskQueueGrowing
      expr: rate(cb_bucket_disk_queue_items[5m]) > 100
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: "Disk queue growing on bucket {{ $labels.bucket }}"
    - alert: CouchbaseMemoryPressure
      expr: cb_bucket_mem_used_bytes / cb_bucket_mem_quota_bytes > 0.9
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "Memory usage at {{ $value | humanizePercentage }} for bucket {{ $labels.bucket }}"
การกำหนดค่าสตริงการเชื่อมต่อ

SDK สำหรับ HA

Couchbase SDK ตระหนักถึงโทโพโลยี โดยจะรักษาแผนผังคลัสเตอร์ภายในและกำหนดเส้นทางการดำเนินการไปยังโหนดที่ถูกต้องโดยตรง การกำหนดค่า SDK ที่เหมาะสมเป็นสิ่งสำคัญสำหรับ HA ช่วยให้มั่นใจได้ว่าการตรวจจับข้อผิดพลาดที่รวดเร็วและการลองใหม่โดยอัตโนมัติเมื่อเกิดข้อผิดพลาดชั่วคราว

// Node.js SDK configuration for HA
const couchbase = require('couchbase');

const clusterConnStr = 'couchbases://cb-node1.example.com,cb-node2.example.com,cb-node3.example.com';

const cluster = await couchbase.connect(clusterConnStr, {
  username: process.env.CB_USERNAME,
  password: process.env.CB_PASSWORD,
  timeouts: {
    kvTimeout: 2500,           // Key-value operation timeout (ms)
    kvDurableTimeout: 10000,   // Durable write timeout
    queryTimeout: 75000,       // N1QL query timeout
    searchTimeout: 75000,      // FTS search timeout
    analyticsTimeout: 75000,   // Analytics query timeout
    connectTimeout: 10000,     // Initial connection timeout
    managementTimeout: 75000   // Management API timeout
  },
  security: {
    trustStorePath: '/etc/couchbase/ca.pem'
  },
  transactions: {
    durabilityLevel: couchbase.DurabilityLevel.MajorityAndPersistToActive,
    timeout: 15000
  }
});

const bucket = cluster.bucket('production-data');
const collection = bucket.defaultCollection();

// Durable write with observe-based durability
await collection.upsert('order::2026-001', orderDocument, {
  durabilityLevel: couchbase.DurabilityLevel.MajorityAndPersistToActive,
  timeout: 10000
});

// Read with replica fallback for HA
try {
  const result = await collection.get('user::12345');
} catch (err) {
  if (err instanceof couchbase.errors.TimeoutError) {
    const replicaResult = await collection.getAnyReplica('user::12345');
  }
}
# Java SDK configuration for HA
import com.couchbase.client.java.*;
import com.couchbase.client.java.env.*;
import java.time.Duration;

ClusterEnvironment env = ClusterEnvironment.builder()
    .timeoutConfig(TimeoutConfig.builder()
        .kvTimeout(Duration.ofMillis(2500))
        .kvDurableTimeout(Duration.ofSeconds(10))
        .queryTimeout(Duration.ofSeconds(75))
        .connectTimeout(Duration.ofSeconds(10))
        .build())
    .ioConfig(IoConfig.builder()
        .numKvConnections(4)
        .enableMutationTokens(true)
        .enableDnsSrv(true)
        .build())
    .securityConfig(SecurityConfig.builder()
        .enableTls(true)
        .trustCertificate(Paths.get("/etc/couchbase/ca.pem"))
        .build())
    .build();

Cluster cluster = Cluster.connect(
    "couchbases://cb-node1.example.com,cb-node2.example.com",
    ClusterOptions.clusterOptions("username", "password")
        .environment(env)
);

Kubernetes บริการ DNS สำหรับการเชื่อมต่อ SDK

# When using the Autonomous Operator, connect via the headless service:
# couchbase://cb-production-srv.couchbase.svc.cluster.local
#
# The operator creates these services:
# cb-production-srv      - Headless service for SDK auto-discovery
# cb-production-ui       - Web Console (port 8091/18091)
# cb-production-cloud    - External connectivity (NodePort/LoadBalancer)
#
# For external SDK access (outside Kubernetes), use:
# - NodePort with explicit node addresses
# - LoadBalancer with MetalLB (bare metal)
# - Ingress with TCP passthrough for port 11210 (SDK) and 11207 (SDK TLS)

Couchbase อุปกรณ์เคลื่อนที่และเกตเวย์การซิงค์สำหรับการปรับใช้ Edge

Couchbase Mobile ขยายระบบนิเวศ Couchbase ไปยังอุปกรณ์ Edge และแอปพลิเคชันมือถือCouchbase Liteทำงานแบบฝังบนอุปกรณ์ iOS, Android และ IoT ในขณะที่Sync Gatewayทำหน้าที่เป็นมิดเดิลแวร์การซิงโครไนซ์ระหว่าง Couchbase Lite และเซิร์ฟเวอร์ Couchbase

// Sync Gateway configuration for production
{
  "interface": ":4984",
  "adminInterface": "127.0.0.1:4985",
  "logging": {
    "console": {
      "log_level": "info",
      "log_keys": ["HTTP", "Sync", "Auth", "Changes"]
    }
  },
  "databases": {
    "mobile-app": {
      "server": "couchbases://cb-production-srv.couchbase.svc.cluster.local",
      "bucket": "production-data",
      "username": "sync-gateway",
      "password": "${SG_PASSWORD}",
      "enable_shared_bucket_access": true,
      "import_docs": true,
      "num_index_replicas": 1,
      "delta_sync": {
        "enabled": true,
        "rev_max_age_seconds": 86400
      },
      "cache": {
        "channel_cache": {
          "max_number": 50000,
          "compact_high_watermark_pct": 80,
          "compact_low_watermark_pct": 60
        },
        "rev_cache": {
          "size": 5000,
          "shard_count": 16
        }
      },
      "users": {
        "GUEST": {"disabled": true}
      },
      "sync": "function(doc, oldDoc) { if (doc.type === 'user-data') { channel(doc.channels); requireAccess(doc.channels); } else { channel('public'); } }"
    }
  }
}

# Deploy Sync Gateway on Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sync-gateway
  namespace: couchbase
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sync-gateway
  template:
    metadata:
      labels:
        app: sync-gateway
    spec:
      containers:
      - name: sync-gateway
        image: couchbase/sync-gateway:3.1.4-enterprise
        args: ["/etc/sync-gateway/config.json"]
        ports:
        - containerPort: 4984
          name: public
        - containerPort: 4985
          name: admin
        resources:
          requests:
            cpu: "2"
            memory: 4Gi
          limits:
            cpu: "4"
            memory: 8Gi
        volumeMounts:
        - name: config
          mountPath: /etc/sync-gateway
      volumes:
      - name: config
        configMap:
          name: sync-gateway-config

การวางแผนความจุและการกำหนดขนาด

การวางแผนความจุอย่างเหมาะสมถือเป็นสิ่งสำคัญสำหรับประสิทธิภาพ Couchbase และการปรับต้นทุนให้เหมาะสม ตารางต่อไปนี้มีหลักเกณฑ์ด้านขนาดตามระดับภาระงาน:

ระดับภาระงานโหนดข้อมูลดัชนี/แบบสอบถามRAM ต่อโหนดที่เก็บข้อมูลปริมาณงาน
การพัฒนา1 (บริการทั้งหมด)ตั้งอยู่ร่วม4GB20 GB SSD<1,000 การทำงาน/วินาที
ผลิตขนาดเล็ก3 ข้อมูล2 แบบสอบถาม+ดัชนี16GB100GB SSDปฏิบัติการ 10,000 ครั้ง/วินาที
การผลิตขนาดกลาง5 ข้อมูล3 แบบสอบถาม+ดัชนี32GB500GB SSDปฏิบัติการ 50,000 ครั้ง/วินาที
การผลิตขนาดใหญ่7-10 ข้อมูล4+ แบบสอบถาม+ดัชนี64GB1 TB NVMe200k+ การใช้งาน/วินาที
องค์กร / ทั่วโลกข้อมูล 10+ (หลายภูมิภาค)6+ แบบสอบถาม+ดัชนี128GB2+ TB NVMe500k+ การใช้งาน/วินาที

สูตรปรับขนาด

# Data Service RAM sizing
# Required RAM per node = (num_documents * (doc_metadata_size + avg_value_size)) / num_data_nodes * (1 + num_replicas)
# doc_metadata_size = 56 bytes (fixed overhead per document)
# Include 25% headroom for fragmentation and growth

# Example: 100M documents, 1KB avg size, 3 data nodes, 1 replica
# RAM = (100,000,000 * (56 + 1024)) / 3 * 2 = ~72 GB per node
# With 25% headroom: ~90 GB per node

# Index Service RAM sizing (memory-optimized)
# RAM = total_index_size * 3 (for build/merge overhead)
# Use system:indexes to check current index sizes

# Disk sizing
# Disk = (num_documents * avg_doc_size * (1 + num_replicas)) * 3 (compaction headroom)
# Use SSD/NVMe with provisioned IOPS for predictable performance

การกู้คืนความเสียหายและขั้นตอนเฟลโอเวอร์

แผนการกู้คืนความเสียหายที่ครอบคลุมช่วยให้มั่นใจถึงความต่อเนื่องทางธุรกิจเมื่อความล้มเหลวของโครงสร้างพื้นฐานเกินขอบเขตของความล้มเหลวอัตโนมัติ

ความล้มเหลวของโหนดเดี่ยว (อัตโนมัติ)

# Auto-failover handles single node failures automatically.
# Verify failover occurred:
/opt/couchbase/bin/couchbase-cli server-list \
  --cluster localhost:8091 \
  --username Administrator \
  --password password

# After replacing the failed node, add and rebalance:
/opt/couchbase/bin/couchbase-cli server-add \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --server-add new-node.example.com:8091 \
  --server-add-username Administrator \
  --server-add-password password \
  --services data,index

/opt/couchbase/bin/couchbase-cli rebalance \
  --cluster localhost:8091 \
  --username Administrator \
  --password password

ความล้มเหลวของคลัสเตอร์ที่สมบูรณ์ (ด้วยตนเอง)

# Scenario: Primary region (US-EAST) completely lost

# Step 1: Verify XDCR target cluster (EU-WEST) has latest data
# Check XDCR replication status before failure
curl -s http://eu-west-node:8091/pools/default/remoteClusters \
  -u Administrator:password | jq .

# Step 2: Pause XDCR replications pointing to the failed cluster
/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster cb-eu-west.example.com:8091 \
  --username Administrator \
  --password password \
  --pause \
  --xdcr-replicator <replication-id>

# Step 3: Update application connection strings to EU-WEST cluster
# (via DNS update, service mesh, or environment variable change)

# Step 4: Scale up EU-WEST cluster if needed to handle full production load
# In Kubernetes, update the CouchbaseCluster CRD:
kubectl patch couchbasecluster cb-eu-west -n couchbase --type merge \
  -p '{"spec":{"servers":[{"name":"data-zone-a","size":4}]}}'

# Step 5: After US-EAST cluster is restored, re-establish XDCR
# and perform a full resync from EU-WEST back to US-EAST

การเฟลโอเวอร์และการกู้คืนอย่างสง่างาม

# Graceful failover (for maintenance, drains data before removal)
/opt/couchbase/bin/couchbase-cli failover \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --server-failover node-to-remove.example.com:8091

# Recovery (re-add the node after maintenance)
/opt/couchbase/bin/couchbase-cli recovery \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --server-recovery node-to-recover.example.com:8091 \
  --recovery-type delta

# Delta recovery re-synchronizes only the changed data,
# which is much faster than full recovery.
# Full recovery rebuilds the node from scratch.

# Rebalance to complete the recovery
/opt/couchbase/bin/couchbase-cli rebalance \
  --cluster localhost:8091 \
  --username Administrator \
  --password password
ค่า

Helm สำหรับการปรับใช้การผลิตที่สมบูรณ์

ด้านล่างนี้คือไฟล์ค่า Helm ที่ครอบคลุมสำหรับการปรับใช้ Couchbase กับ Autonomous Operator ในสภาพแวดล้อมการใช้งานจริง:

# helm-values-production.yaml
couchbase-operator:
  operator:
    image:
      repository: couchbase/operator
      tag: 2.7.1
    resources:
      requests:
        cpu: 500m
        memory: 512Mi
      limits:
        cpu: "1"
        memory: 1Gi
  admissionController:
    enabled: true
    resources:
      requests:
        cpu: 100m
        memory: 128Mi

cluster:
  image: couchbase/server:7.6.1-enterprise
  antiAffinity: true
  autoFailoverTimeout: 30s
  autoFailoverMaxCount: 3
  autoFailoverOnDataDiskIssues: true
  autoFailoverServerGroup: true
  security:
    adminSecret: cb-admin-credentials
  networking:
    tls:
      static:
        serverSecret: couchbase-server-tls
        operatorSecret: couchbase-operator-tls
    exposeAdminConsole: true
    adminConsoleServiceType: NodePort
  buckets:
    managed: true
  servers:
    data:
      size: 4
      services:
      - data
      - index
      serverGroups:
      - zone-a
      - zone-b
      resources:
        requests:
          cpu: "4"
          memory: 16Gi
        limits:
          cpu: "8"
          memory: 20Gi
      volumeMounts:
        default: couchbase-data
        data: couchbase-data
        index: couchbase-index
    query:
      size: 2
      services:
      - query
      - search
      resources:
        requests:
          cpu: "4"
          memory: 8Gi
        limits:
          cpu: "8"
          memory: 12Gi
      volumeMounts:
        default: couchbase-default
    analytics:
      size: 2
      services:
      - analytics
      - eventing
      serverGroups:
      - zone-c
      resources:
        requests:
          cpu: "8"
          memory: 32Gi
        limits:
          cpu: "16"
          memory: 40Gi
      volumeMounts:
        default: couchbase-analytics
        analytics:
        - couchbase-analytics
  serverGroups:
  - zone-a
  - zone-b
  - zone-c
  volumeClaimTemplates:
  - metadata:
      name: couchbase-data
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 100Gi
  - metadata:
      name: couchbase-index
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 50Gi
  - metadata:
      name: couchbase-default
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 20Gi
  - metadata:
      name: couchbase-analytics
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 200Gi

สรุป

สถาปัตยกรรมของเซิร์ฟเวอร์

Couchbase สร้างขึ้นโดยใช้การแบ่งส่วนที่ใช้ vBucket การเข้าถึงข้อมูลที่เน้นหน่วยความจำเป็นหลัก และบริการหลายโมเดลที่ผสานรวม มอบรากฐานอันทรงพลังเฉพาะตัวสำหรับการปรับใช้การผลิตที่มีความพร้อมใช้งานสูง การผสมผสานการจำลองแบบภายในคลัสเตอร์เข้ากับระบบเฟลโอเวอร์อัตโนมัติช่วยให้มั่นใจได้ว่าความล้มเหลวของโหนดเดียวได้รับการจัดการอย่างโปร่งใส ในขณะที่ XDCR ขยายความยืดหยุ่นนี้ไปทั่วภูมิภาคทางภูมิศาสตร์สำหรับแอปพลิเคชันระดับโลก

Couchbase Autonomous Operator สำหรับ Kubernetes แปลงสิ่งที่จะเป็นการดำเนินการด้วยตนเองที่ซับซ้อนให้กลายเป็นการปรับใช้ที่ประกาศและซ่อมแซมตัวเองได้ กลุ่มเซิร์ฟเวอร์ให้การรับรู้แร็ค/โซน ผู้ปฏิบัติงานจัดการการดำเนินการปรับสมดุลระหว่างเหตุการณ์การปรับขนาด และการสำรองข้อมูล CRD ที่ผสานรวมทำให้การเตรียมการกู้คืนความเสียหายเป็นอัตโนมัติ

ประเด็นสำคัญจากคู่มือนี้:

  • ใช้ประโยชน์จาก Multi-Dimensional Scaling— แยกบริการข้อมูล ดัชนี การสืบค้น การค้นหา การวิเคราะห์ และ Eventing ไปยัง Node Pool เฉพาะเพื่อการปรับขนาดที่เป็นอิสระและการแยกทรัพยากร
  • กำหนดค่า XDCR สำหรับความยืดหยุ่นในหลายภูมิภาค— XDCR แบบสองทิศทางพร้อมการแก้ไขข้อขัดแย้งตามการประทับเวลา ช่วยให้สามารถปรับใช้แบบแอ็กทีฟแอคทีฟทั่วทั้ง AWS, Azure และ GCP ตรวจสอบให้แน่ใจว่ามีการซิงโครไนซ์ NTP เสมอ
  • ใช้กลุ่มเซิร์ฟเวอร์สำหรับการรับรู้โซน— แมปกลุ่มเซิร์ฟเวอร์กับโซนความพร้อมใช้งานหรือชั้นวางเพื่อรับประกันว่า vBuckets ที่ใช้งานอยู่และจำลองอยู่ในโดเมนความล้มเหลวที่แตกต่างกัน
  • ปรับขนาดหน่วยความจำอย่างระมัดระวัง— ประสิทธิภาพของ Couchbase เชื่อมโยงโดยตรงกับจำนวนชุดการทำงานที่เหมาะกับ RAM ใช้สูตรการกำหนดขนาดและตรวจสอบอัตราส่วนการพลาดแคช
  • ใช้การตรวจสอบที่ครอบคลุม— ปรับใช้ผู้ส่งออก Prometheus ตั้งแต่วันแรก ความล่าช้าในการจำลอง XDCR, อัตราส่วนแคชที่พลาด, ความลึกของคิวดิสก์ และสภาพของโหนดเป็นสัญญาณที่สำคัญของคุณ
  • สำรองข้อมูลอัตโนมัติด้วย cbbackupmgr— รวมการสำรองข้อมูลทั้งหมดและการสำรองข้อมูลส่วนเพิ่มเข้ากับสแน็ปช็อตบนคลาวด์ ทดสอบขั้นตอนการกู้คืนอย่างสม่ำเสมอ
  • ปลอดภัยด้วย TLS และ RBAC— เปิดใช้งานการเข้ารหัส TLS แบบโหนดต่อโหนดและไคลเอ็นต์ต่อโหนด ใช้บทบาท RBAC แบบละเอียดสำหรับบัญชีบริการแอปพลิเคชันทุกรายการ
  • กำหนดค่า SDK สำหรับ HA— ใช้โหนดบูทสแตรปหลายโหนด กำหนดค่าการหมดเวลาที่เหมาะสม ใช้การอ่านแบบจำลองเป็นทางเลือกสำรอง และใช้ประโยชน์จากการเขียนที่คงทนสำหรับข้อมูลที่สำคัญ
  • แผนสำหรับการกู้คืนความเสียหาย— จัดทำเอกสารและซ้อมขั้นตอนเฟลโอเวอร์สำหรับสถานการณ์ความล้มเหลวของโหนดเดียว หลายโหนด และคลัสเตอร์ทั้งหมด คลัสเตอร์สแตนด์บาย XDCR ควรพร้อมสำหรับการโปรโมตตลอดเวลา

ด้วยรากฐานที่ครอบคลุมนี้ คุณพร้อมที่จะปรับใช้และใช้งานเซิร์ฟเวอร์ Couchbase ในสภาพแวดล้อมการผลิตที่มีความพร้อมใช้งานสูงในทุกโครงสร้างพื้นฐาน ตั้งแต่ Kubernetes ที่มีการจัดการบน AWS, Azure และ GCP ไปจนถึงคลัสเตอร์ Bare Metal k3s ที่จัดการโดย Rancher การผสมผสานสถาปัตยกรรมแบบกระจายดั้งเดิมของ Couchbase เข้ากับการจัดการ Kubernetes ทำให้เกิดแพลตฟอร์มฐานข้อมูลที่ตอบสนองความต้องการของแอปพลิเคชันสมัยใหม่ที่กระจายไปทั่วโลก