DBaaS-ийг орлож чадах Kubernetes ашиглан эрлийз үүл хэрхэн бүтээх вэ

Намайг Петр Зайцев гэдэг, би гүйцэтгэх захирал, үүсгэн байгуулагч Перкона мөн би танд хэлэхийг хүсч байна:

  • бид хэрхэн нээлттэй эхийн шийдлүүдээс өгөгдлийн санг үйлчилгээ болгон ашиглах болсон;
  • Өгөгдлийн санг үүлэн дээр байрлуулах ямар арга замууд байдаг;
  • Kubernetes нь DBaaS-ийг хэрхэн сольж, борлуулагчаас хараат байдлыг арилгаж, DBMS-ийн энгийн үйлчилгээг үйлчилгээ болгон хадгалах боломжтой.

Нийтлэлийг Mail.ru Cloud Solutions & Tarantool-ийн @Database Meetup дээр хийсэн тайланд үндэслэн бэлтгэсэн. Уншихыг хүсэхгүй байгаа бол үзэх боломжтой:


Бид хэрхэн нээлттэй эх сурвалжаас үүлэн доторх Үйлчилгээний мэдээллийн сантай болсон

Би 90-ээд оны сүүлээс нээлттэй эх сурвалж дээр ажиллаж байна. Хорин жилийн өмнө мэдээллийн сан гэх мэт нээлттэй эх сурвалжийг ашиглах нь тийм ч амар байгаагүй. Эх кодыг татаж аваад нөхөж, эмхэтгээд дараа нь ашиглах шаардлагатай байсан.

Нээлттэй эх сурвалж нь дараа нь хэд хэдэн хялбаршуулсан хувилбаруудыг давсан:

  • Tar.gz болон эмхэтгэх шаардлагатай INSTALL эх сурвалжууд;
  • .deb ба .rpm зэрэг хамаарал бүхий багцууд, үүнд та зөвхөн багц багц суулгах шаардлагатай;
  • APT болон YUM ​​зэрэг багцын агуулахууд, суулгацыг автоматаар хийдэг;
  • Docker болон Snap зэрэг шийдлүүд нь гадны хамааралгүйгээр суулгацаар багц хүлээн авах боломжийг олгодог.

Үүний үр дүнд нээлттэй эхийн програм хангамжийг ашиглах нь илүү хялбар болж, ийм програмыг хөгжүүлэхэд нэвтрэх саад бэрхшээлийг бууруулдаг.

Үүний зэрэгцээ, 20 жилийн өмнөх нөхцөл байдлаас ялгаатай нь хүн бүр угсралтын мэргэжилтэн байсан бол одоо ихэнх хөгжүүлэгчид ашигладаг хэрэгслүүдээ эх сурвалжаас барьж чадахгүй байна.

Үнэндээ энэ нь тийм ч муу биш, учир нь:

  1. Бид илүү төвөгтэй боловч хэрэглэгчдэд ээлтэй програм хангамж ашиглаж болно. Жишээлбэл, хөтөч ашиглахад тохиромжтой боловч олон нээлттэй эхийн бүрэлдэхүүн хэсгүүдийг агуулдаг бөгөөд эхнээс нь бүтээхэд тохиромжгүй байдаг.
  2. Илүү олон хүн нээлттэй эхийн болон бусад программ хангамжийн хөгжүүлэгч болж чадна, илүү олон программ хангамжийг бизнесүүд ашиглаж, хэрэгцээ нь нэмэгддэг.

Сул тал нь хялбаршуулах дараагийн алхам нь үүлэн шийдлүүдийг ашиглахтай холбоотой бөгөөд энэ нь тодорхой борлуулагчийг түгжих, өөрөөр хэлбэл нэг нийлүүлэгчтэй холбоход хүргэдэг. Бид энгийн шийдлүүдийг ашигладаг бөгөөд үйлчилгээ үзүүлэгчид нээлттэй эхийн бүрэлдэхүүн хэсгүүдийг ашигладаг боловч үнэндээ тэдгээр нь том үүлний аль нэгэнд хадсан байдаг. Өөрөөр хэлбэл, нээлттэй эх сурвалжийг (мөн үүнтэй нийцтэй програм хангамжийг) ашиглах хамгийн хялбар бөгөөд хурдан арга бол өмчийн API ашиглан үүлэн доторх явдал юм.

Үүлэн дэх өгөгдлийн сангийн тухай ярихад хоёр арга бий.

  1. Энгийн дата төвийн нэгэн адил мэдээллийн сангийн дэд бүтцийг угсарна. Өөрөөр хэлбэл, стандарт барилгын блокуудыг авах: тооцоолох, хадгалах гэх мэт, тэдгээрт Линукс болон мэдээллийн баазыг суулгаж, тохируулах.
  2. Үйлчилгээ үзүүлэгч нь үүлэн доторх бэлэн мэдээллийн санг санал болгодог Өгөгдлийн санг үйлчилгээ болгон ашигла.

DBaaS нь хөгжүүлэгчдэд мэдээллийн сантай шууд ажиллах боломжийг олгож, ердийн ажлыг багасгах боломжийг олгодог учраас яг одоо хурдацтай хөгжиж буй зах зээл юм. Үйлчилгээ үзүүлэгч нь өндөр хүртээмжтэй байх, хялбархан масштаблах, мэдээллийн баазыг нөхөх, нөөцлөлт хийх, гүйцэтгэлийг тохируулах үүрэгтэй.

Нээлттэй эх сурвалж дээр суурилсан хоёр төрлийн өгөгдлийн сан ба Кубернетес хэлбэрийн өөр хувилбар

Нээлттэй мэдээллийн санд зориулсан хоёр төрлийн мэдээллийн сан байдаг.

  1. Хялбар байршуулах, удирдахад зориулж удирдлагын арын хэсэгт багцалсан стандарт нээлттэй эхийн бүтээгдэхүүн.
  2. Нээлттэй эх сурвалжтай нийцтэй төрөл бүрийн нэмэлтүүд бүхий арилжааны дэвшилтэт шийдэл.

Энэ хоёр сонголт нь үүлэн хооронд шилжих боломжийг багасгаж, өгөгдөл болон програмын зөөврийг бууруулдаг. Жишээлбэл, өөр өөр төрлийн үүл нь үндсэндээ ижил стандарт MySQL-ийг дэмждэг хэдий ч тэдгээрийн хооронд мэдэгдэхүйц ялгаа байдаг: ажиллагаа, гүйцэтгэл, нөөцлөлт гэх мэт. Нэг үүлнээс нөгөөд шилжих нь ялангуяа нарийн төвөгтэй програмуудын хувьд хэцүү байж болно.

Эндээс асуулт гарч ирж байна - Өгөгдлийн сангийн тав тухтай байдлыг үйлчилгээ болгон ашиглах боломжтой юу, гэхдээ энгийн нээлттэй эхийн шийдэл үү?

Муу мэдээ гэвэл харамсалтай нь зах зээл дээр ийм шийдэл хараахан гараагүй байна. Сайн мэдээ гэвэл ийм шийдлүүдийг хэрэгжүүлэх боломжийг олгодог Kubernetes байдаг.

Kubernetes нь үүлэн болон дата төвд зориулсан үйлдлийн систем бөгөөд танд нэг хост дээр биш кластер дахь олон серверт програмыг байршуулах, удирдах боломжийг олгодог.

Одоо Кубернетес бол ийм програм хангамжийн төрөлд тэргүүлэгч юм. Иймэрхүү асуудлыг шийдэх олон янзын шийдэл байсан ч энэ нь стандарт болсон. Альтернатив шийдлүүдэд анхаарлаа хандуулдаг байсан олон компаниуд одоо Kubernetes-ийг дэмжихийн тулд бүтээгдэхүүнээ дасан зохицоход анхаарлаа хандуулж байна.

Нэмж дурдахад, Kubernetes бол олон үйлдвэрлэгчдийн хувийн, нийтийн болон эрлийз үүлэнд дэмждэг бүх нийтийн шийдэл юм, жишээлбэл: AWS, Google Cloud, Microsoft Azure, Mail.ru үүлэн шийдэл.

Кубернетес мэдээллийн сантай хэрхэн ажилладаг вэ

Kubernetes нь анх өгөгдөл боловсруулдаг боловч бичил үйлчилгээ, вэб програм зэрэг юу ч хадгалдаггүй харьяалалгүй програмуудад зориулагдсан юм. Өгөгдлийн сан нь спектрийн нөгөө төгсгөлд байдаг, өөрөөр хэлбэл тэдгээр нь төлөвтэй програмууд юм. Мөн Кубернетес нь анхнаасаа ийм хэрэглээнд зориулагдаагүй байсан.

Гэсэн хэдий ч саяхан Кубернетес дээр өгөгдлийн сан болон бусад төлөвтэй програмуудыг ашиглах боломжийг олгодог функцууд бий.

  1. StatefulSet концепци нь pods-ийн ажлыг зогсоох, Graceful Shutdown (програмыг урьдчилан тааварлах боломжтой) хэрэгжүүлэх үйл явдлуудыг боловсруулахад зориулагдсан бүхэл бүтэн цуврал командууд юм.
  2. Байнгын боть нь pods, Kubernetes удирдлагын объектуудтай холбоотой мэдээллийн сангууд юм.
  3. Операторын хүрээ - өөрөөр хэлбэл олон зангилаанд тархсан мэдээллийн сан болон бусад төлөвтэй програмуудыг удирдах бүрэлдэхүүн хэсгүүдийг бий болгох чадвар.

Одоо нийтийн үүлэнд аль хэдийн үйлчилгээ хэлбэрээр томоохон мэдээллийн сангууд байдаг бөгөөд тэдгээрийн арын хэсэг нь Kubernetes, жишээлбэл: CockroachCloud, InfluxDB, PlanetScale. Өөрөөр хэлбэл, Кубернетес дээрх мэдээллийн сан нь онолын хувьд боломжтой зүйл төдийгүй практик дээр ажилладаг зүйл юм.

Percona нь Kubernetes-д зориулсан хоёр нээлттэй эхийн шийдэлтэй:

  1. MongoDB-д зориулсан Percona серверт зориулсан Kubernetes оператор.
  2. XtraDB CLUSTER-д зориулсан Kubernetes Operator нь MySQL-тэй нийцтэй үйлчилгээ бөгөөд өндөр хүртээмжтэй, тогтвортой байдлыг хангадаг. Хэрэв та өндөр хүртээмжтэй байх шаардлагагүй бол, жишээлбэл dev мэдээллийн санд зориулж нэг зангилаа ашиглаж болно.

Kubernetes-ийн хэрэглэгчдийг хоёр бүлэгт хувааж болно. Зарим хүмүүс Kubernetes Operators-ийг шууд ашигладаг - эдгээр нь технологи хэрхэн ажилладаг талаар сайн ойлголттой ахисан түвшний хэрэглэгчид юм. Бусад нь үүнийг backend дээр ажиллуулдаг - ийм хэрэглэгчид Database as a Service гэх мэт зүйлийг сонирхож байгаа тул Kubernetes-ийн нарийн ширийн зүйлийг судлахыг хүсэхгүй байна. Хоёрдахь бүлгийн хэрэглэгчдийн хувьд бид өөр нэг нээлттэй эхийн шийдэлтэй - Percona DBaaS CLI Tool. Энэ бол технологийн талаар гүнзгий ойлголтгүйгээр Kubernetes дээр суурилсан нээлттэй эхийн DBaaS авах хүсэлтэй хүмүүст зориулсан туршилтын шийдэл юм.

Google Kubernetes Engine дээр Percona-ийн DBaaS-ийг хэрхэн ажиллуулах вэ

Google Kubernetes Engine бол миний бодлоор Kubernetes технологийн хамгийн ажиллагаатай хэрэглүүрүүдийн нэг юм. Энэ нь дэлхийн олон бүс нутагт байдаг бөгөөд энгийн бөгөөд тохиромжтой Command Line Tool (SDK)-тэй бөгөөд энэ нь платформыг гараар удирдахын оронд скрипт үүсгэх боломжийг олгодог.

Манай DBaaS ажиллахын тулд бидэнд дараах бүрэлдэхүүн хэсгүүд хэрэгтэй.

  1. Kubectl.
  2. Google Cloud SDK.
  3. Percona 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 агуулах суулгасан байсан ч тусад нь идэвхжүүлэх шаардлагатай.

Дэлгэрэнгүй энд.

Суулгах алгоритм:

  1. Percona-release хэрэгслийг ашиглан Percona репозиторуудыг тохируулна уу. Эхлээд та Percona-аас албан ёсны percona-release багцыг татаж аваад суулгах хэрэгтэй:
    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 акаунт руу нэвтрэх хэрэгтэй. Цаашилбал, 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 дотор боломжтой. Энэ нь таны "Create" командыг ажиллуулсан серверээс хандах боломжгүй юм. Үүнийг ашиглах боломжтой болгохын тулд, жишээлбэл, үйлчлүүлэгчтэй хийсэн туршилтын хувьд та портыг портын зураглалаар дамжуулах хэрэгтэй:

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 хэрэгсэл нь Kubernetes дээр DBaaS шиг шийдэлд хүрэхэд тусална. Үүний зэрэгцээ бид түүний функциональ байдал, ашиглах боломжтой байдлын талаар үргэлжлүүлэн ажиллаж байна.

Энэ тайланг анх удаа танилцуулав @Databases Meetup Mail.ru Cloud Solutions&Tarantool. Хараач видео бусад үзүүлбэрүүд болон Telegram дээр үйл явдлын зарлалыг захиалах Mail.ru групп дэх Кубернетесийн эргэн тойронд.

Энэ сэдвээр өөр юу унших вэ:

  1. Орчин үеийн IIoT платформ дахь мэдээллийн сан.
  2. Төслийн мэдээллийн санг хэрхэн сонгох вэ, ингэснээр дахин сонгох шаардлагагүй болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх