اسان باقاعدي طور تي Apache Cassandra ڊيٽابيس ۽ ان کي ڪم ڪرڻ جي ضرورت سان منهن ڏيون ٿا ڪبرنيٽس جي بنياد تي انفراسٽرڪچر. هن مواد ۾، اسان Cassandra کان K8s ڏانهن لڏپلاڻ لاءِ ضروري قدمن، معيارن ۽ موجوده حلن (بشمول آپريٽرن جو جائزو) بابت اسان جي نظريي کي شيئر ڪنداسين.
”جيڪو عورت تي حڪومت ڪري سگهي ٿو اهو رياست تي به حڪومت ڪري سگهي ٿو“
Cassandra ڪير آهي؟ اهو هڪ ورهايل اسٽوريج سسٽم آهي جيڪو ڊيٽا جي وڏي مقدار کي منظم ڪرڻ لاءِ ٺهيل آهي جڏهن ته ناڪامي جي هڪ نقطي کان سواءِ اعليٰ دستيابي کي يقيني بڻائي ٿي. پروجيڪٽ کي مشڪل سان هڪ ڊگهي تعارف جي ضرورت آهي، تنهنڪري مان صرف Cassandra جي مکيه خاصيتون ڏيندس جيڪي هڪ خاص مضمون جي حوالي سان لاڳاپيل هوندا:
Cassandra جاوا ۾ لکيل آهي.
Cassandra ٽوپولوجي ۾ ڪيترن ئي سطحن تي مشتمل آهي:
نوڊ - ھڪڙي ترتيب ڏنل Cassandra مثال؛
ريڪ Cassandra مثالن جو هڪ گروپ آهي، جيڪو ڪجهه خاصيتن سان متحد آهي، ساڳئي ڊيٽا سينٽر ۾ واقع آهي.
Datacenter - هڪ ڊيٽا سينٽر ۾ واقع Cassandra مثالن جي سڀني گروپن جو مجموعو؛
ڪلستر سڀني ڊيٽا سينٽرن جو هڪ مجموعو آهي.
Cassandra هڪ IP پتو استعمال ڪري ٿو هڪ نوڊ جي سڃاڻپ ڪرڻ لاء.
لکڻ ۽ پڙهڻ جي عملن کي تيز ڪرڻ لاءِ، ڪئاسندرا ڪجهه ڊيٽا کي رام ۾ محفوظ ڪري ٿو.
ھاڻي - ڪبرنيٽس ڏانھن حقيقي امڪاني منتقل ڪرڻ لاء.
منتقلي لاءِ چيڪ لسٽ
ڪاسندرا جي لڏپلاڻ بابت ڪبرنيٽس جي باري ۾ ڳالهائيندي، اسان کي اميد آهي ته منتقل ٿيڻ سان ان کي منظم ڪرڻ لاء وڌيڪ آسان ٿيندو. ان لاءِ ڪهڙي ضرورت پوندي، ان ۾ ڪهڙي مدد ملندي؟
Kubernetes ۾، اسان ڊيٽا کي ذخيرو ڪرڻ لاء PersistentVolume استعمال ڪري سگھون ٿا. ثابت ڪيل ميڪانيزم جي مهرباني، ڪبرنيٽس ۾ ڊيٽا سان ڪم ڪرڻ هر سال آسان ٿي رهيو آهي.
Cassandra ڪلستر جي مٿين ساخت جي مطابق، اچو ته هر شي کي ترجمو ڪرڻ جي ڪوشش ڪريون جيڪي اتي بيان ڪيل آهن ڪبرنيٽس اصطلاحات ۾:
Cassandra Node → Pod
Cassandra ريڪ → StatefulSet
Cassandra Datacenter → Pool from StatefulSets
Cassandra ڪلستر → ؟؟؟
اهو ظاهر ٿئي ٿو ته ڪجهه اضافي ادارو غائب آهي هڪ ڀيرو سڄي Cassandra ڪلستر کي منظم ڪرڻ لاء. پر جيڪڏهن ڪا شيء موجود ناهي، اسان ان کي ٺاهي سگهون ٿا! ڪبرنيٽس وٽ هن مقصد لاءِ پنهنجي وسيلن جي وضاحت لاءِ هڪ ميکانيزم آهي. حسب ضرورت وسيلن جي وصف.
لاگ ۽ الرٽ لاء اضافي وسيلن جو اعلان
پر ڪسٽم ريسورس پاڻ کي ڪجھ به نه مطلب آهي: سڀ کان پوء، ان جي ضرورت آهي ڪنٽرولر. توھان کي شايد مدد طلب ڪرڻ جي ضرورت پوندي ڪبرنيٽس آپريٽر...
4. پوڊ جي سڃاڻپ
مٿين پيراگراف ۾، اسان اتفاق ڪيو ته هڪ ڪئاسندرا نوڊ ڪبرنيٽس ۾ هڪ پوڊ جي برابر هوندو. پر پوڊ جا IP پتي هر ڀيري مختلف هوندا. ۽ Cassandra ۾ هڪ نوڊ جي سڃاڻپ IP پتي تي ٻڌل آهي ... اهو ظاهر ٿئي ٿو ته هر هڪ پوڊ کي هٽائڻ کان پوء، Cassandra ڪلستر هڪ نئون نوڊ شامل ڪندو.
اتي ھڪڙو رستو آھي، ۽ صرف ھڪڙو نه آھي:
اسان رڪارڊ رکي سگھون ٿا ميزبان جي سڃاڻپ ڪندڙ (UUIDs جيڪي منفرد طور تي Cassandra مثالن جي سڃاڻپ ڪن ٿا) يا IP پتي ذريعي ۽ اهو سڀ ڪجهه ڪجهه جوڙجڪ/ٽيبلز ۾ محفوظ ڪري سگهون ٿا. هن طريقي جا ٻه مکيه نقصان آهن:
هڪ نسل جي حالت جو خطرو جيڪڏهن ٻه نوڊس هڪ ئي وقت ۾ گر ٿي وڃن. اڀار کان پوء، Cassandra نوڊس هڪ ئي وقت ٽيبل مان هڪ IP پتي جي درخواست ڪندو ۽ ساڳئي وسيلن لاء مقابلو ڪندو.
جيڪڏهن هڪ Cassandra نوڊ پنهنجي ڊيٽا وڃائي ڇڏيو آهي، اسان ان کي وڌيڪ سڃاڻڻ جي قابل نه هوندا.
ٻيو حل هڪ ننڍڙو هيڪ وانگر لڳي ٿو، پر ان جي باوجود: اسان هر Cassandra نوڊ لاء ClusterIP سان هڪ خدمت ٺاهي سگهون ٿا. هن عمل سان مسئلا:
جيڪڏهن ڪيسينڊرا ڪلستر ۾ ڪيترائي نوڊس آهن، اسان کي تمام گهڻيون خدمتون ٺاهڻ گهرجن.
ClusterIP خصوصيت iptables ذريعي لاڳو ڪئي وئي آهي. اهو هڪ مسئلو ٿي سگهي ٿو جيڪڏهن Cassandra ڪلستر ۾ ڪيترائي (1000 ... يا 100؟) نوڊس آهن. جيتوڻيڪ IPVS جي بنياد تي توازن هن مسئلي کي حل ڪري سگهي ٿو.
ٽيون حل اهو آهي ته سيٽنگ کي فعال ڪندي پوڊس جي وقف ٿيل نيٽ ورڪ جي بدران ڪيسندرا نوڊس لاءِ نوڊس جو نيٽ ورڪ استعمال ڪيو وڃي. hostNetwork: true. اهو طريقو ڪجهه حدن کي لاڳو ڪري ٿو:
يونٽن کي تبديل ڪرڻ لاء. اهو ضروري آهي ته نئين نوڊ کي ساڳيو IP پتو هجڻ گهرجي جيئن اڳئين هڪ (بادل جهڙوڪ AWS، GCP ۾ اهو ڪرڻ تقريبا ناممڪن آهي)؛
ڪلستر نوڊس جي نيٽ ورڪ کي استعمال ڪندي، اسان نيٽ ورڪ وسيلن لاء مقابلو ڪرڻ شروع ڪيو. تنهن ڪري، هڪ ڪلستر نوڊ تي Cassandra سان هڪ کان وڌيڪ پوڊ رکڻ مشڪل ٿي ويندو.
5. بيڪ اپ
اسان هڪ شيڊول تي هڪ واحد Cassandra نوڊ جي ڊيٽا جو مڪمل نسخو محفوظ ڪرڻ چاهيون ٿا. Kubernetes استعمال ڪندي هڪ آسان خصوصيت مهيا ڪري ٿي ڪرون جاب، پر هتي ڪئسندرا پاڻ اسان جي ڦيٿي ۾ هڪ ڳالهه رکي ٿي.
مون کي توهان کي ياد ڏياريو ته Cassandra ڪجهه ڊيٽا کي ميموري ۾ محفوظ ڪري ٿو. مڪمل بيڪ اپ ڪرڻ لاءِ، توھان کي ميموري مان ڊيٽا جي ضرورت آھي (يادگار) ڊسڪ ڏانهن منتقل (SSTables). هن نقطي تي، Cassandra نوڊ ڪنيڪشن کي قبول ڪرڻ بند ڪري ٿو، مڪمل طور تي ڪلستر کان بند ڪري ٿو.
ان کان پوء، بيڪ اپ هٽايو ويو آهي (اسپيڊ شاٽ) ۽ اسڪيم بچايو ويو (ڪي اسپيس). ۽ پوء اهو ظاهر ٿئي ٿو ته صرف هڪ بيڪ اپ اسان کي ڪجهه به نه ڏيندو آهي: اسان کي ڊيٽا جي سڃاڻپ ڪندڙ کي بچائڻ جي ضرورت آهي جنهن لاء Cassandra نوڊ ذميوار هو - اهي خاص ٽوڪن آهن.
ٽوڪن جي ورڇ سڃاڻڻ لاءِ ته ڪھڙي ڊيٽا ڪيسندرا نوڊس جا ذميوار آھن
ڪبرنيٽس ۾ گوگل کان ڪئاسندرا بيڪ اپ وٺڻ لاءِ هڪ مثال اسڪرپٽ ملي سگهي ٿو هي ڪڙي. صرف هڪ نقطو جيڪو اسڪرپٽ اڪائونٽ ۾ نٿو رکي، سنيپ شاٽ وٺڻ کان پهريان نوڊ ڏانهن ڊيٽا کي ري سيٽ ڪرڻ آهي. اهو آهي، بيڪ اپ موجوده رياست لاء نه، پر هڪ رياست لاء ٿورو اڳ ڪيو ويو آهي. پر هي مدد ڪري ٿو نوڊ کي آپريشن کان ٻاهر نه وٺي، جيڪو تمام منطقي لڳي ٿو.
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. StatefulSet يا Helm چارٽ جي بنياد تي حل
Cassandra ڪلستر کي هلائڻ لاءِ بنيادي StatefulSets افعال استعمال ڪرڻ سٺو اختيار آھي. هيلم چارٽ ۽ گو ٽيمپليٽس استعمال ڪندي، توهان استعمال ڪندڙ کي مهيا ڪري سگهو ٿا هڪ لچڪدار انٽرفيس سان Cassandra کي ترتيب ڏيڻ لاءِ.
اهو عام طور تي ٺيڪ ڪم ڪري ٿو ... جيستائين ڪجهه غير متوقع ٿئي ٿو، جهڙوڪ نوڊ ناڪامي. معياري Kubernetes اوزار صرف مٿي بيان ڪيل سڀني خاصيتن کي حساب ۾ نٿا وٺي سگهن. اضافي طور تي، اهو طريقو تمام محدود آهي ان ۾ ڪيترو وڌائي سگهجي ٿو وڌيڪ پيچيده استعمالن لاءِ: نوڊ متبادل، بيڪ اپ، وصولي، نگراني، وغيره.
ڊي بي-جي-هڪ-سروس کي ترتيب ڏيڻ لاءِ ٺهيل بيان. في الحال ٻن ڊيٽابيس کي سپورٽ ڪري ٿو: Elasticsearch ۽ Cassandra. ان وٽ اهڙا دلچسپ حل آهن جيئن RBAC ذريعي ڊيٽابيس تائين رسائي ڪنٽرول (ان لاءِ ان جو پنهنجو الڳ نيويگيٽر-اپيسرور آهي). هڪ دلچسپ منصوبو جيڪو هڪ ويجهي نظر وٺڻ جي قابل هوندو، پر آخري انجام هڪ اڌ سال اڳ ڪيو ويو، جيڪو واضح طور تي ان جي صلاحيت کي گهٽائي ٿو.
هڪ آپريٽر جنهن جي ترقي ترقي نه ٿي رهي آهي جيترو جلدي اسان چاهيون ٿا. ان ۾ ڪلستر مينيجمينٽ لاءِ چڱي طرح سوچيل CRD ڍانچو آهي، ڪلسٽر آءِ پي سان سروس استعمال ڪندي نوڊس جي سڃاڻپ جو مسئلو حل ڪري ٿو (ساڳي ”هيڪ“)... پر اهو سڀ ڪجهه هاڻي لاءِ آهي. في الحال ڪوبه مانيٽرنگ يا بيڪ اپ نه آهي دٻي مان (رستي سان، اسان مانيٽرنگ لاءِ آهيون پاڻ ورتو). هڪ دلچسپ نقطو اهو آهي ته توهان هن آپريٽر کي استعمال ڪندي ScyllaDB پڻ ترتيب ڏئي سگهو ٿا.
NB: اسان هن آپريٽر کي اسان جي منصوبن مان هڪ ۾ معمولي ترميمن سان استعمال ڪيو. آپريشن جي پوري عرصي دوران آپريٽر جي ڪم ۾ ڪو به مسئلو محسوس نه ڪيو ويو (4 مھينن جي آپريشن).
لسٽ تي سڀ کان ننڍو آپريٽر: پهريون ڪم 23 مئي 2019 تي ڪيو ويو. اڳ ۾ ئي هاڻي ان جي هٿيارن ۾ اسان جي فهرست مان خاصيتون جو هڪ وڏو تعداد آهي، جنهن جا وڌيڪ تفصيل پروجيڪٽ جي مخزن ۾ ملي ڪري سگهجي ٿو. آپريٽر جي بنياد تي ٺهيل آهي مشهور آپريٽر-sdk. باڪس مان ٻاهر جي نگراني کي سپورٽ ڪري ٿو. ٻين آپريٽرز کان بنيادي فرق استعمال آهي CassKop پلگ ان، پٿون ۾ لاڳو ڪيو ويو ۽ Cassandra نوڊس جي وچ ۾ رابطي لاءِ استعمال ڪيو ويو.
پهچڻ
ڪئاسندرا کي ڪبرنيٽس تائين پهچائڻ لاء طريقن ۽ ممڪن اختيارن جو تعداد پاڻ لاء ڳالهائيندو آهي: موضوع طلب ۾ آهي.
هن اسٽيج تي، توهان مٿين مان ڪنهن به ڪوشش ڪري سگهو ٿا پنهنجي خطري ۽ خطري تي: ڊولپرز مان ڪو به ضمانت نه ٿو ڏئي 100٪ پيداوار جي ماحول ۾ انهن جي حل جي آپريشن. پر اڳ ۾ ئي، ڪيتريون ئي پراڊڪٽس ترقي جي بينچ ۾ استعمال ڪرڻ جي ڪوشش ڪرڻ لاء واعدو نظر اچن ٿا.