DBaaS o'rnini bosadigan Kubernetes yordamida gibrid bulutni qanday qurish mumkin

Mening ismim Petr Zaitsev, men bosh direktor, asoschiman Perkona va men sizga aytmoqchiman:

  • qanday qilib biz ochiq manbali yechimlardan ma'lumotlar bazasiga xizmat sifatida keldik;
  • bulutda ma'lumotlar bazalarini joylashtirish uchun qanday yondashuvlar mavjud;
  • Qanday qilib Kubernetes DBaaS o'rnini bosishi mumkin, sotuvchiga bog'liqlikni yo'q qiladi va ma'lumotlar bazasi ma'lumotlar bazasining xizmat sifatida soddaligini saqlab qoladi.

Maqola Mail.ru Cloud Solutions & Tarantool tomonidan @Database Meetup’dagi hisobot asosida tayyorlangan. Agar o'qishni xohlamasangiz, tomosha qilishingiz mumkin:


Qanday qilib biz ochiq manbadan ma'lumotlar bazasiga bulutdagi xizmat sifatida keldik

Men 90-yillarning oxiridan beri ochiq manbada ishlayapman. Yigirma yil oldin ma'lumotlar bazalari kabi ochiq manbalardan foydalanish unchalik oson emas edi. Manba kodini yuklab olish, uni tuzatish, kompilyatsiya qilish va shundan keyingina foydalanish kerak edi.

Keyin ochiq manba bir qator soddalashtirishlardan o'tdi:

  • Tar.gz va kompilyatsiya qilinishi kerak bo'lgan INSTALL manbalari;
  • .deb va .rpm kabi bog'liqliklari bo'lgan paketlar, bu erda siz faqat paketlar to'plamini o'rnatishingiz kerak;
  • o'rnatish avtomatik amalga oshiriladigan APT va YUM kabi paketlar omborlari;
  • tashqi bog'liqliklarsiz o'rnatish orqali paketlarni qabul qilish imkonini beruvchi Docker va Snap kabi echimlar.

Natijada, ochiq kodli dasturiy ta'minotdan foydalanish osonroq bo'ladi, shuningdek, bunday ilovalarni ishlab chiqishga kirish uchun to'siqni kamaytiradi.

Shu bilan birga, 20 yil oldingi vaziyatdan farqli o'laroq, har bir kishi montaj bo'yicha mutaxassis bo'lganida, endi ko'pchilik ishlab chiquvchilar o'zlari foydalanadigan vositalarni manbadan qura olmaydilar.

Aslida, bu yomon emas, chunki:

  1. Biz murakkabroq, lekin foydalanuvchilarga qulayroq dasturlardan foydalanishimiz mumkin. Misol uchun, brauzerdan foydalanish qulay, lekin u ko'plab ochiq manba komponentlarini o'z ichiga oladi va noldan qurish uchun noqulay.
  2. Ko'proq odamlar ochiq kodli va boshqa dasturiy ta'minotni ishlab chiquvchilari bo'lishlari mumkin, korxonalar ko'proq dasturiy ta'minotdan foydalanadilar va unga bo'lgan ehtiyoj kattaroq.

Salbiy tomoni shundaki, soddalashtirishning keyingi bosqichi bulutli echimlardan foydalanish bilan bog'liq va bu ma'lum bir sotuvchining bloklanishiga, ya'ni bitta yetkazib beruvchiga bog'lanishiga olib keladi. Biz oddiy echimlardan foydalanamiz va provayderlar ochiq manba komponentlaridan foydalanadilar, lekin aslida ular katta bulutlardan biriga mixlangan. Ya'ni, ochiq manbani (va unga mos keladigan dasturiy ta'minotni) o'rnatishning eng oson va tezkor usuli - bu xususiy API yordamida bulutlarda.

Bulutdagi ma'lumotlar bazalari haqida gap ketganda, ikkita yondashuv mavjud:

  1. Oddiy ma'lumotlar markazidagi kabi ma'lumotlar bazasi infratuzilmasini yig'ing. Ya'ni, standart qurilish bloklarini oling: hisoblash, saqlash va hokazo, ularga Linux va ma'lumotlar bazasini o'rnating va ularni sozlang.
  2. Provayder bulut ichida tayyor ma'lumotlar bazasini taklif qiladigan ma'lumotlar bazasidan xizmat sifatida foydalaning.

DBaaS hozirda tez rivojlanayotgan bozor, chunki u ishlab chiquvchilarga maʼlumotlar bazalari bilan bevosita ishlash imkonini beradi va muntazam ishlarni minimallashtiradi. Provayder yuqori mavjudlik va oson masshtablash, ma'lumotlar bazasini tuzatish, zaxira nusxalarini yaratish va ishlashni sozlashni ta'minlash majburiyatini oladi.

Ochiq manbaga asoslangan xizmat sifatida ikki turdagi ma'lumotlar bazasi va Kubernetes ko'rinishidagi muqobil

Ochiq ma'lumotlar bazalari uchun xizmat sifatida ikki xil ma'lumotlar bazasi mavjud:

  1. Oson tarqatish va boshqarish uchun ma'muriyat orqa tomonida paketlangan standart ochiq manba mahsuloti.
  2. Ochiq manba bilan mos keladigan turli xil qo'shimchalar bilan rivojlangan tijorat yechimi.

Ikkala variant ham bulutlar o'rtasida ko'chish imkoniyatini kamaytiradi va ma'lumotlar va ilovalarning ko'chirish qobiliyatini kamaytiradi. Misol uchun, har xil turdagi bulutlar bir xil standart MySQL-ni qo'llab-quvvatlashiga qaramay, ular o'rtasida sezilarli farqlar mavjud: ishlash, ishlash, zaxiralash va boshqalar. Bir bulutdan boshqasiga o'tish, ayniqsa murakkab ilovalar uchun qiyin bo'lishi mumkin.

Va bu erda savol tug'iladi - Ma'lumotlar bazasini Xizmat sifatida, lekin oddiy ochiq manba echimi sifatida olish mumkinmi?

Yomon xabar shundaki, afsuski, bozorda hali bunday echimlar yo'q. Yaxshi xabar shundaki, bunday echimlarni amalga oshirishga imkon beruvchi Kubernetes mavjud.

Kubernetes bulut yoki maʼlumotlar markazi uchun operatsion tizim boʻlib, u sizga ilovani bitta xostda emas, balki klasterdagi bir nechta serverlarda joylashtirish va boshqarish imkonini beradi.

Endi Kubernetes bunday dasturiy ta'minot toifasida yetakchi hisoblanadi. Bunday muammolar uchun juda ko'p turli xil echimlar mavjud edi, ammo bu standart bo'ldi. Ilgari muqobil echimlarga e'tibor qaratgan ko'plab kompaniyalar endi Kubernetes-ni qo'llab-quvvatlash uchun o'z mahsulotlarini moslashtirishga e'tibor qaratmoqda.

Bundan tashqari, Kubernetes ko'plab sotuvchilarning shaxsiy, ommaviy va gibrid bulutlarida qo'llab-quvvatlanadigan universal echimdir, masalan: AWS, Google Cloud, Microsoft Azure, Mail.ru bulutli echimlar.

Kubernetes ma'lumotlar bazalari bilan qanday ishlaydi

Kubernetes dastlab ma'lumotlarni qayta ishlaydigan, lekin mikroservislar yoki veb-ilovalar kabi hech narsani saqlamaydigan fuqaroligi bo'lmagan ilovalar uchun mo'ljallangan. Ma'lumotlar bazalari spektrning boshqa uchida joylashgan, ya'ni ular statistik ilovalardir. Va Kubernetes dastlab bunday ilovalar uchun mo'ljallanmagan.

Biroq, Kubernetes-da yaqinda paydo bo'lgan ma'lumotlar bazalari va boshqa statistik ilovalardan foydalanishga imkon beruvchi xususiyatlar mavjud:

  1. StatefulSet kontseptsiyasi podkastlarning ishini to'xtatish va Graceful Shutdown (ilovani oldindan aytib bo'ladigan o'chirish) ni amalga oshirish bilan bog'liq voqealarni qayta ishlash uchun primitivlarning butun seriyasidir.
  2. Doimiy hajmlar - bu podlar, Kubernetes boshqaruv ob'ektlari bilan bog'langan ma'lumotlar do'konlari.
  3. Operator Framework - bu ko'plab tugunlar bo'ylab taqsimlangan ma'lumotlar bazalari va boshqa davlat dasturlarini boshqarish uchun komponentlarni yaratish qobiliyati.

Hozirda ommaviy bulutlarda xizmat sifatida katta ma'lumotlar bazalari mavjud bo'lib, ularning orqa tomoni Kubernetes, masalan: CockroachCloud, InfluxDB, PlanetScale. Ya'ni, Kubernetesdagi ma'lumotlar bazasi nafaqat nazariy jihatdan mumkin bo'lgan narsa, balki amalda ham ishlaydi.

Percona Kubernetes uchun ikkita ochiq manbali echimga ega:

  1. MongoDB uchun Percona serveri uchun Kubernetes operatori.
  2. XtraDB CLUSTER uchun Kubernetes Operator bu MySQL bilan mos keladigan va yuqori mavjudlik va izchillikni ta'minlaydigan xizmatdir. Agar yuqori mavjudlik kerak bo'lmasa, masalan, ishlab chiqaruvchi ma'lumotlar bazasi uchun bitta tugunni ham ishlatishingiz mumkin.

Kubernetes foydalanuvchilarini ikki guruhga bo'lish mumkin. Ba'zi odamlar Kubernetes Operatorlaridan to'g'ridan-to'g'ri foydalanadilar - bular asosan texnologiya qanday ishlashini yaxshi tushunadigan ilg'or foydalanuvchilardir. Boshqalar uni backendda ishlaydi - bunday foydalanuvchilar ma'lumotlar bazasi xizmat sifatida qiziqishadi, ular Kubernetesning nuanslarini o'rganishni xohlamaydilar. Ikkinchi guruh foydalanuvchilar uchun bizda yana bir ochiq manbali yechim bor - Percona DBaaS CLI Tool. Bu texnologiyani chuqur tushunmagan holda Kubernetes asosidagi ochiq manba DBaaS ni olishni istaganlar uchun eksperimental yechimdir.

Google Kubernetes Engine-da Percona-ning DBaaS-ni qanday ishlatish kerak

Google Kubernetes Engine, mening fikrimcha, Kubernetes texnologiyasining eng funktsional ilovalaridan biri. U dunyoning ko'plab mintaqalarida mavjud va oddiy va qulay buyruq qatori vositasiga (SDK) ega bo'lib, platformani qo'lda boshqarish o'rniga skriptlarni yaratish imkonini beradi.

Bizning DBaaS ishlashi uchun bizga quyidagi komponentlar kerak bo'ladi:

  1. Kubectl.
  2. Google Cloud SDK.
  3. Percona DBaaS CLI.

kubectl-ni o'rnating

Sizning operatsion tizimingiz uchun paketni o'rnatamiz, biz Ubuntu misolini ko'rib chiqamiz. Batafsil shu yerda.

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 o'rnatilmoqda

Dastur paketini xuddi shu tarzda o'rnatamiz. Batafsil ma'lumot shu yerda.

# 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 o'rnatilmoqda

Percona omborlaridan o'rnating. Percona DBaaS CLI Tool hali ham eksperimental mahsulot bo‘lib qolmoqda, shuning uchun u tajriba omborida joylashgan bo‘lib, sizda Percona omborlari allaqachon o‘rnatilgan bo‘lsa ham alohida yoqilishi kerak.

Nizom shu yerda.

O'rnatish algoritmi:

  1. Percona repozitariylarini percona-release vositasidan foydalanib o'rnating. Avval Percona-dan rasmiy percona-reliz paketini yuklab olishingiz va o'rnatishingiz kerak:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Tajribaviy vositalar ombori komponentini quyidagicha yoqing:
    sudo percona-release enable tools experimental
    
  3. Percona-dbaas-cli paketini o'rnating:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Komponentlarning ishlashini sozlash

Sozlamalar haqida batafsil shu yerda.

Avval siz Google hisobingizga kirishingiz kerak. Bundan tashqari, Google Cloud bir foydalanuvchiga ko'plab mustaqil loyihalarga ega bo'lish imkonini beradi, shuning uchun siz ushbu loyiha uchun kod yordamida ishlaydigan loyihani belgilashingiz kerak:

gcloud auth login
gcloud config set project hidden-brace-236921

Keyinchalik, biz klaster yaratamiz. Namoyish uchun men faqat uchta tugundan iborat Kubernetes klasterini yaratdim - bu yuqori mavjudlik uchun minimal talab:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

Quyidagi kubectl buyrug'i hozirgi foydalanuvchimizga kerakli imtiyozlarni beradi:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Keyin nomlar maydoni yaratamiz va uni faol qilamiz. Nomlar maydoni, taxminan, loyiha yoki muhit kabi, lekin allaqachon Kubernetes klasterida. U Google Cloud loyihalaridan mustaqil:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

Klasterni ishga tushirish

Ushbu bir necha bosqichlarni bajarganimizdan so'ng, biz ushbu oddiy buyruq bilan uchta tugunli klasterni boshlashimiz mumkin:

# 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

Klasterga qanday ulanish mumkin

Odatiy bo'lib, u faqat Kubernetes ichida mavjud. Ya'ni, siz "Yaratish" buyrug'ini ishga tushirgan ushbu serverdan unga kirish imkoni yo'q. Uni mavjud qilish uchun, masalan, mijoz bilan testlar uchun, siz portni Port Mapping orqali yo'naltirishingiz kerak:

kubectl port-forward svc/example-proxysql 3306:3306 $

Keyin MySQL mijozingizni ulaymiz:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Kengaytirilgan klasterni boshqarish buyruqlari

Umumiy IP bo'yicha ma'lumotlar bazasi

Agar siz klaster mavjudligi uchun doimiyroq yechimni istasangiz, tashqi IP manzilini olishingiz mumkin. Bunday holda, ma'lumotlar bazasiga istalgan joydan kirish mumkin bo'ladi. Bu kamroq xavfsiz, lekin ko'pincha qulayroq. Tashqi IP uchun biz quyidagi buyruqdan foydalanamiz:

# 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

Parolni aniq belgilang

Tizim tasodifiy parol yaratish o'rniga, siz parolni aniq belgilashingiz mumkin:

# 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

Men skriptlarning chiqishini odam o'qiy oladigan formatda ko'rsatyapman, lekin JSON formati ham qo'llab-quvvatlanadi.

Yuqori mavjudlikni o'chirish

Quyidagi buyruq yordamida siz bitta tugunni joylashtirish uchun yuqori mavjudligini o'chirib qo'yishingiz mumkin:

# 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

Bu MySQL-ni imkon qadar tez va oson ishga tushirish, sinovdan o'tkazish va keyin uni o'chirish yoki ishlab chiqish uchun ishlatish uchun sinov vazifalari uchun yechimdir.

Percona DBaaS CLI vositasi Kubernetes-da DBaaS-ga o'xshash yechimga erishishga yordam beradi. Shu bilan birga, biz uning funksionalligi va qulayligi ustida ishlashda davom etamiz.

Ushbu hisobot birinchi marta taqdim etilgan @Ma'lumotlar bazalari uchrashuvi Mail.ru Cloud Solutions&Tarantool tomonidan. Qarang видео boshqa chiqishlar va Telegram’dagi voqealar anonsiga obuna bo‘ling Mail.ru guruhida Kubernetes atrofida.

Mavzu bo'yicha yana nimani o'qish kerak:

  1. Zamonaviy IIoT platformasidagi ma'lumotlar bazalari.
  2. Loyiha uchun ma'lumotlar bazasini qanday tanlash kerak, shuning uchun siz yana tanlov qilishingiz shart emas.

Manba: www.habr.com

a Izoh qo'shish