Workstation Logo
المنتجات
مختبرات الذكاء الاصطناعيوكلاء OpenAIوكلاء ClaudeGrok BotWorkstation CRM (WSL CRM)التسويقجميع المنتجات
حلول الذكاء الاصطناعي
محطات عمل الذكاء الاصطناعيAI SME Packagesذكاء اصطناعي خاصمجموعات GPUذكاء اصطناعي طرفيمختبر الذكاء الاصطناعي للمؤسساتالذكاء الاصطناعي حسب الصناعة
الخدمات
Platform ModernisationDigital EngineeringData Foundations & AIAutonomous Operationsاستشارات الذكاء الاصطناعيأتمتة DevOpsالأمن السيبرانيتطوير البرمجياتبناء الوكلاءإعداد MLOps
من نحن
الشركاءقصص العملاء
المقالات
الوثائق
WSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7
المدونة
اتصل بناLogin
Workstation

محطات عمل الذكاء الاصطناعي وبرمجيات الوكلاء المتعددة والبنية التحتية لوحدات GPU وحلول الوكلاء الأذكياء للشركات الحديثة.

اتصل بنا

حلول الذكاء الاصطناعي

محطات عمل الذكاء الاصطناعيAI SME Packagesذكاء اصطناعي خاصمجموعات GPUذكاء اصطناعي طرفيمختبر الذكاء الاصطناعي للمؤسساتالذكاء الاصطناعي حسب الصناعة

المنتجات

جميع المنتجاتWSL CRM و ERPالتسويقوكلاء OpenAIWSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7

الشركة

من نحنلماذا Workstationالشركاءقصص العملاءالأسعاراتصل

الموارد

المقالاتالتوثيقالمدونةبحثخريطة الموقع
مكتب المملكة المتحدة
77-79 Marlowes, Hemel Hempstead HP1 1LFالاتجاهات - اسلك المخرج 20 من الطريق M25 في لندن الخارجيةرقم الشركة: 11641870الاثنين - الجمعة: 9:00 ص - 6:00 م بتوقيت GMT
+44 7515 356 146
مكتب بلجيكا
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683الاثنين - الجمعة: 9:00 ص - 6: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، والنشر في مناطق متعددة

Enterprise Couchbase HA مع XDCR والمشغل المستقل والنشر متعدد السحابات

Balinder Walia12 أبريل 202635 min read
مقدمة

: لماذا Couchbase لأحمال عمل الإنتاج عالية التوفر

Couchbase Server عبارة عن قاعدة بيانات NoSQL موزعة ومتعددة النماذج تم تصميمها للتطبيقات التفاعلية التي تتطلب أداءً ثابتًا منخفض زمن الوصول على أي نطاق. على عكس قواعد البيانات التي تعتمد على الميزات الموزعة كفكرة لاحقة، تم تصميم Couchbase منذ بدايتها حول طوبولوجيا نظير إلى نظير التي لا تشارك شيئًا، حيث تكون كل عقدة متساوية ويتم تقسيم البيانات تلقائيًا عبر المجموعة باستخدام آلية تجزئة حتمية تسمىvBuckets. يعمل هذا الاختيار المعماري على التخلص من نقاط الفشل الفردية في طبقة البيانات ويتيح القياس الأفقي دون إجراء تغييرات على التطبيق.

ما يميز Couchbase عن غيرها في مشهد التوفر العالي هوCross Data Center Replication (XDCR)- محرك النسخ المتماثل المدمج غير المتزامن الذي يقوم بتدفق الطفرات بشكل مستمر بين المجموعات الموزعة جغرافيًا. إلى جانب تجاوز الفشل التلقائي، والوعي بالرف/المنطقة، ومجموعة غنية من الخدمات المتكاملة (البيانات، والفهرس، والاستعلام، والبحث، والتحليلات، والأحداث)، يوفر Couchbase منصة موحدة يمكن أن تكون بمثابة قاعدة بيانات تشغيلية ومحرك تحليلي للتطبيقات الحديثة.

في هذا الدليل الشامل، سنستكشف كل جانب من جوانب تشغيل خادم Couchbase في بيئات إنتاج عالية التوفر: البنية الداخلية التي تجعل HA ممكنًا، وتكوين XDCR لعمليات النشر متعددة المناطق، ومشغل Couchbase المستقل لـ Kubernetes، وأنماط النشر الخاصة بالسحابة لـ AWS EKS، وAzure AKS، وGCP GKE، وعمليات نشر k3s المعدنية العارية مع Rancher وLonghorn، والنسخ الاحتياطي والاستعادة الاستراتيجيات، وضبط استعلام N1QL، وتقوية الأمان، والمراقبة، وCouchbase Mobile مع Sync Gateway لعمليات نشر الحافة. بحلول النهاية، سيكون لديك معرفة عملية لنشر وتشغيل مجموعات Couchbase على مستوى الإنتاج على أي بنية تحتية.

بنية خادم

Couchbase: الخدمات وvBuckets والمشاركة التلقائية

يعد فهم البنية الداخلية لـ Couchbase أمرًا بالغ الأهمية قبل النشر لتحقيق التوفر العالي. يستخدم Couchbase بنيةللقياس متعدد الأبعاد (MDS)حيث يمكن نشر الخدمات المختلفة بشكل مستقل وتوسيع نطاقها عبر عقد المجموعة. وهذا يمنح المشغلين تحكمًا دقيقًا في تخصيص الموارد وعزل الأداء.

الخدمات الأساسية الست

يوفر خادم

Couchbase ست خدمات متكاملة، كل منها يتعامل مع نوع مختلف من عبء العمل:

  • Data Service (KV)- المحرك الأساسي ذو القيمة الرئيسية المبني على بنية الذاكرة أولاً. فهو يتعامل مع عمليات CRUD، ويدير توزيع vBucket، ويعمل كطبقة الثبات. يتم تخزين البيانات في الذاكرة (ذاكرة التخزين المؤقت المُدارة) ويتم الاحتفاظ بها بشكل غير متزامن على القرص. يجب أن تعمل هذه الخدمة على عقدة واحدة على الأقل في كل مجموعة.
  • خدمة الفهرس (GSI)— تحافظ على الفهارس الثانوية العامة التي تدعم استعلامات N1QL. يتم تخزين الفهارس بشكل منفصل عن البيانات، مما يسمح بالقياس المستقل. يدعم أوضاع تخزين الفهرس القياسية والمحسنة للذاكرة.
  • خدمة الاستعلام (N1QL)— ينفذ استعلامات N1QL (SQL++ لـ JSON) مقابل المجموعة. عديم الحالة حسب التصميم، مما يجعل من السهل القياس أفقيًا. ينسق مع خدمات البيانات والفهرس لتخطيط وتنفيذ الاستعلامات.
  • خدمة البحث(FTS)— توفر إمكانات البحث عن النص الكامل المدعومة بمحرك بحث Bleve. يدعم المطابقة الغامضة والاستعلامات الجغرافية المكانية والبحث متعدد الأوجه والمحللات المخصصة. يتم تقسيم الفهارس ونسخها عبر عقد البحث.
  • خدمة التحليلات(CBAS)— تدير استعلامات تحليلية معقدة باستخدام محرك معالجة متوازي يعتمد على Apache Asterix. يعمل على نسخته الخاصة من البيانات، مما يضمن عدم تأثير أعباء العمل التحليلية على زمن الاستجابة التشغيلي.
  • Eventing Service— تنفذ وظائف JavaScript من جانب الخادم استجابةً لطفرات البيانات. يتيح إثراء البيانات في الوقت الحقيقي، والتحويلات، وعمليات الحذف المتتالية، ومشغلات التكامل بدون بنية تحتية خارجية.
Couchbase بنية المجموعة & توزيع الخدمةمجموعةCouchbase (تمكين تجاوز الفشل التلقائي، الكشف خلال 3 ثوانٍ)العقدة 1 (10.0.1.10)خدمة البيانات(KV)vBuckets 0-341 | ذاكرة تخزين مؤقت 256 ميجا بايتخدمة الفهرس(GSI)خدمة الاستعلام(N1QL)خريطةvBucket (نشطة)0-341 نشط | 342-682 نسخةالاستمرار التلقائي على القرص (غير متزامن)العقدة 2 (10.0.1.11)خدمة البيانات(KV)vBuckets 342-682 | ذاكرة تخزين مؤقت 256 ميجا بايتخدمة البحث(FTS)خدمة تحليلات(CBAS)خريطة vBucket (نشطة)342-682 نشط | 683-1023 نسخةدفق DCP إلى Analyticsالعقدة 3 (10.0.1.12)خدمة البيانات(KV)vBuckets 683-1023 | ذاكرة تخزين مؤقت 256 ميجا بايتخدمة الأحداثخدمة الاستعلام(N1QL)خريطة vBucket (نشطة)683-1023 نشط | 0-341 نسخةمستهلك DCP للأحداثمدير تجاوز الفشل التلقائيمراقبة نبضات القلب | كشف 3S | ترويج vBucket | الحد الأقصى 3 حالات فشل تسلسليةبيانات(كيلو فولت)الفهرس/الاستعلامالبحث/التحليلات/الأحداثالنسخ المتماثل داخل المجموعةنبضات القلب

توزيع vBucket والمشاركة التلقائية

يقوم

Couchbase بتوزيع البيانات عبر المجموعة باستخدام1024 vBuckets(المجموعات الافتراضية). يتم تعيين كل مستند إلى vBucket باستخدام تجزئة CRC32 لوحدة مفتاح المستند 1024. تقوم خريطة المجموعة - التي تحتفظ بها كل عقدة ويتم تخزينها مؤقتًا بواسطة كل عميل SDK - بتعيين كل vBucket إلى عقدة محددة. ويعني هذا التعيين الحتمي أن العملاء يعرفون دائمًا بالضبط العقدة التي تحمل أي مستند معين، مما يتيح القراءة والكتابة بقفزة واحدة مع زمن وصول أقل من مللي ثانية.

عند إضافة العقد أو إزالتها، يقوم Couchbase بإعادة توزيع vBuckets تلقائيًا من خلال عملية تسمىrebalance. أثناء عملية إعادة التوازن، تقوم المجموعة بنقل vBuckets بين العقد بينما تظل قيد التشغيل بكامل طاقتها. يتم تنسيق عملية إعادة التوازن بعناية للحفاظ على عدد النسخ المتماثلة الذي تم تكوينه في جميع الأوقات، ويتم إعادة توجيه العملاء بسلاسة إلى مواقع vBucket الجديدة من خلال تحديثات خريطة المجموعة.

النسخ المتماثل داخل المجموعة وتجاوز الفشل التلقائي

يحتوي كل vBucket على نسخةنشطة منوما يصل إلى ثلاث نسخمتماثلة منموزعة عبر عقد مختلفة. عندما يكتب العميل مستندًا، تنتقل عملية الكتابة إلى vBucket النشط الموجود على العقدة المسؤولة. تقوم خدمة البيانات بعد ذلك بنسخ الطفرة لنسخ vBuckets على العقد الأخرى من خلال دفقDCP (بروتوكول تغيير قاعدة البيانات)الداخلي. افتراضيًا، يقوم 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 عقد (للحفاظ على النصاب القانوني).
  • تمكين تجاوز فشل مجموعات الخادم— يتيح تجاوز الفشل لمجموعة خادم بأكملها (حامل/منطقة)، وهو أمر بالغ الأهمية لعمليات النشر المدركة للمنطقة.
  • مشكلات تجاوز الفشل على قرص البيانات- يؤدي إلى تشغيل تجاوز الفشل عندما تكتشف خدمة البيانات أخطاء الإدخال / الإخراج المستمرة للقرص.

XDCR: النسخ المتماثل لمركز البيانات

XDCR هي تقنية النسخ المتماثل متعددة المناطق الرائدة في Couchbase. على عكس النسخ المتماثل على مستوى قاعدة البيانات الموجود في أنظمة RDBMS التقليدية، يعمل XDCR على مستوى مجموعةويقوم بتدفق طفرات المستندات الفردية بين مجموعات Couchbase المستقلة. تظل كل مجموعة مستقلة تمامًا - يمكنها قبول عمليات القراءة والكتابة بشكل مستقل، مما يجعل XDCR مثاليًا لعمليات النشر النشطة متعددة المناطق حيث يحتاج المستخدمون إلى وصول بزمن وصول منخفض من أي منطقة جغرافية.

أحادي الاتجاه مقابل ثنائي الاتجاه XDCR

XDCRأحادي الاتجاه يكرر الطفرات من مجموعة المصدر إلى المجموعة المستهدفة في اتجاه واحد. يعد هذا مناسبًا لسيناريوهات التعافي من الكوارث، أو قراءة النسخ المتماثلة في المناطق النائية، أو تغذية البيانات من مجموعة تشغيلية إلى مجموعة تحليلات.

ثنائي الاتجاه XDCRينشئ روابط النسخ المتماثل في كلا الاتجاهين بين مجموعتين، مما يتيح عمليات النشر النشطة حيث تقبل كلتا المجموعتين عمليات الكتابة. هذا هو التكوين الأقوى ولكنه يتطلب تخطيطًا دقيقًا لحل الصراعات.

XDCR النسخ المتماثل ثنائي الاتجاه متعدد المناطقشرق الولايات المتحدة (AWS EKS)مجموعة: cb-us-east5 عقد | البيانات + الفهرس + الاستعلامدلو: التطبيقدلو: المستخدمونحل الصراع: LWW (الطابع الزمني)XDCR: تشغيل الضغط | TLS 1.3يكتب: ~ 15 ألف عملية/ثانيةالاتحاد الأوروبي والغرب (Azure AKS)مجموعة: cb-eu-west5 عقد | البيانات + الفهرس + الاستعلامدلو: التطبيقدلو: المستخدمونحل الصراع: LWW (الطابع الزمني)XDCR: تشغيل الضغط | TLS 1.3يكتب: ~ 12 ألف عملية/ثانيةAP-SOUTH (GCP GKE)مجموعة: cb-ap-south3 عقد | البيانات + الفهرس + الاستعلامدلو: التطبيقدلو: المستخدمونحل الصراع: LWW (الطابع الزمني)XDCR: تشغيل الضغط | TLS 1.3يكتب: ~8k ops/secXDCRXDCRXDCR (ثنائي الاتجاه)استراتيجيات حل النزاعاتLWW (آخر انتصارات الكتابة حسب الطابع الزمني) | رقم التسلسل | حل التعارضات المخصصة عبر وظائف الدمج (المؤسسة)XDCR إلى الأمامXDCR عكسرابط عبر المناطقAWSAzureبرنامج التعاون العالمي

إعداد النسخ المتماثل 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 ثوانٍ من الانحراف). تم تعيينه في وقت إنشاء الحاوية ولا يمكن تغييره لاحقًا.
  • المستند إلى رقم التسلسل — يستخدم رقم التسلسل الداخلي (معرف المراجعة) لتحديد الفائز. تفوز الطفرة ذات عدد المراجعة الأعلى. يكون مفيدًا عندما تكون مزامنة الطابع الزمني غير موثوقة.
  • حل التعارضات المخصص (للمؤسسات)- يدعم 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 المستقل (CAO)هو مشغل Kubernetes على مستوى المؤسسات يقوم بأتمتة نشر مجموعات خادم Couchbase وإدارتها وتوسيع نطاقها واستردادها. على عكس عمليات نشر StatefulSet البسيطة، يفهم المشغل المستقل الهيكل الداخلي لـ Couchbase - فهو يدير عمليات إعادة التوازن، وينسق الترقيات المتدرجة، ويتعامل مع الوعي بمجموعة الخوادم، ويتكامل مع أساسيات جدولة Kubernetes لضمان الموضع الأمثل لحجيرات Couchbase.

Couchbase المشغل المستقل على KubernetesCouchbase المشغل المستقلساعاتCouchbaseCluster CRD | يوفق بينCouchbaseالكلوستر CRDإعلان الحالة المرغوبةأسرارTLSالتدوير التلقائي عبر مدير الشهاداتمجموعة خوادم: المنطقة أ (الرف 1)StatefulSet: cb-prod-data-zacb-prod-0000بيانات+ فهرس4 CPU | 16جيPVC: 100Gi gp3cb-prod-0001استعلام+ بحث4 CPU | 8جيPVC: 50Gi gp3PVC (EBS gp3)ClusterIP SvcAnti-Affinity: عقد المنطقة-a فقطمجموعة خوادم: المنطقة ب (الرف 2)StatefulSet: cb-prod-data-zbcb-prod-0002بيانات+ فهرس4 CPU | 16جيPVC: 100Gi gp3cb-prod-0003استعلام+ بحث4 CPU | 8جيPVC: 50Gi gp3PVC (EBS gp3)ClusterIP SvcAnti-Affinity: عقد المنطقة b فقطمجموعة خوادم: Zone-c (rack-3)StatefulSet: cb-prod-data-zccb-prod-0004بيانات+ تحليلات8 CPU | 32جيPVC: 200Gi gp3cb-prod-0005أحداث2 CPU | 8جيPVC: 50Gi gp3PVC (EBS gp3)ClusterIP SvcAnti-Affinity: عقد المنطقة c فقطالخدمات المكشوفةNodePort 8091 | اس دي كيه 11210 | N1QL 8093وحدة التحكم بالقبوليتحقق من صحة CRD | خطاف ويب TLSوحدة التحكم الاحتياطيةcbbackupmgr | S3/GCS/Azureمشغلالبيانات/الفهرس/الاستعلامتحليلات/أحداثPVC تخزينجدولة جرابالأمان/التحقق من الصحةمواصفات

CouchbaseCluster 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 لمتطلبات الإدخال/الإخراج الخاصة بـ 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 الأقراص الثابتة SSD وهوية حمل العمل للوصول الآمن إلى 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 مع قرون طويلة

بالنسبة للمؤسسات التي تحتاج إلى تحكم كامل في البنية التحتية دون تقييد البائع السحابي، يوفر الطراز k3s المعدني العاري مع إدارة Rancher والتخزين الموزع Longhorn أساسًا ممتازًا لـ Couchbase HA. تحظى هذه البنية بشعبية كبيرة في الصناعات المنظمة وسيناريوهات الحوسبة المتطورة والبيئات الحساسة للتكلفة.

k3s / نشر Rancher Bare Metal Couchbaseوحدة تحكم إدارة المزرعةالعقدة 1: خادم k3s (الرف 1)Couchbase بيانات + فهرسcb-prod-0000 | 8 CPU، 64 جيجابايتvBuckets 0-341 نشط | منفذ SDK 11210استعلامCouchbase (N1QL)cb-prod-0001 | المنفذ 8093MetalLB VIPPrometheusحجم القرون الطويلة/dev/sdb NVMe | 3 نسخ متماثلة عبر العقدمضاد التقارب: لا توجد كبسولات Couchbase مجمعةالعقدة 2: خادم k3s (الرف 2)Couchbase بيانات + فهرسcb-prod-0002 | 8 CPU، 64 جيجابايتvBuckets 342-682 نشط | منفذ SDK 11210Couchbase بحث (FTS)cb-prod-0003 | المنفذ 8094MetalLB VIPGrafanaحجم القرون الطويلة/dev/sdb NVMe | 3 نسخ متماثلة عبر العقدمضاد التقارب: لا توجد كبسولات Couchbase مجمعةالعقدة 3: وكيل k3s (الرف 3)Couchbase بيانات + تحليلاتcb-prod-0004 | 16 CPU، 128 جيجابايتvBuckets 683-1023 نشط | سيباسCouchbase الأحداثcb-prod-0005 | مستهلك DCPMetalLB VIPCAO المشغلحجم القرون الطويلة/dev/sdb NVMe | 3 نسخ متماثلة عبر العقدمضاد التقارب: لا توجد كبسولات Couchbase مجمعةموازن التحميل MetalLBVIP: 192.168.1.200-210 | SDK + وحدة تحكم الويب + XDCRالنسخ الاحتياطي لـ: cbbackupmgr → MinIO S3يومي كامل + تزايدي بالساعة | MinIO على 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

يوفر

Couchbasecbbackupmgr، وهي أداة نسخ احتياطي مؤسسية تدعم النسخ الاحتياطية الكاملة والتزايدية والتفاضلية مع الضغط والتشفير الاختياري. بالنسبة لعمليات نشر 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 أن تخصيص ذاكرة الوصول العشوائي يؤثر بشكل مباشر على الأداء. تحتوي كل خدمة على حصة ذاكرة خاصة بها، وتتشارك المجموعات في حصة خدمة البيانات. يمنع الحجم المناسب عمليات إخلاء ذاكرة التخزين المؤقت التي تؤدي إلى انخفاض زمن الوصول.

# 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 API. يقومcouchbase-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— عمق قائمة انتظار الكتابة على القرص. تشير قائمة الانتظار المتزايدة إلى أن الإدخال/الإخراج للقرص لا يمكنه مواكبة إنتاجية الكتابة.
  • cb_xdcr_changes_left— عدد الطفرات التي تنتظر النسخ المتماثل لـ XDCR. يشير إلى تأخر النسخ المتماثل عبر المنطقة.
  • cb_xdcr_docs_writer— يتم نسخ المستندات في الثانية من خلال 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 بوابة الهاتف المحمول والمزامنة لعمليات نشر الحافة

يعمل

Couchbase Mobile على توسيع النظام البيئي Couchbase ليشمل الأجهزة الطرفية وتطبيقات الهاتف المحمول. يعملCouchbase Liteمضمنًا على أجهزة iOS وAndroid وIoT، بينما يعملSync Gatewayكبرنامج وسيط للمزامنة بين Couchbase Lite وCouchbase Server.

// 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 وتحسين التكلفة. يوفر الجدول التالي إرشادات الحجم بناءً على طبقة عبء العمل:

طبقة عبء العملعقد البياناتذاكرة الوصول العشوائيتخزينتطويرموجود في مكان مشتركالعالمية
الفهرس/الاستعلاملكل عقدةالإنتاجية
1 (جميع الخدمات)4 جيجابايت20 جيجابايت SSD<1 كيلو عملية/ثانية
إنتاج صغير3 بيانات2 استعلام + فهرس16 جيجابايت100 جيجابايت SSD10 آلاف عملية/ثانية
إنتاج متوسط5 بيانات3 استعلام + فهرس32 جيجا بايت500 جيجابايت SSD50 ألف عملية/ثانية
إنتاج كبير7-10 بيانات4+ استعلام + فهرس64 جيجابايت1 تيرابايت NVMe200 ألف+ عملية/ثانية
المؤسسة /10+ بيانات (متعددة المناطق)6+ استعلام + فهرس128 جيجابايت2+ تيرابايت NVMe500 ألف+ العمليات/الثانية

صيغة التحجيم

# 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 مع المشغل المستقل في بيئة الإنتاج:

# 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 Server - المبنية على التقسيم القائم على vBucket، والوصول إلى البيانات بالذاكرة أولاً، والخدمات المتكاملة متعددة النماذج - أساسًا قويًا فريدًا لعمليات نشر الإنتاج عالية التوفر. ويضمن الجمع بين النسخ المتماثل داخل المجموعة وتجاوز الفشل التلقائي التعامل مع حالات فشل العقدة الواحدة بشفافية، بينما يعمل XDCR على توسيع هذه المرونة عبر المناطق الجغرافية للتطبيقات العالمية.

يقوم مشغل Couchbase المستقل لـ Kubernetes بتحويل ما يمكن أن يكون عمليات يدوية معقدة إلى عمليات نشر تعريفية ذاتية الإصلاح. توفر مجموعات الخوادم الوعي بالحامل/المنطقة، ويدير المشغل عمليات إعادة التوازن أثناء أحداث القياس، كما تعمل النسخ الاحتياطية المتكاملة CRDs على أتمتة عملية الاستعداد للتعافي من الكوارث.

الوجبات الرئيسية من هذا الدليل:

  • الاستفادة من القياس متعدد الأبعاد— خدمات منفصلة للبيانات والفهرس والاستعلام والبحث والتحليلات والأحداث في مجموعات العقد المخصصة للقياس المستقل وعزل الموارد.
  • تكوين XDCR للمرونة متعددة المناطق— XDCR ثنائي الاتجاه مع حل التعارض القائم على الطابع الزمني يتيح عمليات النشر النشطة عبر AWS وAzure وGCP. تأكد دائمًا من مزامنة NTP.
  • استخدم مجموعات الخوادم للتعرف على المنطقة— قم بتعيين مجموعات الخوادم إلى مناطق التوفر أو الرفوف لضمان وجود vBuckets النشطة والمتماثلة في نطاقات فشل مختلفة.
  • قم بقياس الذاكرة بعناية— يرتبط أداء Couchbase بشكل مباشر بكمية مجموعة العمل التي تناسب ذاكرة الوصول العشوائي (RAM). استخدم صيغ التحجيم وراقب نسب فقدان ذاكرة التخزين المؤقت.
  • تنفيذ المراقبة الشاملة— انشر مُصدر Prometheus من اليوم الأول. إن تأخر النسخ المتماثل XDCR، ونسبة فقدان ذاكرة التخزين المؤقت، وعمق قائمة انتظار القرص، وصحة العقدة هي إشاراتك المهمة.
  • أتمتة عمليات النسخ الاحتياطي باستخدام cbbackupmgr— اجمع بين النسخ الاحتياطية الكاملة والمتزايدة مع اللقطات السحابية. اختبار إجراءات الاستعادة بانتظام.
  • آمن باستخدام TLS وRBAC- تمكين تشفير TLS من عقدة إلى عقدة ومن عميل إلى عقدة. استخدم أدوار RBAC الدقيقة لكل حساب خدمة تطبيق.
  • تكوين مجموعات SDK لـ HA— استخدم عقد التمهيد المتعددة، وقم بتكوين المهلات المناسبة، وتنفيذ عمليات قراءة النسخة المتماثلة كإجراء احتياطي، والاستفادة من عمليات الكتابة الدائمة للبيانات المهمة.
  • التخطيط للتعافي من الكوارث— توثيق إجراءات تجاوز الفشل والتدرب عليها لسيناريوهات فشل المجموعة أحادية العقد ومتعددة العقد والفشل الكامل. يجب أن تكون مجموعات XDCR الاحتياطية جاهزة للترقية في جميع الأوقات.

مع هذا الأساس الشامل، أنت مجهز لنشر خادم Couchbase وتشغيله في بيئات إنتاج عالية التوفر عبر أي بنية تحتية - بدءًا من Kubernetes المُدار على AWS وAzure وGCP إلى مجموعات k3s المعدنية العارية المُدارة بواسطة Rancher. يوفر الجمع بين البنية الموزعة الأصلية لـ Couchbase مع تنسيق Kubernetes منصة قاعدة بيانات تلبي متطلبات التطبيقات الحديثة الموزعة عالميًا.