چگونه با استفاده از Kubernetes یک ابر هیبریدی بسازیم که بتواند جایگزین DBaaS شود

نام من پتر زایتسف است، من مدیرعامل، بنیانگذار هستم پرکونا و من می خواهم به شما بگویم:

  • چگونه از راه حل های منبع باز به پایگاه داده به عنوان یک سرویس رسیدیم.
  • چه رویکردهایی برای استقرار پایگاه داده در فضای ابری وجود دارد.
  • چگونه Kubernetes می تواند جایگزین DBaaS شود، وابستگی فروشنده را حذف کند و سادگی DBMS را به عنوان یک سرویس حفظ کند.

مقاله بر اساس گزارشی در @Databases Meetup توسط Mail.ru Cloud Solutions & Tarantool تهیه شده است. اگر نمی خواهید بخوانید، می توانید تماشا کنید:


چگونه از منبع باز به پایگاه داده به عنوان سرویس در فضای ابری رسیدیم

من از اواخر دهه 90 در منبع باز کار کردم. بیست سال پیش، استفاده از منبع باز، مانند پایگاه های داده، چندان آسان نبود. لازم بود کد منبع را دانلود کنید، آن را وصله کنید، آن را کامپایل کنید و تنها پس از آن استفاده کنید.

سپس منبع باز مجموعه ای از ساده سازی ها را انجام داد:

  • Tar.gz و INSTALL منابعی که باید کامپایل شوند.
  • بسته هایی با وابستگی هایی مانند .deb و .rpm، که در آن شما فقط نیاز به نصب مجموعه ای از بسته ها دارید.
  • مخازن بسته مانند APT و YUM که نصب با آنها به صورت خودکار انجام می شود.
  • راه حل هایی مانند Docker و Snap که به شما امکان می دهد بسته ها را با نصب بدون وابستگی خارجی دریافت کنید.

در نتیجه، استفاده از نرم افزار منبع باز آسان تر می شود و همچنین مانع ورود به توسعه چنین برنامه هایی را کاهش می دهد.

در عین حال، برخلاف وضعیت 20 سال پیش که همه متخصص مونتاژ بودند، اکنون اکثر توسعه دهندگان نمی توانند ابزارهایی را که استفاده می کنند از منبع بسازند.

در واقع، این بد نیست، زیرا:

  1. ما می توانیم از نرم افزارهای پیچیده تر اما کاربر پسندتر استفاده کنیم. به عنوان مثال، یک مرورگر برای استفاده راحت است، اما شامل بسیاری از مؤلفه‌های منبع باز است و ساختن از ابتدا ناخوشایند است.
  2. افراد بیشتری می توانند توسعه دهندگان منبع باز و نرم افزارهای دیگر شوند، نرم افزارهای بیشتری توسط کسب و کارها استفاده می شود و نیاز به آن بیشتر است.

نکته منفی این است که گام بعدی در ساده‌سازی با استفاده از راه‌حل‌های ابری همراه است و این منجر به قفل شدن فروشنده خاصی می‌شود، یعنی اتصال به یک تامین‌کننده. ما از راه حل های ساده استفاده می کنیم و ارائه دهندگان از مؤلفه های منبع باز استفاده می کنند، اما در واقع آنها به یکی از ابرهای بزرگ میخکوب می شوند. یعنی ساده‌ترین و سریع‌ترین راه برای استقرار منبع باز (و نرم‌افزار سازگار با آن) در فضای ابری با استفاده از یک API اختصاصی است.

وقتی صحبت از پایگاه های داده در ابر می شود، دو رویکرد وجود دارد:

  1. زیرساخت پایگاه داده را مانند یک مرکز داده معمولی جمع آوری کنید. یعنی بلوک های ساختمانی استاندارد را بگیرید: محاسبه، ذخیره سازی و غیره، لینوکس و یک پایگاه داده را روی آنها نصب کنید و آنها را پیکربندی کنید.
  2. از پایگاه داده به عنوان سرویس استفاده کنید، جایی که ارائه دهنده یک پایگاه داده آماده در داخل ابر ارائه می دهد.

DBaaS در حال حاضر بازاری است که به سرعت در حال رشد است زیرا به توسعه دهندگان اجازه می دهد مستقیماً با پایگاه های داده کار کنند و کارهای معمول را به حداقل می رساند. ارائه دهنده متعهد می شود از دسترسی بالا و مقیاس بندی آسان، وصله پایگاه داده، پشتیبان گیری و تنظیم عملکرد اطمینان حاصل کند.

دو نوع پایگاه داده به عنوان یک سرویس مبتنی بر منبع باز و جایگزین در قالب Kubernetes

دو نوع پایگاه داده به عنوان سرویس برای پایگاه های داده باز وجود دارد:

  1. یک محصول منبع باز استاندارد بسته بندی شده در پشتیبان مدیریت برای استقرار و مدیریت آسان.
  2. یک راه حل تجاری پیشرفته با افزونه های مختلف، سازگار با منبع باز.

هر دو گزینه امکان مهاجرت بین ابرها را کاهش می دهند و قابلیت حمل داده ها و برنامه ها را کاهش می دهند. به عنوان مثال، علیرغم این واقعیت که انواع مختلف ابرها اساساً از یک MySQL استاندارد پشتیبانی می کنند، تفاوت های قابل توجهی بین آنها وجود دارد: در عملکرد، عملکرد، پشتیبان گیری و غیره. مهاجرت از یک ابر به ابر دیگر می تواند چالش برانگیز باشد، به خصوص برای برنامه های پیچیده.

و در اینجا این سوال مطرح می شود - آیا می توان به راحتی پایگاه داده را به عنوان یک سرویس دریافت کرد، اما به عنوان یک راه حل منبع باز ساده؟

خبر بد این است که متاسفانه هنوز چنین راهکارهایی در بازار وجود ندارد. خبر خوب این است که Kubernetes وجود دارد که به شما امکان می دهد چنین راه حل هایی را پیاده سازی کنید.

Kubernetes یک سیستم عامل برای ابر یا مرکز داده است که به شما امکان می دهد یک برنامه کاربردی را در چندین سرور در یک خوشه به جای یک میزبان واحد مستقر و مدیریت کنید.

اکنون Kubernetes در رده چنین نرم افزارهایی پیشرو است. راه حل های مختلفی برای چنین مشکلاتی وجود داشت، اما به استاندارد تبدیل شد. بسیاری از شرکت‌هایی که روی راه‌حل‌های جایگزین تمرکز می‌کردند، اکنون روی تطبیق محصولات خود برای حمایت از Kubernetes تمرکز کرده‌اند.

علاوه بر این، Kubernetes یک راه حل جهانی است که در ابرهای خصوصی، عمومی و ترکیبی بسیاری از فروشندگان پشتیبانی می شود، به عنوان مثال: AWS، Google Cloud، Microsoft Azure، Mail.ru Cloud Solutions.

نحوه کار Kubernetes با پایگاه داده

Kubernetes در ابتدا برای برنامه های بدون حالت طراحی شده بود که داده ها را پردازش می کنند اما چیزی را ذخیره نمی کنند، مانند میکروسرویس ها یا برنامه های کاربردی وب. پایگاه های داده در انتهای دیگر طیف قرار دارند، یعنی برنامه های حالت دار هستند. و Kubernetes در ابتدا برای چنین برنامه هایی در نظر گرفته نشده بود.

با این حال، ویژگی‌هایی وجود دارد که اخیراً در Kubernetes ظاهر شده‌اند که امکان استفاده از پایگاه‌های داده و سایر برنامه‌های کاربردی را فراهم می‌کند:

  1. مفهوم StatefulSet یک سری کامل از اصول اولیه برای پردازش رویدادها در مورد توقف کار پادها و اجرای Graceful Shutdown (خاموش شدن قابل پیش بینی برنامه) است.
  2. Persistent Volumes ذخیره‌گاه‌های داده‌ای هستند که با pods، اشیاء مدیریت Kubernetes مرتبط هستند.
  3. چارچوب اپراتور - یعنی توانایی ایجاد مؤلفه‌هایی برای مدیریت پایگاه‌های داده و سایر برنامه‌های حالت دار که در بسیاری از گره‌ها توزیع شده‌اند.

در حال حاضر در ابرهای عمومی پایگاه های داده بزرگی به عنوان یک سرویس وجود دارد که پشتیبان آن Kubernetes است، به عنوان مثال: CockroachCloud، InfluxDB، PlanetScale. یعنی پایگاه داده در Kubernetes نه تنها چیزی است که از نظر تئوری امکان پذیر است، بلکه چیزی است که در عمل نیز کار می کند.

Percona دو راه حل منبع باز برای Kubernetes دارد:

  1. اپراتور Kubernetes برای سرور Percona برای MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER سرویسی است که با MySQL سازگار است و در دسترس بودن و سازگاری بالایی را ارائه می دهد. همچنین می‌توانید در صورت عدم نیاز به دسترسی بالا از یک گره استفاده کنید، برای مثال برای پایگاه داده توسعه.

کاربران Kubernetes را می توان به دو گروه تقسیم کرد. برخی از افراد مستقیماً از اپراتورهای Kubernetes استفاده می کنند - اینها عمدتاً کاربران پیشرفته ای هستند که درک خوبی از نحوه عملکرد فناوری دارند. دیگران آن را در باطن اجرا می کنند - چنین کاربرانی به چیزی مانند پایگاه داده به عنوان یک سرویس علاقه مند هستند، آنها نمی خواهند به تفاوت های ظریف Kubernetes بپردازند. برای گروه دوم کاربران، راه حل منبع باز دیگری داریم - ابزار Percona DBaaS CLI. این یک راه حل آزمایشی برای کسانی است که می خواهند یک DBaaS منبع باز مبتنی بر Kubernetes بدون درک عمیق از فناوری دریافت کنند.

نحوه اجرای DBaaS Percona در Google Kubernetes Engine

Google Kubernetes Engine، به نظر من، یکی از کاربردی ترین پیاده سازی های فناوری Kubernetes است. در بسیاری از مناطق جهان در دسترس است و دارای یک ابزار ساده و راحت Command Line Tool (SDK) است که به شما امکان می دهد به جای مدیریت دستی پلت فرم، اسکریپت ایجاد کنید.

برای اینکه DBaaS ما کار کند، به اجزای زیر نیاز داریم:

  1. کوبکتل
  2. Google Cloud SDK.
  3. Percona DBaaS CLI.

Kubectl را نصب کنید

ما بسته را برای سیستم عامل شما نصب می کنیم، به مثال اوبونتو نگاه می کنیم. جزئیات بیشتر اینجا.

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 را نصب کرده باشید.

بیشتر اینجا.

الگوریتم نصب:

  1. با استفاده از ابزار percona-release مخازن Percona را راه اندازی کنید. ابتدا باید بسته رسمی انتشار percona را از Percona دانلود و نصب کنید:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. مؤلفه مخزن ابزار آزمایشی را به صورت زیر فعال کنید:
    sudo percona-release enable tools experimental
    
  3. بسته percona-dbaas-cli را نصب کنید:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

تنظیم عملکرد قطعات

بیشتر در مورد تنظیمات اینجا.

ابتدا باید وارد حساب کاربری گوگل خود شوید. علاوه بر این، 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 در دسترس است. یعنی از سروری که دستور «ایجاد» را از آن اجرا می‌کنید، قابل دسترسی نیست. برای در دسترس قرار دادن آن، به عنوان مثال، برای آزمایش با یک مشتری، باید پورت را از طریق 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 Group.

چه چیز دیگری در مورد موضوع بخوانید:

  1. پایگاه های داده در یک پلت فرم مدرن IIoT.
  2. چگونه یک پایگاه داده برای یک پروژه انتخاب کنید تا مجبور نباشید دوباره انتخاب کنید.

منبع: www.habr.com

اضافه کردن نظر