ProHoster > بلوق > إدارة > كيفية إنشاء سحابة هجينة باستخدام Kubernetes يمكنها استبدال DBaaS
كيفية إنشاء سحابة هجينة باستخدام Kubernetes يمكنها استبدال DBaaS
اسمي بيتر زايتسيف، أنا الرئيس التنفيذي، المؤسس Percona وأريد أن أقول لك:
كيف انتقلنا من الحلول مفتوحة المصدر إلى قاعدة البيانات كخدمة؛
ما هي الأساليب الموجودة لنشر قواعد البيانات في السحابة؛
كيف يمكن لـ Kubernetes أن تحل محل DBaaS، مما يزيل الاعتماد على البائع ويحافظ على بساطة نظام إدارة قواعد البيانات كخدمة.
تم إعداد المقالة بناءً على تقرير في @Databases Meetup بواسطة Mail.ru Cloud Solutions & Tarantool. إذا كنت لا تريد القراءة يمكنك مشاهدة:
كيف انتقلنا من المصدر المفتوح إلى قاعدة البيانات كخدمة في السحابة
لقد كنت أعمل في المصادر المفتوحة منذ أواخر التسعينيات. قبل عشرين عامًا، لم يكن استخدام المصادر المفتوحة، مثل قواعد البيانات، أمرًا سهلاً. كان من الضروري تنزيل الكود المصدري وتصحيحه وتجميعه وبعد ذلك فقط استخدامه.
ثم مرت المصادر المفتوحة بسلسلة من التبسيطات:
مصادر Tar.gz وINSTALL التي يلزم تجميعها؛
الحزم ذات التبعيات مثل .deb و.rpm، حيث تحتاج فقط إلى تثبيت مجموعة من الحزم؛
مستودعات الحزم مثل APT وYUM، والتي يتم التثبيت تلقائيًا من خلالها؛
حلول مثل Docker وSnap، والتي تتيح لك تلقي الحزم عن طريق التثبيت دون تبعيات خارجية.
ونتيجة لذلك، يصبح من الأسهل استخدام البرامج مفتوحة المصدر ويقلل أيضًا من حاجز الدخول في تطوير مثل هذه التطبيقات.
في الوقت نفسه، على عكس الوضع قبل 20 عامًا، عندما كان الجميع خبراء في التجميع، لا يستطيع معظم المطورين الآن إنشاء الأدوات التي يستخدمونها من المصدر.
في الواقع، هذا ليس سيئا، لأنه:
يمكننا استخدام برامج أكثر تعقيدًا ولكن أكثر سهولة في الاستخدام. على سبيل المثال، يعد المتصفح مناسبًا للاستخدام، ولكنه يتضمن العديد من المكونات مفتوحة المصدر ومن غير المناسب إنشاءه من البداية.
يمكن لعدد أكبر من الأشخاص أن يصبحوا مطورين للبرامج مفتوحة المصدر وغيرها من البرامج، ويتم استخدام المزيد من البرامج من قبل الشركات، وتصبح الحاجة إليها أكبر.
الجانب السلبي هو أن الخطوة التالية في التبسيط ترتبط باستخدام الحلول السحابية، وهذا يؤدي إلى تقييد بائع معين، أي الارتباط بمورد واحد. نحن نستخدم حلولًا بسيطة ويستخدم مقدمو الخدمات مكونات مفتوحة المصدر، ولكنها في الواقع مثبتة على إحدى السحابات الكبيرة. وهذا يعني أن الطريقة الأسهل والأسرع لنشر المصدر المفتوح (والبرامج المتوافقة معه) هي في السحابة، باستخدام واجهة برمجة التطبيقات الخاصة.
عندما يتعلق الأمر بقواعد البيانات في السحابة، هناك طريقتان:
تجميع البنية التحتية لقاعدة البيانات، كما هو الحال في مركز البيانات العادي. أي، خذ وحدات البناء القياسية: الحوسبة والتخزين وما إلى ذلك، وقم بتثبيت Linux وقاعدة البيانات عليها وقم بتكوينها.
استخدام قاعدة البيانات كخدمة، حيث يقدم المزود قاعدة بيانات جاهزة داخل السحابة.
يعد DBaaS سوقًا سريع النمو في الوقت الحالي لأنه يسمح للمطورين بالعمل مباشرة مع قواعد البيانات ويقلل من العمل الروتيني. يتعهد الموفر بضمان التوفر العالي وسهولة التوسع وتصحيح قاعدة البيانات والنسخ الاحتياطي وضبط الأداء.
نوعان من قواعد البيانات كخدمة تعتمد على المصدر المفتوح والبديل على شكل Kubernetes
هناك نوعان من قاعدة البيانات كخدمة لقواعد البيانات المفتوحة:
منتج قياسي مفتوح المصدر مضمن في الواجهة الخلفية للإدارة لسهولة النشر والإدارة.
حل تجاري متقدم بإضافات متنوعة ومتوافق مع المصادر المفتوحة.
يعمل كلا الخيارين على تقليل إمكانية الانتقال بين السحابات وتقليل إمكانية نقل البيانات والتطبيقات. على سبيل المثال، على الرغم من أن الأنواع المختلفة من السحابة تدعم بشكل أساسي نفس معيار MySQL، إلا أن هناك اختلافات كبيرة بينها: في التشغيل والأداء والنسخ الاحتياطي وما إلى ذلك. قد يكون الانتقال من سحابة إلى أخرى أمرًا صعبًا، خاصة بالنسبة للتطبيقات المعقدة.
وهنا يطرح السؤال - هل من الممكن الحصول على راحة قاعدة البيانات كخدمة ولكن كحل بسيط مفتوح المصدر؟
الخبر السيئ هو أنه، لسوء الحظ، لا توجد مثل هذه الحلول في السوق حتى الآن. والخبر السار هو أن هناك Kubernetes، والذي يسمح لك بتنفيذ مثل هذه الحلول.
Kubernetes هو نظام تشغيل للسحابة أو لمركز البيانات يسمح لك بنشر تطبيق ما وإدارته عبر خوادم متعددة في مجموعة بدلاً من مضيف واحد.
الآن Kubernetes هي الرائدة في فئة هذه البرامج. كانت هناك العديد من الحلول المختلفة لمثل هذه المشاكل، لكنها أصبحت المعيار. العديد من الشركات التي اعتادت التركيز على الحلول البديلة تركز الآن على تكييف منتجاتها لدعم Kubernetes.
بالإضافة إلى ذلك، يعد Kubernetes حلاً عالميًا مدعومًا في السحابات الخاصة والعامة والمختلطة للعديد من الموردين، على سبيل المثال: AWS، وGoogle Cloud، وMicrosoft Azure، حلول سحابة Mail.ru.
كيف يعمل Kubernetes مع قواعد البيانات
تم تصميم Kubernetes في الأصل للتطبيقات عديمة الجنسية التي تعالج البيانات ولكنها لا تخزن أي شيء، مثل الخدمات الصغيرة أو تطبيقات الويب. تقع قواعد البيانات على الطرف الآخر من الطيف، أي أنها تطبيقات ذات حالة. ولم يكن Kubernetes مخصصًا في الأصل لمثل هذه التطبيقات.
ومع ذلك، هناك ميزات ظهرت مؤخرًا في Kubernetes تتيح استخدام قواعد البيانات والتطبيقات الأخرى ذات الحالة:
مفهوم StatefulSet عبارة عن سلسلة كاملة من الأوليات لمعالجة الأحداث المتعلقة بإيقاف عمل القرون وتنفيذ Graceful Shutdown (إيقاف تشغيل التطبيق بشكل متوقع).
وحدات التخزين الدائمة هي مخازن بيانات مرتبطة بالقرون وكائنات إدارة Kubernetes.
إطار عمل المشغل - أي القدرة على إنشاء مكونات لإدارة قواعد البيانات والتطبيقات الأخرى ذات الحالة الموزعة عبر العديد من العقد.
توجد بالفعل في السحابة العامة قواعد بيانات كبيرة كخدمة، والواجهة الخلفية لها هي Kubernetes، على سبيل المثال: CockroachCloud، InfluxDB، PlanetScale. وهذا يعني أن قاعدة البيانات في Kubernetes ليست فقط شيئًا ممكنًا من الناحية النظرية، ولكنها أيضًا شيء يمكن تطبيقه عمليًا.
لدى Percona حلان مفتوحان المصدر لـ Kubernetes:
مشغل Kubernetes لخادم Percona لـ MongoDB.
Kubernetes Operator for XtraDB CLUSTER هي خدمة متوافقة مع MySQL وتوفر درجة عالية من التوفر والاتساق. يمكنك أيضًا استخدام عقدة واحدة إذا لم تكن هناك حاجة إلى توفر عالٍ، على سبيل المثال لقاعدة بيانات التطوير.
يمكن تقسيم مستخدمي Kubernetes إلى مجموعتين. يستخدم بعض الأشخاص مشغلي Kubernetes مباشرة - وهؤلاء هم في الأساس مستخدمون متقدمون لديهم فهم جيد لكيفية عمل التكنولوجيا. يقوم الآخرون بتشغيله على الواجهة الخلفية - يهتم هؤلاء المستخدمون بشيء مثل قاعدة البيانات كخدمة، ولا يريدون الخوض في الفروق الدقيقة في Kubernetes. بالنسبة للمجموعة الثانية من المستخدمين، لدينا حل آخر مفتوح المصدر - أداة Percona DBaaS CLI. يعد هذا حلاً تجريبيًا لأولئك الذين يرغبون في الحصول على DBaaS مفتوح المصدر استنادًا إلى Kubernetes دون فهم عميق للتكنولوجيا.
كيفية تشغيل DBaaS الخاصة بـ Percona على Google Kubernetes Engine
يعد Google Kubernetes Engine، في رأيي، أحد أكثر التطبيقات الوظيفية لتقنية Kubernetes. وهو متوفر في العديد من مناطق العالم ويحتوي على أداة سطر الأوامر (SDK) البسيطة والمريحة، والتي تتيح لك إنشاء البرامج النصية بدلاً من إدارة النظام الأساسي يدويًا.
لكي يعمل نظام DBaaS الخاص بنا، نحتاج إلى المكونات التالية:
كوبيكتل.
جوجل السحابية SDK.
بيركونا DBaaS CLI.
قم بتثبيت كوبيكتل
نقوم بتثبيت الحزمة لنظام التشغيل الخاص بك، وسوف نلقي نظرة على مثال Ubuntu. المزيد من التفاصيل هنا.
نقوم بتثبيت حزمة البرامج بنفس الطريقة. المزيد من التفاصيل هنا.
# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg]
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
تثبيت Percona DBaaS CLI
التثبيت من مستودعات Percona. لا تزال أداة Percona DBaaS CLI منتجًا تجريبيًا، لذا فهي موجودة في المستودع التجريبي، والذي يجب تمكينه بشكل منفصل، حتى إذا كان لديك بالفعل مستودعات Percona مثبتة.
تحتاج أولاً إلى تسجيل الدخول إلى حسابك في Google. علاوة على ذلك، يتيح Google Cloud لمستخدم واحد أن يكون لديه العديد من المشاريع المستقلة، لذلك تحتاج إلى تحديد مشروع عمل باستخدام الكود الخاص بهذا المشروع:
gcloud auth login
gcloud config set project hidden-brace-236921
بعد ذلك، نقوم بإنشاء كتلة. بالنسبة للعرض التوضيحي، قمت بإنشاء مجموعة Kubernetes مكونة من ثلاث عقد فقط - وهذا هو الحد الأدنى المطلوب للتوفر العالي:
ثم نقوم بإنشاء مساحة اسم ونجعلها نشطة. مساحة الاسم، تقريبًا، تشبه أيضًا مشروعًا أو بيئة، ولكنها موجودة بالفعل داخل مجموعة Kubernetes. وهي مستقلة عن مشاريع Google Cloud:
بمجرد الانتهاء من هذه الخطوات القليلة، يمكننا بدء مجموعة مكونة من ثلاث عقد باستخدام هذا الأمر البسيط:
# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: Nt9YZquajW7nfVXTTrP
Status: ready
كيفية الاتصال بالكتل
افتراضيًا، يكون متاحًا فقط داخل Kubernetes. أي أنه لا يمكن الوصول إليه من هذا الخادم الذي قمت بتشغيل أمر "الإنشاء" منه. لإتاحته، على سبيل المثال، للاختبارات مع العميل، تحتاج إلى إعادة توجيه المنفذ من خلال تعيين المنفذ:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
أوامر إدارة الكتلة المتقدمة
قاعدة بيانات عن الملكية الفكرية العامة
إذا كنت تريد حلاً أكثر استدامة لتوفر المجموعة، فيمكنك الحصول على عنوان IP خارجي. في هذه الحالة، سيتم الوصول إلى قاعدة البيانات من أي مكان. وهذا أقل أمانًا، ولكنه أكثر ملاءمة في كثير من الأحيان. بالنسبة لـ IP الخارجي نستخدم الأمر التالي:
# percona-dbaas mysql create-db exposed
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: exposed
Resource Endpoint: 104.154.133.197
Port: 3306
User: root
Pass: k0QVxTr8EVfgyCLYse
Status: ready
To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse
قم بتعيين كلمة المرور بشكل صريح
بدلاً من قيام النظام بإنشاء كلمة مرور بشكل عشوائي، يمكنك تعيين كلمة المرور بشكل صريح: