ProHoster > وبلاگ > اداره > چگونه با استفاده از Kubernetes یک ابر هیبریدی بسازیم که بتواند جایگزین DBaaS شود
چگونه با استفاده از Kubernetes یک ابر هیبریدی بسازیم که بتواند جایگزین DBaaS شود
نام من پتر زایتسف است، من مدیرعامل، بنیانگذار هستم پرکونا و من می خواهم به شما بگویم:
چگونه از راه حل های منبع باز به پایگاه داده به عنوان یک سرویس رسیدیم.
چه رویکردهایی برای استقرار پایگاه داده در فضای ابری وجود دارد.
چگونه Kubernetes می تواند جایگزین DBaaS شود، وابستگی فروشنده را حذف کند و سادگی DBMS را به عنوان یک سرویس حفظ کند.
مقاله بر اساس گزارشی در @Databases Meetup توسط Mail.ru Cloud Solutions & Tarantool تهیه شده است. اگر نمی خواهید بخوانید، می توانید تماشا کنید:
چگونه از منبع باز به پایگاه داده به عنوان سرویس در فضای ابری رسیدیم
من از اواخر دهه 90 در منبع باز کار کردم. بیست سال پیش، استفاده از منبع باز، مانند پایگاه های داده، چندان آسان نبود. لازم بود کد منبع را دانلود کنید، آن را وصله کنید، آن را کامپایل کنید و تنها پس از آن استفاده کنید.
سپس منبع باز مجموعه ای از ساده سازی ها را انجام داد:
Tar.gz و INSTALL منابعی که باید کامپایل شوند.
بسته هایی با وابستگی هایی مانند .deb و .rpm، که در آن شما فقط نیاز به نصب مجموعه ای از بسته ها دارید.
مخازن بسته مانند APT و YUM که نصب با آنها به صورت خودکار انجام می شود.
راه حل هایی مانند Docker و Snap که به شما امکان می دهد بسته ها را با نصب بدون وابستگی خارجی دریافت کنید.
در نتیجه، استفاده از نرم افزار منبع باز آسان تر می شود و همچنین مانع ورود به توسعه چنین برنامه هایی را کاهش می دهد.
در عین حال، برخلاف وضعیت 20 سال پیش که همه متخصص مونتاژ بودند، اکنون اکثر توسعه دهندگان نمی توانند ابزارهایی را که استفاده می کنند از منبع بسازند.
در واقع، این بد نیست، زیرا:
ما می توانیم از نرم افزارهای پیچیده تر اما کاربر پسندتر استفاده کنیم. به عنوان مثال، یک مرورگر برای استفاده راحت است، اما شامل بسیاری از مؤلفههای منبع باز است و ساختن از ابتدا ناخوشایند است.
افراد بیشتری می توانند توسعه دهندگان منبع باز و نرم افزارهای دیگر شوند، نرم افزارهای بیشتری توسط کسب و کارها استفاده می شود و نیاز به آن بیشتر است.
نکته منفی این است که گام بعدی در سادهسازی با استفاده از راهحلهای ابری همراه است و این منجر به قفل شدن فروشنده خاصی میشود، یعنی اتصال به یک تامینکننده. ما از راه حل های ساده استفاده می کنیم و ارائه دهندگان از مؤلفه های منبع باز استفاده می کنند، اما در واقع آنها به یکی از ابرهای بزرگ میخکوب می شوند. یعنی سادهترین و سریعترین راه برای استقرار منبع باز (و نرمافزار سازگار با آن) در فضای ابری با استفاده از یک API اختصاصی است.
وقتی صحبت از پایگاه های داده در ابر می شود، دو رویکرد وجود دارد:
زیرساخت پایگاه داده را مانند یک مرکز داده معمولی جمع آوری کنید. یعنی بلوک های ساختمانی استاندارد را بگیرید: محاسبه، ذخیره سازی و غیره، لینوکس و یک پایگاه داده را روی آنها نصب کنید و آنها را پیکربندی کنید.
از پایگاه داده به عنوان سرویس استفاده کنید، جایی که ارائه دهنده یک پایگاه داده آماده در داخل ابر ارائه می دهد.
DBaaS در حال حاضر بازاری است که به سرعت در حال رشد است زیرا به توسعه دهندگان اجازه می دهد مستقیماً با پایگاه های داده کار کنند و کارهای معمول را به حداقل می رساند. ارائه دهنده متعهد می شود از دسترسی بالا و مقیاس بندی آسان، وصله پایگاه داده، پشتیبان گیری و تنظیم عملکرد اطمینان حاصل کند.
دو نوع پایگاه داده به عنوان یک سرویس مبتنی بر منبع باز و جایگزین در قالب Kubernetes
دو نوع پایگاه داده به عنوان سرویس برای پایگاه های داده باز وجود دارد:
یک محصول منبع باز استاندارد بسته بندی شده در پشتیبان مدیریت برای استقرار و مدیریت آسان.
یک راه حل تجاری پیشرفته با افزونه های مختلف، سازگار با منبع باز.
هر دو گزینه امکان مهاجرت بین ابرها را کاهش می دهند و قابلیت حمل داده ها و برنامه ها را کاهش می دهند. به عنوان مثال، علیرغم این واقعیت که انواع مختلف ابرها اساساً از یک MySQL استاندارد پشتیبانی می کنند، تفاوت های قابل توجهی بین آنها وجود دارد: در عملکرد، عملکرد، پشتیبان گیری و غیره. مهاجرت از یک ابر به ابر دیگر می تواند چالش برانگیز باشد، به خصوص برای برنامه های پیچیده.
و در اینجا این سوال مطرح می شود - آیا می توان به راحتی پایگاه داده را به عنوان یک سرویس دریافت کرد، اما به عنوان یک راه حل منبع باز ساده؟
خبر بد این است که متاسفانه هنوز چنین راهکارهایی در بازار وجود ندارد. خبر خوب این است که Kubernetes وجود دارد که به شما امکان می دهد چنین راه حل هایی را پیاده سازی کنید.
Kubernetes یک سیستم عامل برای ابر یا مرکز داده است که به شما امکان می دهد یک برنامه کاربردی را در چندین سرور در یک خوشه به جای یک میزبان واحد مستقر و مدیریت کنید.
اکنون Kubernetes در رده چنین نرم افزارهایی پیشرو است. راه حل های مختلفی برای چنین مشکلاتی وجود داشت، اما به استاندارد تبدیل شد. بسیاری از شرکتهایی که روی راهحلهای جایگزین تمرکز میکردند، اکنون روی تطبیق محصولات خود برای حمایت از Kubernetes تمرکز کردهاند.
علاوه بر این، Kubernetes یک راه حل جهانی است که در ابرهای خصوصی، عمومی و ترکیبی بسیاری از فروشندگان پشتیبانی می شود، به عنوان مثال: AWS، Google Cloud، Microsoft Azure، Mail.ru Cloud Solutions.
نحوه کار Kubernetes با پایگاه داده
Kubernetes در ابتدا برای برنامه های بدون حالت طراحی شده بود که داده ها را پردازش می کنند اما چیزی را ذخیره نمی کنند، مانند میکروسرویس ها یا برنامه های کاربردی وب. پایگاه های داده در انتهای دیگر طیف قرار دارند، یعنی برنامه های حالت دار هستند. و Kubernetes در ابتدا برای چنین برنامه هایی در نظر گرفته نشده بود.
با این حال، ویژگیهایی وجود دارد که اخیراً در Kubernetes ظاهر شدهاند که امکان استفاده از پایگاههای داده و سایر برنامههای کاربردی را فراهم میکند:
مفهوم StatefulSet یک سری کامل از اصول اولیه برای پردازش رویدادها در مورد توقف کار پادها و اجرای Graceful Shutdown (خاموش شدن قابل پیش بینی برنامه) است.
Persistent Volumes ذخیرهگاههای دادهای هستند که با pods، اشیاء مدیریت 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 است. در بسیاری از مناطق جهان در دسترس است و دارای یک ابزار ساده و راحت Command Line Tool (SDK) است که به شما امکان می دهد به جای مدیریت دستی پلت فرم، اسکریپت ایجاد کنید.
برای اینکه DBaaS ما کار کند، به اجزای زیر نیاز داریم:
کوبکتل
Google Cloud SDK.
Percona DBaaS CLI.
Kubectl را نصب کنید
ما بسته را برای سیستم عامل شما نصب می کنیم، به مثال اوبونتو نگاه می کنیم. جزئیات بیشتر اینجا.
بسته نرم افزاری را به همین ترتیب نصب می کنیم. جزئیات بیشتر اینجا.
# 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 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 در دسترس است. یعنی از سروری که دستور «ایجاد» را از آن اجرا میکنید، قابل دسترسی نیست. برای در دسترس قرار دادن آن، به عنوان مثال، برای آزمایش با یک مشتری، باید پورت را از طریق Port Mapping ارسال کنید:
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
رمز عبور را به صراحت تنظیم کنید
به جای اینکه سیستم به طور تصادفی رمز عبور ایجاد کند، می توانید رمز عبور را به طور واضح تنظیم کنید:
این یک راه حل برای آزمایش وظایف است تا MySQL را با سرعت و آسانی راه اندازی و اجرا کنید، آن را آزمایش کنید و سپس آن را خاموش کنید یا از آن برای توسعه استفاده کنید.
ابزار Percona DBaaS CLI به شما کمک می کند تا به راه حلی شبیه به DBaaS در Kubernetes برسید. در عین حال، ما به کار بر روی عملکرد و قابلیت استفاده آن ادامه می دهیم.