اسمي بيتر زايتسيف، أنا الرئيس التنفيذي، المؤسس وأريد أن أقول لك:
- كيف انتقلنا من الحلول مفتوحة المصدر إلى قاعدة البيانات كخدمة؛
- ما هي الأساليب الموجودة لنشر قواعد البيانات في السحابة؛
- كيف يمكن لـ 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، .
كيف يعمل 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... المزيد من التفاصيل .
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. تحتاج أولاً إلى تنزيل وتثبيت حزمة إصدار 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)ثم نقوم بإنشاء مساحة اسم ونجعلها نشطة. مساحة الاسم، تقريبًا، تشبه أيضًا مشروعًا أو بيئة، ولكنها موجودة بالفعل داخل مجموعة 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. أي أنه لا يمكن الوصول إليه من هذا الخادم الذي قمت بتشغيل أمر "الإنشاء" منه. لإتاحته، على سبيل المثال، للاختبارات مع العميل، تحتاج إلى إعادة توجيه المنفذ من خلال تعيين المنفذ:
kubectl port-forward svc/example-proxysql 3306:3306 $ثم نقوم بتوصيل عميل MySQL الخاص بك:
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
قم بتعيين كلمة المرور بشكل صريح
بدلاً من قيام النظام بإنشاء كلمة مرور بشكل عشوائي، يمكنك تعيين كلمة المرور بشكل صريح:
# 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. وفي الوقت نفسه، نواصل العمل على وظائفه وسهولة استخدامه.
تم تقديم هذا التقرير لأول مرة في بواسطة Mail.ru Cloud Solutions & Tarantool. ينظر العروض الأخرى والاشتراك في إعلانات الأحداث في Telegram .
ماذا تقرأ حول الموضوع:
المصدر: www.habr.com
