پیداوار میں Couchbase اعلی دستیابی: XDCR، Kubernetes آپریٹر، اور ملٹی ریجن تعیناتی
XDCR، خود مختار آپریٹر، اور ملٹی کلاؤڈ تعیناتی کے ساتھ انٹرپرائز Couchbase HA
کا تعارف: کیوں Couchbase اعلی دستیابی پروڈکشن ورک بوجھ کے لیے
Couchbase سرور ایک تقسیم شدہ، ملٹی ماڈل NoSQL ڈیٹا بیس ہے جو انٹرایکٹو ایپلی کیشنز کے لیے بنایا گیا ہے جو کسی بھی پیمانے پر مسلسل کم تاخیر کی کارکردگی کا مطالبہ کرتا ہے۔ ڈیٹا بیس کے برعکس جو تقسیم شدہ خصوصیات کو بعد میں سوچتے ہیں، Couchbase کو اپنے آغاز سے ہی مشترکہ کچھ بھی نہیں، ہم مرتبہ ٹوپولوجی کے ارد گرد تعمیر کیا گیا تھا جہاں ہر نوڈ برابر ہوتا ہے اورvBucketsنامی ڈیٹرمنسٹک ہیشنگ میکانزم کا استعمال کرتے ہوئے ڈیٹا کو کلسٹر میں خود بخود شارڈ کیا جاتا ہے۔ یہ آرکیٹیکچرل انتخاب ڈیٹا لیئر میں ناکامی کے ایک پوائنٹ کو ختم کرتا ہے اور ایپلیکیشن تبدیلیوں کے بغیر افقی اسکیلنگ کو قابل بناتا ہے۔
جو چیز Couchbase کو اعلی دستیابی کے منظر نامے میں الگ کرتی ہے وہ ہے اس کاکراس ڈیٹا سینٹر ریپلیکیشن (XDCR)— ایک بلٹ ان، غیر مطابقت پذیر ریپلیکیشن انجن جو جغرافیائی طور پر تقسیم شدہ کلسٹرز کے درمیان تغیرات کو مسلسل جاری رکھتا ہے۔ خودکار فیل اوور، ریک/زون بیداری، اور مربوط خدمات (ڈیٹا، انڈیکس، سوال، تلاش، تجزیات، اور ایونٹنگ) کے بھرپور سیٹ کے ساتھ مل کر، Couchbase ایک متحد پلیٹ فارم فراہم کرتا ہے جو جدید ایپلی کیشنز کے لیے آپریشنل ڈیٹا بیس اور تجزیاتی انجن دونوں کے طور پر کام کر سکتا ہے۔
اس جامع گائیڈ میں، ہم اعلیٰ دستیابی پروڈکشن ماحول میں Couchbase سرور کو چلانے کے ہر پہلو کو تلاش کریں گے: اندرونی فن تعمیر جو HA کو ممکن بناتا ہے، کثیر خطوں کی تعیناتیوں کے لیے XDCR کنفیگریشن، Kubernetes کے لیے Couchbase خود مختار آپریٹر، کلاؤڈ-مخصوص تعیناتی، XPRX5 پیٹرن، XPRX5 کے لیے کلاؤڈ مخصوص GCP GKE، رینچر اور لانگ ہارن کے ساتھ ننگی دھاتی k3s تعیناتیاں، بیک اپ اور بحالی کی حکمت عملی، N1QL استفسار کی ٹیوننگ، سیکیورٹی سخت، نگرانی، اور Couchbase موبائل کناروں کی تعیناتیوں کے لیے Sync Gateway کے ساتھ۔ آخر تک، آپ کو کسی بھی انفراسٹرکچر پر پروڈکشن گریڈ Couchbase کلسٹرز کو تعینات اور چلانے کے لیے قابل عمل معلومات حاصل ہوں گی۔
Couchbase سرور آرکیٹیکچر: سروسز، vBuckets، اور خودکار شارڈنگ
اعلی دستیابی کے لیے تعینات کرنے سے پہلے Couchbase کے اندرونی فن تعمیر کو سمجھنا بہت ضروری ہے۔ Couchbase ایکملٹی ڈائمینشنل اسکیلنگ (MDS)فن تعمیر کا استعمال کرتا ہے جہاں مختلف خدمات کو آزادانہ طور پر تعینات کیا جا سکتا ہے اور کلسٹر نوڈس میں اسکیل کیا جا سکتا ہے۔ اس سے آپریٹرز کو وسائل کی تقسیم اور کارکردگی کی تنہائی پر عمدہ کنٹرول ملتا ہے۔
چھ بنیادی خدمات
Couchbase سرور چھ مربوط خدمات فراہم کرتا ہے، ہر ایک ایک الگ کام کے بوجھ کی قسم کو سنبھالتا ہے:
- ڈیٹا سروس (KV)— بنیادی کلیدی قدر کا انجن جو میموری کے پہلے فن تعمیر پر بنایا گیا ہے۔ یہ CRUD آپریشنز کو ہینڈل کرتا ہے، vBucket کی تقسیم کا انتظام کرتا ہے، اور استقامت کی پرت کے طور پر کام کرتا ہے۔ ڈیٹا میموری میں محفوظ کیا جاتا ہے (منظم کیشے) اور غیر مطابقت پذیر طور پر ڈسک پر برقرار رہتا ہے۔ یہ سروس ہر کلسٹر میں کم از کم ایک نوڈ پر چلنی چاہیے۔
- انڈیکس سروس (GSI)— عالمی ثانوی اشاریہ جات کو برقرار رکھتا ہے جو N1QL سوالات کو سپورٹ کرتے ہیں۔ اشاریہ جات کو ڈیٹا سے علیحدہ طور پر محفوظ کیا جاتا ہے، جس سے آزاد پیمانے کی اجازت ہوتی ہے۔ معیاری اور میموری سے بہتر انڈیکس اسٹوریج موڈ کو سپورٹ کرتا ہے۔
- Query Service (N1QL)— کلسٹر کے خلاف N1QL (SQL++ برائے JSON) سوالات کو انجام دیتا ہے۔ ڈیزائن کے لحاظ سے بے وطن، افقی طور پر اسکیل کرنا آسان بناتا ہے۔ سوالات کی منصوبہ بندی اور عمل درآمد کے لیے ڈیٹا اور انڈیکس خدمات کے ساتھ کوآرڈینیٹ کرتا ہے۔
- سرچ سروس (FTS)— Bleve سرچ انجن کے ذریعے طاقت یافتہ مکمل متن تلاش کرنے کی صلاحیتیں فراہم کرتا ہے۔ مبہم مماثلت، جغرافیائی استفسارات، پہلوؤں کی تلاش، اور حسب ضرورت تجزیہ کاروں کو سپورٹ کرتا ہے۔ اشاریہ جات کو تقسیم کیا جاتا ہے اور تلاش کے نوڈس میں نقل کیا جاتا ہے۔
- Analytics سروس (CBAS)— Apache Asterix پر مبنی متوازی پروسیسنگ انجن کا استعمال کرتے ہوئے پیچیدہ تجزیاتی سوالات چلاتا ہے۔ ڈیٹا کی اپنی کاپی پر کام کرتا ہے، اس بات کو یقینی بناتے ہوئے کہ تجزیاتی کام کا بوجھ کبھی بھی آپریشنل لیٹنسی کو متاثر نہیں کرتا ہے۔
- ایونٹنگ سروس— ڈیٹا میوٹیشن کے جواب میں سرور سائیڈ JavaScript فنکشنز کو انجام دیتا ہے۔ بیرونی انفراسٹرکچر کے بغیر ریئل ٹائم ڈیٹا کی افزودگی، تبدیلیاں، کاسکیڈ ڈیلیٹس، اور انٹیگریشن ٹرگرز کو قابل بناتا ہے۔
vBucket کی تقسیم اور خودکار شارڈنگ
Couchbase1024 vBuckets(ورچوئل بکٹس) کا استعمال کرتے ہوئے کلسٹر میں ڈیٹا تقسیم کرتا ہے۔ دستاویز کلید ماڈیولو 1024 کے CRC32 ہیش کا استعمال کرتے ہوئے ہر دستاویز کو vBucket میں میپ کیا جاتا ہے۔ کلسٹر میپ — ہر نوڈ کے ذریعے برقرار رکھا جاتا ہے اور ہر SDK کلائنٹ کے ذریعے کیش کیا جاتا ہے — ہر vBucket کو ایک مخصوص نوڈ پر نقشہ بناتا ہے۔ اس ڈیٹرمنسٹک میپنگ کا مطلب ہے کہ کلائنٹس کو ہمیشہ یہ معلوم ہوتا ہے کہ کون سا نوڈ کسی بھی دستاویز کو رکھتا ہے، جس سے سنگل ہاپ پڑھنے اور لکھنے کو سب ملی سیکنڈ لیٹینسی کے ساتھ قابل بناتا ہے۔
جب نوڈز کو شامل یا ہٹا دیا جاتا ہے، Couchbase خود بخود vBuckets کوری بیلنسنامی عمل کے ذریعے دوبارہ تقسیم کرتا ہے۔ ری بیلنس کے دوران، کلسٹر مکمل طور پر آپریشنل رہتے ہوئے نوڈس کے درمیان vBuckets کو منتقل کرتا ہے۔ ری بیلنس کو احتیاط سے ترتیب دیا گیا ہے تاکہ ہر وقت ریپلیکس کی ترتیب شدہ تعداد کو برقرار رکھا جا سکے، اور کلائنٹس کو کلسٹر میپ اپ ڈیٹس کے ذریعے بغیر کسی رکاوٹ کے نئے vBucket مقامات پر بھیج دیا جاتا ہے۔
انٹرا کلسٹر ریپلیکیشن اور آٹو فیل اوور
ہر vBucket میں ایکفعالکاپی اور تین تکریپلیکاکاپیاں مختلف نوڈس میں تقسیم ہوتی ہیں۔ جب کوئی کلائنٹ کوئی دستاویز لکھتا ہے، تو تحریر ذمہ دار نوڈ پر فعال vBucket میں جاتی ہے۔ ڈیٹا سروس اس کے بعد اندرونیDCP (ڈیٹا بیس چینج پروٹوکول)سٹریم کے ذریعے دوسرے نوڈس پر vBuckets کی نقل میں تبدیلی کو نقل کرتی ہے۔ پہلے سے طے شدہ طور پر، 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 سیکنڈ تجویز کردہ پیداوار کی ترتیب ہے۔
- max-failovers— دستی مداخلت کی ضرورت سے پہلے ترتیب وار آٹو فیل اوور کی زیادہ سے زیادہ تعداد۔ 5 نوڈ کلسٹر کے لیے 3 پر سیٹ کریں (کورم برقرار رکھنے کے لیے)۔
- enable-failover-of-server-groups— پورے سرور گروپ (ریک/زون) کے فیل اوور کو قابل بناتا ہے، جو زون سے آگاہی کی تعیناتیوں کے لیے اہم ہے۔
- failover-on-data-disk-issues— فیل اوور کو متحرک کرتا ہے جب ڈیٹا سروس مسلسل ڈسک I/O کی خرابیوں کا پتہ لگاتی ہے۔
XDCR: کراس ڈیٹا سینٹر کی نقل
XDCR Couchbase کی فلیگ شپ ملٹی ریجن ریپلیکیشن ٹیکنالوجی ہے۔ روایتی RDBMS سسٹمز میں پائے جانے والے ڈیٹا بیس کی سطح کی نقل کے برعکس، XDCRبالٹی لیولپر کام کرتا ہے اور آزاد Couchbase کلسٹرز کے درمیان انفرادی دستاویز کی تبدیلیوں کو چلاتا ہے۔ ہر کلسٹر مکمل طور پر خود مختار رہتا ہے - یہ آزادانہ طور پر پڑھنے اور لکھنے کو قبول کر سکتا ہے، XDCR کو ایکٹیو ایکٹیو ملٹی ریجن کی تعیناتیوں کے لیے مثالی بناتا ہے جہاں صارفین کو کسی بھی جغرافیہ سے کم تاخیر تک رسائی کی ضرورت ہوتی ہے۔
یون ڈائریکشنل بمقابلہ دو طرفہ XDCR
Unidirectional XDCRاتپریورتنوں کو ماخذ کلسٹر سے ایک سمت میں ٹارگٹ کلسٹر میں نقل کرتا ہے۔ یہ ڈیزاسٹر ریکوری کے منظرناموں، دور دراز علاقوں میں نقلیں پڑھنے، یا آپریشنل کلسٹر سے اینالیٹکس کلسٹر تک ڈیٹا فیڈ کرنے کے لیے موزوں ہے۔
دو طرفہ XDCRدو کلسٹروں کے درمیان دونوں سمتوں میں نقل کے لنکس بناتا ہے، فعال فعال تعیناتیوں کو فعال کرتا ہے جہاں دونوں کلسٹر رائٹ کو قبول کرتے ہیں۔ یہ سب سے طاقتور کنفیگریشن ہے لیکن تنازعات کے حل کی محتاط منصوبہ بندی کی ضرورت ہے۔
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) کا استعمال کرتا ہے۔ زیادہ نظرثانی کی گنتی کے ساتھ تبدیلی جیت جاتی ہے۔ مفید ہے جب ٹائم اسٹیمپ کی مطابقت پذیری ناقابل اعتبار ہو۔
- کسٹم کنفلکٹ ریزولوشن (انٹرپرائز)— Couchbase انٹرپرائز ایڈیشن حسب ضرورت انضمام کے فنکشنز کو سپورٹ کرتا ہے جو کہ ایپلیکیشن کی مخصوص منطق کے ساتھ تنازعات کو حل کرنے کے لیے سرور سائیڈ 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=HighXDCR فلٹرنگ
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 کی اندرونی ٹوپولوجی کو سمجھتا ہے - یہ ری بیلنس آپریشنز کا انتظام کرتا ہے، رولنگ اپ گریڈ کو مربوط کرتا ہے، سرور گروپ کی آگاہی کو سنبھالتا ہے، اور Couchbase پوڈز کی بہترین جگہ کو یقینی بنانے کے لیے Kubernetes شیڈولنگ پرائمیٹوز کے ساتھ مربوط ہوتا ہے۔
CouchbaseCluster CRD تفصیلات
CouchbaseCluster CRD مرکزی کنفیگریشن ہے جو آپ کی Couchbase تعیناتی کی مطلوبہ حالت کا اعلان کرتی ہے۔ خود مختار آپریٹر اسے اسٹیٹفل سیٹس، سروسز، PVCs، سیکرٹس، اور 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-queryAzure AKS تعیناتی
Azure AKS Couchbase کی I/O ڈیمانڈز کے لیے پریمیم SSD v2 یا Ultra Disk اور Azure پرائیویٹ لنک کو علاقوں کے درمیان محفوظ 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 انجن بیک اپ کے لیے Google Cloud Storage تک محفوظ رسائی کے لیے SSD پرسسٹنٹ ڈسک اور ورک لوڈ آئیڈینٹی کا استعمال کرتا ہے۔
# 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/رنچر لانگ ہارن
کے ساتھان تنظیموں کے لیے جنہیں کلاؤڈ وینڈر لاک ان کے بغیر مکمل انفراسٹرکچر کنٹرول کی ضرورت ہے، رینچر مینجمنٹ اور لانگ ہارن ڈسٹری بیوٹڈ اسٹوریج کے ساتھ ننگی میٹل k3s Couchbase HA کے لیے ایک بہترین بنیاد فراہم کرتی ہے۔ یہ فن تعمیر ریگولیٹڈ صنعتوں، ایج کمپیوٹنگ کے منظرناموں اور لاگت سے متعلق حساس ماحول میں مقبول ہے۔
# 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."Couchbase بیک اپ 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: 3N1QL استفسار پرفارمنس ٹیوننگ
N1QL (JSON کے لیے SQL++) 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 casesTLS انکرپشن اور 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 20971520Kubernetes 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: ClusterIssuerPrometheus ایکسپورٹر
کے ساتھ مانیٹرنگ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— بالٹی میموری کا استعمال۔ بے دخلی کو روکنے کے لیے رام کوٹہ تک پہنچنے پر الرٹ۔
- cb_bucket_cache_miss_ratio— درخواستوں کا تناسب جو کیشے سے محروم ہیں اور ڈسک کی بازیافت کی ضرورت ہے۔ بہترین کارکردگی کے لیے 2% سے نیچے رہنا چاہیے۔
- cb_bucket_disk_queue_items— ڈسک لکھنا قطار کی گہرائی۔ بڑھتی ہوئی قطار اس بات کی نشاندہی کرتی ہے کہ ڈسک I/O تحریری تھروپپٹ کو برقرار نہیں رکھ سکتی۔
- cb_xdcr_changes_left— XDCR نقل کے زیر التواء تغیرات کی تعداد۔ کراس ریجن ریپلیکیشن لیگ کی نشاندہی کرتا ہے۔
- cb_xdcr_docs_written— دستاویزات کو 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 }}"
HAکے لیےSDK کنکشن سٹرنگ کنفیگریشن
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 }}"Couchbase SDKs ٹوپولوجی سے آگاہ ہیں — وہ ایک اندرونی کلسٹر میپ اور روٹ آپریشنز کو براہ راست درست نوڈ تک برقرار رکھتے ہیں۔ مناسب 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 موبائل Couchbase ایکو سسٹم کو ایج ڈیوائسز اور موبائل ایپلیکیشنز تک پھیلاتا ہے۔Couchbase LiteiOS، Android، اور IoT آلات پر سرایت کرتا ہے، جبکہSync GatewayCouchbase 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 (تمام خدمات) | شریک | 4 GB | 20 GB SSD | <1k آپریشنز |
| چھوٹی پیداوار | 3 ڈیٹا | 2 Query+Index | 16 GB | 100 GB SSD | 10k ops/s |
| درمیانی پیداوار | 5 ڈیٹا | 3 Query+Index | 32 GB | 500 GB SSD | 50k ops/s |
| بڑی پیداوار | 7-10 ڈیٹا | 4+ Query+Index | 64 GB | 1 TB NVMe | 200k+ ops/s |
| انٹرپرائز / گلوبل | 10+ ڈیٹا (ملٹی ریجن) | 6+ Query+Index | 128 GB | 2+ TB NVMe | 500k+ ops/s |
سائز سازی فارمولہ
# 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 قدریں
ذیل میں Couchbase کو پیداواری ماحول میں خود مختار آپریٹر کے ساتھ تعینات کرنے کے لیے ایک جامع Helm ویلیوز فائل ہے:
# 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 خودمختار آپریٹر Kubernetes کے لیے پیچیدہ دستی آپریشنز کو اعلانیہ، خود شفا بخش تعیناتیوں میں تبدیل کرتا ہے۔ سرور گروپس ریک/زون کے بارے میں آگاہی فراہم کرتے ہیں، آپریٹر اسکیلنگ ایونٹس کے دوران توازن کی کارروائیوں کا انتظام کرتا ہے، اور مربوط بیک اپ CRDs ڈیزاسٹر ریکوری کی تیاری کو خودکار بناتا ہے۔
اس گائیڈ سے اہم نکات:
- لیوریج ملٹی ڈائمینشنل اسکیلنگ— ڈیٹا، انڈیکس، استفسار، تلاش، تجزیات، اور ایونٹنگ سروسز کو آزاد اسکیلنگ اور وسائل کی تنہائی کے لیے وقف شدہ نوڈ پولز پر الگ کریں۔
- ملٹی ریجن لچککے لیے XDCR کو کنفیگر کریں — ٹائم اسٹیمپ پر مبنی تنازعات کے حل کے ساتھ دو طرفہ XDCR AWS، Azure، اور GCP میں فعال-فعال تعیناتیوں کو قابل بناتا ہے۔ ہمیشہ NTP کی مطابقت پذیری کو یقینی بنائیں۔
- زون کی آگاہی کے لیے سرور گروپس کا استعمال کریں— سرور گروپس کو دستیابی زونز یا ریک کے لیے نقشہ بنائیں اس بات کی ضمانت کے لیے کہ فعال اور ریپلیکا vBuckets مختلف ناکامی والے ڈومینز میں ہیں۔
- سائز میموری احتیاط سے— Couchbase کی کارکردگی براہ راست اس بات سے منسلک ہے کہ ورکنگ سیٹ کا کتنا حصہ RAM میں فٹ بیٹھتا ہے۔ سائز سازی کے فارمولے استعمال کریں اور کیش مس ریشوز کی نگرانی کریں۔
- جامع نگرانیکو نافذ کریں — Prometheus برآمد کنندہ کو پہلے دن سے تعینات کریں۔ XDCR ریپلیکیشن لیگ، کیش مس ریشو، ڈسک کی قطار کی گہرائی، اور نوڈ ہیلتھ آپ کے اہم اشارے ہیں۔
- cbbackupmgrکے ساتھ خودکار بیک اپس — کلاؤڈ اسنیپ شاٹس کے ساتھ مکمل اور اضافی بیک اپ کو یکجا کریں۔ باقاعدگی سے بحالی کے طریقہ کار کی جانچ کریں۔
- TLS اور RBACکے ساتھ محفوظ — نوڈ ٹو نوڈ اور کلائنٹ ٹو نوڈ TLS انکرپشن کو فعال کریں۔ ہر ایپلیکیشن سروس اکاؤنٹ کے لیے عمدہ RBAC رولز استعمال کریں۔
- HAکے لیے SDKs ترتیب دیں — متعدد بوٹسٹریپ نوڈس استعمال کریں، مناسب ٹائم آؤٹ ترتیب دیں، ریپلیکا ریڈز کو فال بیک کے طور پر لاگو کریں، اور اہم ڈیٹا کے لیے پائیدار تحریروں کا فائدہ اٹھائیں۔
- ڈیزاسٹر ریکوری کا منصوبہ— سنگل نوڈ، ملٹی نوڈ، اور مکمل کلسٹر ناکامی کے منظرناموں کے لیے فیل اوور کے طریقہ کار کی دستاویز اور مشق کریں۔ XDCR اسٹینڈ بائی کلسٹرز کو فروغ دینے کے لیے ہر وقت تیار رہنا چاہیے۔
اس جامع فاؤنڈیشن کے ساتھ، آپ Couchbase سرور کو کسی بھی بنیادی ڈھانچے میں اعلیٰ دستیابی کے پیداواری ماحول میں تعینات کرنے اور چلانے کے لیے لیس ہیں- AWS، Azure، اور GCP پر منظم Kubernetes سے لے کر Rancher کے زیر انتظام ننگے دھاتی k3s کلسٹرز تک۔ Kubernetes آرکیسٹریشن کے ساتھ Couchbase کے مقامی تقسیم شدہ فن تعمیر کا مجموعہ ایک ڈیٹا بیس پلیٹ فارم فراہم کرتا ہے جو جدید، عالمی سطح پر تقسیم شدہ ایپلی کیشنز کے تقاضوں کو پورا کرتا ہے۔