کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل

ہم باقاعدگی سے Apache Cassandra ڈیٹا بیس کا سامنا کرتے ہیں اور اسے Kubernetes پر مبنی انفراسٹرکچر کے اندر چلانے کی ضرورت کا سامنا کرتے ہیں۔ اس مواد میں، ہم Cassandra کو K8s میں منتقل کرنے کے لیے ضروری اقدامات، معیارات اور موجودہ حل (بشمول آپریٹرز کا جائزہ) کے بارے میں اپنے وژن کا اشتراک کریں گے۔

"جو عورت پر حکومت کر سکتا ہے وہ ریاست پر بھی حکومت کر سکتا ہے"

کیسینڈرا کون ہے؟ یہ ایک تقسیم شدہ سٹوریج سسٹم ہے جو ڈیٹا کی بڑی مقدار کو منظم کرنے کے لیے ڈیزائن کیا گیا ہے جبکہ ناکامی کے ایک نقطہ کے بغیر اعلیٰ دستیابی کو یقینی بناتا ہے۔ پروجیکٹ کو شاید ہی ایک طویل تعارف کی ضرورت ہے، لہذا میں صرف کیسنڈرا کی اہم خصوصیات پیش کروں گا جو ایک مخصوص مضمون کے تناظر میں متعلقہ ہوں گے:

  • کیسینڈرا جاوا میں لکھا جاتا ہے۔
  • کیسینڈرا ٹوپولوجی میں کئی سطحیں شامل ہیں:
    • نوڈ - ایک تعینات کیسینڈرا مثال؛
    • ریک کیسینڈرا مثالوں کا ایک گروپ ہے، جو کچھ خصوصیت سے متحد ہے، ایک ہی ڈیٹا سینٹر میں واقع ہے۔
    • ڈیٹا سینٹر - ایک ڈیٹا سینٹر میں واقع کیسنڈرا مثالوں کے تمام گروپوں کا مجموعہ؛
    • کلسٹر تمام ڈیٹا سینٹرز کا مجموعہ ہے۔
  • کیسینڈرا نوڈ کی شناخت کے لیے ایک IP ایڈریس استعمال کرتی ہے۔
  • لکھنے اور پڑھنے کے کاموں کو تیز کرنے کے لیے، کیسینڈرا کچھ ڈیٹا کو RAM میں محفوظ کرتی ہے۔

اب - کوبرنیٹس کی اصل ممکنہ منتقلی کی طرف۔

منتقلی کے لیے چیک لسٹ

کیسینڈرا کی کوبرنیٹس کی طرف ہجرت کے بارے میں بات کرتے ہوئے، ہم امید کرتے ہیں کہ اس اقدام سے اس کا انتظام کرنا زیادہ آسان ہو جائے گا۔ اس کے لیے کیا ضرورت ہوگی، اس میں کیا مدد ملے گی؟

1. ڈیٹا اسٹوریج

جیسا کہ پہلے ہی واضح کیا جا چکا ہے، کیسنڈا ڈیٹا کا کچھ حصہ RAM-in میں محفوظ کرتی ہے۔ میٹ ایبل. لیکن ڈیٹا کا ایک اور حصہ ہے جو ڈسک میں محفوظ کیا جاتا ہے - فارم میں ایس ایس ٹی ایبل. اس ڈیٹا میں ایک ہستی شامل کی جاتی ہے۔ کمٹ لاگ - تمام لین دین کا ریکارڈ، جو ڈسک میں بھی محفوظ کیا جاتا ہے۔

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل
کیسنڈرا میں لین دین کا خاکہ لکھیں۔

Kubernetes میں، ہم ڈیٹا کو ذخیرہ کرنے کے لیے PersistentVolume استعمال کر سکتے ہیں۔ ثابت شدہ میکانزم کی بدولت، Kubernetes میں ڈیٹا کے ساتھ کام کرنا ہر سال آسان ہوتا جا رہا ہے۔

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل
ہم ہر کیسینڈرا پوڈ کے لیے اپنا پرسسٹنٹ والیوم مختص کریں گے۔

یہ نوٹ کرنا ضروری ہے کہ کیسینڈرا خود ڈیٹا کی نقل تیار کرتی ہے، اس کے لیے بلٹ ان میکانزم پیش کرتی ہے۔ لہذا، اگر آپ بڑی تعداد میں نوڈس سے کیسینڈرا کلسٹر بنا رہے ہیں، تو ڈیٹا سٹوریج کے لیے Ceph یا GlusterFS جیسے تقسیم شدہ نظام استعمال کرنے کی ضرورت نہیں ہے۔ اس صورت میں، ہوسٹ ڈسک کا استعمال کرتے ہوئے ڈیٹا کو ذخیرہ کرنا منطقی ہوگا۔ مقامی مسلسل ڈسک یا بڑھتے ہوئے hostPath.

ایک اور سوال یہ ہے کہ کیا آپ ہر فیچر برانچ کے لیے ڈویلپرز کے لیے الگ ماحول بنانا چاہتے ہیں۔ اس صورت میں، صحیح طریقہ یہ ہوگا کہ ایک کیسینڈرا نوڈ کو بڑھایا جائے اور ڈیٹا کو تقسیم شدہ اسٹوریج میں اسٹور کیا جائے، یعنی ذکر کردہ Ceph اور GlusterFS آپ کے اختیارات ہوں گے۔ تب ڈویلپر اس بات کا یقین کر لے گا کہ وہ ٹیسٹ ڈیٹا سے محروم نہیں ہوگا چاہے کبرنٹس کلسٹر نوڈس میں سے کوئی ایک کھو جائے۔

2. نگرانی

Kubernetes میں نگرانی کو نافذ کرنے کے لیے عملی طور پر بلا مقابلہ انتخاب Prometheus ہے۔ (ہم نے اس کے بارے میں تفصیل سے بات کی ہے۔ متعلقہ رپورٹ). کیسینڈرا پرومیتھیس کے لیے میٹرکس ایکسپورٹرز کے ساتھ کیسا کر رہی ہے؟ اور، گرافانا کے لیے مماثل ڈیش بورڈز کے ساتھ، اس سے بھی زیادہ اہم کیا ہے؟

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل
کیسینڈرا کے لئے گرافانا میں گراف کی ظاہری شکل کی ایک مثال

صرف دو برآمد کنندگان ہیں: jmx_exporter и cassandra_exporter.

ہم نے اپنے لیے پہلا انتخاب کیا کیونکہ:

  1. JMX ایکسپورٹر بڑھ رہا ہے اور ترقی کر رہا ہے، جبکہ کیسینڈرا ایکسپورٹر کو کمیونٹی کی خاطر خواہ تعاون حاصل نہیں ہو سکا ہے۔ کیسینڈرا ایکسپورٹر اب بھی کیسینڈرا کے زیادہ تر ورژن کو سپورٹ نہیں کرتا ہے۔
  2. آپ اسے ایک جھنڈا شامل کرکے جاوا ایجنٹ کے طور پر چلا سکتے ہیں۔ -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. اس کے لیے ایک ہے۔ مناسب ڈیش بورڈ، جو Cassandra Exporter کے ساتھ مطابقت نہیں رکھتا ہے۔

3. Kubernetes primitives کو منتخب کرنا

کیسینڈرا کلسٹر کی مندرجہ بالا ساخت کے مطابق، آئیے ہر اس چیز کا ترجمہ کرنے کی کوشش کریں جو وہاں بیان کی گئی ہے Kubernetes اصطلاحات میں:

  • کیسینڈرا نوڈ → پوڈ
  • کیسینڈرا ریک → اسٹیٹفل سیٹ
  • سٹیٹ فل سیٹس سے کیسینڈرا ڈیٹا سینٹر → پول
  • کیسینڈرا کلسٹر → ???

یہ پتہ چلتا ہے کہ ایک بار میں پورے کیسینڈرا کلسٹر کو منظم کرنے کے لئے کچھ اضافی ادارہ غائب ہے۔ لیکن اگر کوئی چیز موجود نہیں ہے تو ہم اسے بنا سکتے ہیں! Kubernetes کے پاس اس مقصد کے لیے اپنے وسائل کی وضاحت کا ایک طریقہ کار ہے۔ حسب ضرورت وسائل کی تعریفیں.

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل
نوشتہ جات اور انتباہات کے لیے اضافی وسائل کا اعلان کرنا

لیکن حسب ضرورت وسائل کا خود کوئی مطلب نہیں ہے: آخرکار، اس کی ضرورت ہے۔ کنٹرولر. آپ کو مدد لینے کی ضرورت پڑ سکتی ہے۔ Kubernetes آپریٹر...

4. پھلیوں کی شناخت

اوپر والے پیراگراف میں، ہم نے اتفاق کیا کہ ایک کیسینڈرا نوڈ Kubernetes میں ایک پوڈ کے برابر ہوگا۔ لیکن پوڈز کے IP ایڈریس ہر بار مختلف ہوں گے۔ اور کیسینڈرا میں نوڈ کی شناخت آئی پی ایڈریس پر مبنی ہے... یہ پتہ چلتا ہے کہ پوڈ کو ہٹانے کے بعد، کیسینڈرا کلسٹر ایک نیا نوڈ شامل کرے گا۔

باہر نکلنے کا ایک راستہ ہے، اور صرف ایک نہیں:

  1. ہم میزبان شناخت کنندگان (UUIDs جو منفرد طور پر کیسینڈرا مثالوں کی شناخت کرتے ہیں) یا IP پتوں کے ذریعے ریکارڈ رکھ سکتے ہیں اور یہ سب کچھ ڈھانچے/ٹیبلز میں محفوظ کر سکتے ہیں۔ طریقہ کار کے دو اہم نقصانات ہیں:
    • اگر دو نوڈس ایک ساتھ گر جائیں تو ریس کی حالت کا خطرہ۔ عروج کے بعد، کیسینڈرا نوڈس بیک وقت ٹیبل سے آئی پی ایڈریس کی درخواست کریں گے اور اسی وسائل کے لیے مقابلہ کریں گے۔
    • اگر کیسینڈرا نوڈ نے اپنا ڈیٹا کھو دیا ہے، تو ہم اس کی مزید شناخت نہیں کر سکیں گے۔
  2. دوسرا حل ایک چھوٹی ہیک کی طرح لگتا ہے، لیکن اس کے باوجود: ہم ہر Cassandra نوڈ کے لیے ClusterIP کے ساتھ ایک سروس بنا سکتے ہیں۔ اس عمل درآمد کے ساتھ مسائل:
    • اگر کیسینڈرا کلسٹر میں بہت سارے نوڈس ہیں، تو ہمیں بہت ساری سروسز بنانا ہوں گی۔
    • کلسٹر آئی پی کی خصوصیت iptables کے ذریعے لاگو ہوتی ہے۔ یہ ایک مسئلہ بن سکتا ہے اگر کیسینڈرا کلسٹر میں بہت سے (1000... یا 100؟) نوڈس ہوں۔ اگرچہ IPVS پر مبنی توازن اس مسئلے کو حل کر سکتے ہیں۔
  3. تیسرا حل یہ ہے کہ سیٹنگ کو فعال کرکے پوڈز کے وقف شدہ نیٹ ورک کی بجائے کیسنڈرا نوڈس کے لیے نوڈس کا نیٹ ورک استعمال کیا جائے۔ hostNetwork: true. یہ طریقہ کچھ پابندیاں عائد کرتا ہے:
    • یونٹس کو تبدیل کرنے کے لئے. یہ ضروری ہے کہ نئے نوڈ کا وہی IP ایڈریس ہونا چاہیے جو پچھلے ایک کا ہو (بادلوں جیسے AWS، GCP میں ایسا کرنا تقریباً ناممکن ہے)؛
    • کلسٹر نوڈس کے نیٹ ورک کا استعمال کرتے ہوئے، ہم نیٹ ورک کے وسائل کے لیے مقابلہ کرنا شروع کر دیتے ہیں۔ لہذا، ایک کلسٹر نوڈ پر کیسینڈرا کے ساتھ ایک سے زیادہ پوڈ رکھنا مشکل ہوگا۔

5. بیک اپ

ہم ایک شیڈول پر ایک کیسینڈرا نوڈ کے ڈیٹا کا مکمل ورژن محفوظ کرنا چاہتے ہیں۔ Kubernetes استعمال کرتے ہوئے ایک آسان خصوصیت فراہم کرتا ہے۔ کرون جاب، لیکن یہاں کیسینڈرا خود ہمارے پہیوں میں ایک بات ڈالتی ہے۔

میں آپ کو یاد دلاتا ہوں کہ کیسینڈرا کچھ ڈیٹا کو میموری میں محفوظ کرتی ہے۔ مکمل بیک اپ بنانے کے لیے، آپ کو میموری سے ڈیٹا کی ضرورت ہے (یادداشتیں) ڈسک پر منتقل کریں (ایس ایس ٹیبلز)۔ اس مقام پر، کیسینڈرا نوڈ کنکشن کو قبول کرنا بند کر دیتا ہے، کلسٹر سے مکمل طور پر بند ہو جاتا ہے۔

اس کے بعد، بیک اپ ہٹا دیا جاتا ہے (سنیپ شاٹ) اور اسکیم محفوظ ہوگئی (کی اسپیس)۔ اور پھر یہ پتہ چلتا ہے کہ صرف ایک بیک اپ ہمیں کچھ نہیں دیتا: ہمیں ڈیٹا شناخت کنندگان کو بچانے کی ضرورت ہے جس کے لئے کیسینڈرا نوڈ ذمہ دار تھا - یہ خصوصی ٹوکن ہیں۔

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل
کیسینڈرا نوڈس کس ڈیٹا کے ذمہ دار ہیں اس کی نشاندہی کرنے کے لیے ٹوکنز کی تقسیم

Kubernetes میں گوگل سے کیسینڈرا بیک اپ لینے کی ایک مثال اسکرپٹ پر مل سکتی ہے۔ اس لنک. واحد نکتہ جسے اسکرپٹ ذہن میں نہیں رکھتا ہے وہ اسنیپ شاٹ لینے سے پہلے ڈیٹا کو نوڈ پر ری سیٹ کرنا ہے۔ یعنی بیک اپ موجودہ حالت کے لیے نہیں بلکہ تھوڑی پہلے والی حالت کے لیے انجام دیا جاتا ہے۔ لیکن اس سے نوڈ کو آپریشن سے باہر نہ لینے میں مدد ملتی ہے، جو بہت منطقی معلوم ہوتا ہے۔

set -eu

if [[ -z "$1" ]]; then
  info "Please provide a keyspace"
  exit 1
fi

KEYSPACE="$1"

result=$(nodetool snapshot "${KEYSPACE}")

if [[ $? -ne 0 ]]; then
  echo "Error while making snapshot"
  exit 1
fi

timestamp=$(echo "$result" | awk '/Snapshot directory: / { print $3 }')

mkdir -p /tmp/backup

for path in $(find "/var/lib/cassandra/data/${KEYSPACE}" -name $timestamp); do
  table=$(echo "${path}" | awk -F "[/-]" '{print $7}')
  mkdir /tmp/backup/$table
  mv $path /tmp/backup/$table
done


tar -zcf /tmp/backup.tar.gz -C /tmp/backup .

nodetool clearsnapshot "${KEYSPACE}"

ایک کیسنڈرا نوڈ سے بیک اپ لینے کے لیے باش اسکرپٹ کی ایک مثال

Kubernetes میں Cassandra کے لیے تیار حل

فی الحال کبرنیٹس میں کیسینڈرا کو تعینات کرنے کے لیے کیا استعمال کیا جاتا ہے اور ان میں سے کون دی گئی ضروریات کے مطابق ہے؟

1. اسٹیٹفول سیٹ یا ہیلم چارٹس پر مبنی حل

Cassandra کلسٹر کو چلانے کے لیے بنیادی StatefulSets فنکشنز کا استعمال ایک اچھا آپشن ہے۔ ہیلم چارٹ اور گو ٹیمپلیٹس کا استعمال کرتے ہوئے، آپ صارف کو کیسینڈرا کی تعیناتی کے لیے ایک لچکدار انٹرفیس فراہم کر سکتے ہیں۔

یہ عام طور پر ٹھیک کام کرتا ہے... جب تک کہ کچھ غیر متوقع نہ ہو، جیسے کہ نوڈ کی ناکامی۔ معیاری Kubernetes ٹولز صرف اوپر بیان کردہ تمام خصوصیات کو مدنظر نہیں رکھ سکتے ہیں۔ مزید برآں، یہ نقطہ نظر بہت محدود ہے کہ اسے مزید پیچیدہ استعمال کے لیے کتنا بڑھایا جا سکتا ہے: نوڈ کی تبدیلی، بیک اپ، بحالی، نگرانی، وغیرہ۔

نمائندے:

دونوں چارٹ یکساں طور پر اچھے ہیں، لیکن اوپر بیان کردہ مسائل کے تابع ہیں۔

2. Kubernetes آپریٹر پر مبنی حل

اس طرح کے اختیارات زیادہ دلچسپ ہیں کیونکہ وہ کلسٹر کے انتظام کے لیے کافی مواقع فراہم کرتے ہیں۔ کیسینڈرا آپریٹر کو ڈیزائن کرنے کے لیے، کسی دوسرے ڈیٹا بیس کی طرح، ایک اچھا نمونہ Sidecar <-> Controller <-> CRD کی طرح لگتا ہے:

کیسینڈرا کی کوبرنیٹس میں منتقلی: خصوصیات اور حل
ایک اچھی طرح سے ڈیزائن کردہ کیسینڈرا آپریٹر میں نوڈ مینجمنٹ اسکیم

آئیے موجودہ آپریٹرز کو دیکھیں۔

1. instaclust سے کیسینڈرا آپریٹر

  • GitHub کے
  • تیاری: الفا
  • لائسنس: اپاچی 2.0
  • اس میں لاگو کیا گیا: Java

یہ واقعی ایک ایسی کمپنی کی طرف سے ایک بہت ہی امید افزا اور فعال طور پر ترقی پذیر پروجیکٹ ہے جو منظم کیسینڈرا کی تعیناتی پیش کرتا ہے۔ یہ، جیسا کہ اوپر بیان کیا گیا ہے، ایک سائڈ کار کنٹینر استعمال کرتا ہے جو HTTP کے ذریعے کمانڈ قبول کرتا ہے۔ جاوا میں لکھا گیا، اس میں بعض اوقات کلائنٹ گو لائبریری کی زیادہ جدید فعالیت کا فقدان ہوتا ہے۔ نیز، آپریٹر ایک ڈیٹا سینٹر کے لیے مختلف ریک کی حمایت نہیں کرتا ہے۔

لیکن آپریٹر کے پاس ایسے فوائد ہیں جیسے نگرانی کے لیے معاونت، CRD کا استعمال کرتے ہوئے اعلیٰ سطحی کلسٹر مینجمنٹ، اور یہاں تک کہ بیک اپ بنانے کے لیے دستاویزات۔

2. Jetstack سے نیویگیٹر

  • GitHub کے
  • تیاری: الفا
  • لائسنس: اپاچی 2.0
  • میں نافذ: گولانگ

DB-as-a-Service کو تعینات کرنے کے لیے ڈیزائن کردہ ایک بیان۔ فی الحال دو ڈیٹا بیس کی حمایت کرتا ہے: Elasticsearch اور Cassandra۔ اس کے پاس RBAC کے ذریعے ڈیٹا بیس تک رسائی کے کنٹرول جیسے دلچسپ حل ہیں (اس کے لیے اس کا اپنا الگ نیویگیٹر-اپیسرور ہے)۔ ایک دلچسپ منصوبہ جس کو قریب سے دیکھنے کے قابل ہو گا، لیکن آخری کمٹ ڈیڑھ سال پہلے کی گئی تھی، جس سے اس کی صلاحیت واضح طور پر کم ہو جاتی ہے۔

3. Cassandra-آپریٹر بذریعہ vgkowski

  • GitHub کے
  • تیاری: الفا
  • لائسنس: اپاچی 2.0
  • میں نافذ: گولانگ

انہوں نے اس پر "سنجیدگی سے" غور نہیں کیا، کیونکہ ذخیرے کا آخری عہد ایک سال سے زیادہ پہلے تھا۔ آپریٹر کی ترقی کو ترک کر دیا گیا ہے: Kubernetes کا تازہ ترین ورژن 1.9 کی حمایت یافتہ کے طور پر رپورٹ کیا گیا ہے۔

4. کیسینڈرا آپریٹر بذریعہ روک

  • GitHub کے
  • تیاری: الفا
  • لائسنس: اپاچی 2.0
  • میں نافذ: گولانگ

ایک آپریٹر جس کی ترقی اتنی تیزی سے نہیں ہورہی ہے جتنی ہم چاہتے ہیں۔ اس میں کلسٹر مینجمنٹ کے لیے ایک اچھی طرح سے سوچا ہوا CRD ڈھانچہ ہے، ClusterIP (وہی "ہیک") کے ساتھ سروس کا استعمال کرتے ہوئے نوڈس کی شناخت کا مسئلہ حل کرتا ہے... لیکن ابھی کے لیے بس اتنا ہی ہے۔ فی الحال کوئی مانیٹرنگ یا بیک اپ آؤٹ آف دی باکس نہیں ہے (ویسے، ہم نگرانی کے لیے ہیں۔ اسے خود لیا)۔ ایک دلچسپ بات یہ ہے کہ آپ اس آپریٹر کا استعمال کرتے ہوئے ScyllaDB کو بھی تعینات کر سکتے ہیں۔

نوٹ: ہم نے اس آپریٹر کو اپنے ایک پروجیکٹ میں معمولی ترمیم کے ساتھ استعمال کیا۔ آپریشن کی پوری مدت (4 ماہ کے آپریشن) کے دوران آپریٹر کے کام میں کوئی مسئلہ نہیں دیکھا گیا۔

5. اورنج سے CassKop

  • GitHub کے
  • تیاری: الفا
  • لائسنس: اپاچی 2.0
  • میں نافذ: گولانگ

فہرست میں سب سے کم عمر آپریٹر: پہلی کمٹ 23 مئی 2019 کو کی گئی تھی۔ پہلے سے ہی اب اس کے ہتھیاروں میں ہماری فہرست میں سے بہت ساری خصوصیات موجود ہیں، جن کی مزید تفصیلات پروجیکٹ کے ذخیرے میں مل سکتی ہیں۔ آپریٹر مقبول آپریٹر-sdk کی بنیاد پر بنایا گیا ہے۔ باکس سے باہر کی نگرانی کی حمایت کرتا ہے. دوسرے آپریٹرز سے بنیادی فرق استعمال ہے۔ CassKop پلگ انPython میں لاگو کیا جاتا ہے اور Cassandra نوڈس کے درمیان رابطے کے لیے استعمال ہوتا ہے۔

نتائج

کیسینڈرا کو کبرنیٹس تک پہنچانے کے طریقوں اور ممکنہ اختیارات کی تعداد خود ہی بولتی ہے: موضوع کی طلب ہے۔

اس مرحلے پر، آپ مندرجہ بالا میں سے کسی کو بھی اپنے خطرے اور خطرے پر آزما سکتے ہیں: ڈویلپرز میں سے کوئی بھی پیداواری ماحول میں اپنے حل کے 100% آپریشن کی ضمانت نہیں دیتا ہے۔ لیکن پہلے سے ہی، بہت ساری مصنوعات ترقیاتی بنچوں میں استعمال کرنے کی کوشش کرنے کا وعدہ کرتی نظر آتی ہیں۔

مجھے لگتا ہے کہ مستقبل میں جہاز پر موجود یہ عورت کام آئے گی!

PS

ہمارے بلاگ پر بھی پڑھیں:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں