- كيف أتينا من حلول مفتوحة المصدر إلى قاعدة البيانات كخدمة ؛
- ما هي طرق نشر قواعد البيانات في السحابة ؛
- كيف يمكن لـ Kubernetes استبدال DBaaS عن طريق إزالة تبعية البائع والحفاظ على نظام DBMS كخدمة بسيطة قدر الإمكان.
تستند المقالة إلى التقرير في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 Cloud Solutions .
كيف يعمل Kubernetes مع قواعد البيانات
تم تصميم Kubernetes في الأصل للتطبيقات عديمة الحالة التي تعالج البيانات ولكنها لا تخزن أي شيء ، مثل الخدمات المصغرة أو تطبيقات الويب. توجد قواعد البيانات على الطرف الآخر من الطيف ، مما يعني أنها تطبيقات ذات حالة. ولم يتم تصميم Kubernetes في الأصل لمثل هذه التطبيقات.
ومع ذلك ، هناك ميزات ظهرت في Kubernetes مؤخرًا وتسمح باستخدام قواعد البيانات والتطبيقات الأخرى ذات الحالة:
- مفهوم StatefulSet عبارة عن سلسلة كاملة من العناصر الأساسية للتعامل مع أحداث إيقاف تشغيل pod وتنفيذ Graceful Shutdown (إيقاف تشغيل يمكن التنبؤ به للتطبيق).
- وحدات التخزين الثابتة - مخازن البيانات المرتبطة بالقرون ، وكائنات إدارة Kubernetes.
- إطار المشغل - أي القدرة على إنشاء مكونات لإدارة قواعد البيانات والتطبيقات الأخرى ذات الحالة الموزعة على العديد من العقد.
توجد بالفعل قاعدة بيانات كبيرة كخدمة في السحب العامة ، في الخلفية منها Kubernetes ، على سبيل المثال: CockroachCloud و InfluxDB و PlanetScale. وهذا يعني أن قاعدة بيانات Kubernetes ليست فقط ما هو ممكن نظريًا ، ولكن أيضًا ما ينجح في الممارسة.
لدى Percona حلين من حلول Kubernetes مفتوحة المصدر:
- مشغل Kubernetes لخادم بيركونا لـ 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.
قم بتثبيت kubectl
عند تثبيت الحزمة لنظام التشغيل الخاص بك ، سنلقي نظرة على مثال Ubuntu. مزيد من التفاصيل هنا .
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
تثبيت Google Cloud SDK
قم بتثبيت حزمة البرامج بنفس الطريقة. مزيد من التفاصيل هنا .
# 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 مثبتة.
مزيد من التفاصيل هنا .
خوارزمية التثبيت:
- تكوين مستودعات بيركونا باستخدام أداة تحرير بيركونا. تحتاج أولاً إلى تنزيل وتثبيت حزمة إصدار Percona الرسمية من Percona:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb
- قم بتمكين مكون مستودع الأداة التجريبية كما يلي:
sudo percona-release enable tools experimental
- قم بتثبيت حزمة percona-dbaas-cli:
sudo apt-get update sudo apt-get install percona-dbaas-cli
إعداد المكونات
اقرأ المزيد عن الإعدادات هنا .
تحتاج أولاً إلى تسجيل الدخول إلى حساب Google الخاص بك. علاوة على ذلك ، تسمح Google Cloud لمستخدم واحد بالحصول على العديد من المشاريع المستقلة ، لذلك تحتاج إلى تحديد مشروع عامل باستخدام رمز هذا المشروع:
gcloud auth login
gcloud config set project hidden-brace-236921
بعد ذلك ، نقوم بإنشاء كتلة. بالنسبة للعرض التوضيحي ، قمت بإنشاء مجموعة Kubernetes المكونة من ثلاث عقد فقط - وهذا هو الحد الأدنى المطلوب للإتاحة العالية:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
يعطي الأمر kubectl التالي الامتيازات المطلوبة لمستخدمنا الحالي:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)
ثم نقوم بإنشاء مساحة اسم ونجعلها نشطة. Namespace ، تقريبًا ، مثل مشروع أو بيئة ، ولكن بالفعل داخل مجموعة Kubernetes. إنها مستقلة عن مشاريع Google Cloud:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
نبدأ الكتلة
بعد أن نمر بهذه الخطوات القليلة ، يمكننا أن نبدأ مجموعة من ثلاث عقد باستخدام هذا الأمر البسيط:
# 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. أي أنه من هذا الخادم الذي قمت بتشغيل أمر إنشاء منه ، فإنه غير متوفر. لجعله متاحًا ، على سبيل المثال ، للاختبارات مع عميل ، تحتاج إلى تمرير المنفذ عبر Port Mapping:
kubectl port-forward svc/example-proxysql 3306:3306 $
ثم نقوم بتوصيل عميل MySQL الخاص بك:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
أوامر إدارة الكتلة المتقدمة
قاعدة بيانات IP العامة
إذا كنت تريد حلاً دائمًا لتوافر الكتلة ، فيمكنك الحصول على عنوان 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
قم بتعيين كلمة المرور بشكل صريح
بدلاً من قيام النظام بإنشاء كلمة المرور بشكل عشوائي ، يمكنك تعيين كلمة المرور بشكل صريح:
# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: mypassword
Status: ready
أعرض إخراج البرنامج النصي بتنسيق يمكن قراءته بواسطة الإنسان ، ولكن تنسيق JSON مدعوم أيضًا.
قم بإيقاف تشغيل التوافر العالي
يمكنك إيقاف تشغيل الإتاحة العالية باستخدام الأمر التالي لتوسيع العقدة المفردة:
# percona-dbaas mysql create-db singlenode
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: 22VqFD96mvRnmPMGg
Status: ready
هذا حل لمشاكل الاختبار من أجل رفع MySQL بسرعة وسهولة ، واختبارها ، ثم طيها أو استخدامها من أجل التطوير.
تساعدك أداة Percona DBaaS CLI في الحصول على حل يشبه DBaaS على Kubernetes. في الوقت نفسه ، نواصل العمل على وظائفها وسهولة استخدامها.
تم تقديم هذا الحديث لأول مرة في Databases Meetup بواسطة Mail.ru Cloud Solutions & Tarantool. مشاهدة أشرطة الفيديو من الخطابات الأخرى والاشتراك في الإعلانات حدث في برقية حوالي Kubernetes في المجموعة Mail.ru .
ماذا تقرأ عن الموضوع: