DBaaSди алмаштыра турган Kubernetes аркылуу гибриддик булутту кантип куруу керек

Менин атым Петр Зайцев, мен башкы директормун, негиздөөчүсү percona жана мен сага айткым келет:

  • биз ачык булактуу чечимдерден маалымат базасына кызмат катары кантип келдик;
  • булуттагы маалымат базаларын жайылтуу үчүн кандай ыкмалар бар;
  • Kubernetes кантип DBaaSди алмаштыра алат, сатуучудан көз карандылыкты жок кылат жана СББнын кызмат катары жөнөкөйлүгүн сактап калат.

Макала Mail.ru Cloud Solutions & Tarantool тарабынан @Databases Meetup сайтындагы отчеттун негизинде даярдалган. Окууну каалабасаңыз, көрө аласыз:


Биз ачык булактан булуттагы кызмат катары берилиштер базасына кантип келдик

Мен 90-жылдардын аягынан бери ачык булакта иштейм. Жыйырма жыл мурун, маалымат базалары сыяктуу ачык булакты колдонуу оңой болгон жок. Бул баштапкы кодду жүктөп алуу, аны жамоо, компиляциялоо жана андан кийин гана колдонуу керек болчу.

Андан кийин ачык булак бир катар жөнөкөйлөтүүлөрдөн өттү:

  • Тар.gz жана INSTALL булактары түзүлүшү керек;
  • .deb жана .rpm сыяктуу көз карандылыктары бар топтомдор, мында пакеттердин топтомун орнотуу керек;
  • APT жана YUM сыяктуу пакет репозиторийлери, алар менен орнотуу автоматтык түрдө;
  • тышкы көз карандылыксыз орнотуу аркылуу пакеттерди алууга мүмкүндүк берген Docker жана Snap сыяктуу чечимдер.

Натыйжада, бул ачык программалык камсыздоону колдонуу оңой болуп, ошондой эле мындай тиркемелерди иштеп чыгууга кирүү тоскоолдуктарын азайтат.

Ошол эле учурда, 20 жыл мурунку кырдаалдан айырмаланып, ар бир адам монтаждоо боюнча адис болгон, азыр көпчүлүк иштеп чыгуучулар колдонгон куралдарды булактан кура алышпайт.

Чынында, бул жаман эмес, анткени:

  1. Биз татаал, бирок колдонуучуга ыңгайлуу программаны колдоно алабыз. Мисалы, браузер колдонууга ыңгайлуу, бирок ал көптөгөн ачык булак компоненттерин камтыйт жана нөлдөн баштап куруу ыңгайсыз.
  2. Көбүрөөк адамдар ачык булактуу жана башка программалык камсыздоону иштеп чыгуучулар боло алышат, ишканалар көбүрөөк программалык камсыздоону колдонушат жана ага болгон муктаждык көбүрөөк.

Кемчилиги жөнөкөйлөштүрүүнүн кийинки кадамы булут чечимдерин колдонуу менен байланышкан жана бул белгилүү бир сатуучунун кулпусуна алып келет, башкача айтканда, бир жеткирүүчүгө байланыштырат. Биз жөнөкөй чечимдерди колдонушат жана провайдерлер ачык булак компоненттерин колдонушат, бирок чындыгында алар чоң булуттардын бирине кагылган. Башкача айтканда, ачык булакты (жана аны менен шайкеш программалык камсыздоону) жайылтуунун эң оңой жана эң ылдам жолу булутта, менчик API аркылуу.

Булуттагы маалымат базаларына келгенде, эки ыкма бар:

  1. Кадимки маалымат борборундагыдай маалымат базасынын инфраструктурасын чогултуңуз. Башкача айтканда, стандарттык курулуш блокторун алыңыз: эсептөө, сактоо жана башкалар, аларга Linux жана маалымат базасын орнотуп, аларды конфигурациялаңыз.
  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. Туруктуу көлөмдөр - бул поддондор, Kubernetes башкаруу объектилери менен байланышкан маалымат кампалары.
  3. Operator Framework - башкача айтканда, көптөгөн түйүндөр боюнча бөлүштүрүлгөн маалымат базаларын жана башка мамлекеттик тиркемелерди башкаруу үчүн компоненттерди түзүү мүмкүнчүлүгү.

Азыртадан эле коомдук булуттарда Кызмат катары чоң маалымат базалары бар, анын аркасы Kubernetes, мисалы: CockroachCloud, InfluxDB, PlanetScale. Башкача айтканда, Kubernetes боюнча маалымат базасы теориялык жактан мүмкүн болгон нерсе эмес, ошондой эле иш жүзүндө иштей турган нерсе.

Percona Kubernetes үчүн эки ачык булак чечими бар:

  1. MongoDB үчүн Percona сервери үчүн Kubernetes оператору.
  2. XtraDB CLUSTER үчүн Kubernetes Оператору бул MySQL менен шайкеш келген жана жогорку жеткиликтүүлүктү жана ырааттуулукту камсыз кылган кызмат. Эгер жогорку жеткиликтүүлүк керек болбосо, бир түйүндү да колдоно аласыз, мисалы, иштеп чыгуучу база үчүн.

Kubernetes колдонуучулар эки топко бөлүүгө болот. Кээ бир адамдар Kubernetes Операторлорун түз колдонушат - булар негизинен технологиянын кантип иштээрин жакшы түшүнгөн алдыңкы колдонуучулар. Башкалары аны бэкендинде иштетишет - мындай колдонуучулар Кызмат катары берилиштер базасы сыяктуу нерсеге кызыгышат, алар Kubernetesтин нюанстарын изилдегиси келбейт. Колдонуучулардын экинчи тобу үчүн бизде дагы бир ачык булактуу чечим бар - Percona DBaaS CLI куралы. Бул технологияны терең түшүнбөстөн Kubernetes негизинде ачык булак DBaaS алууну каалагандар үчүн эксперименталдык чечим.

Google Kubernetes Engine'де Percona's 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 репозиторийлери орнотулган болсо да.

More бул жерде.

Орнотуу алгоритми:

  1. 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
  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 ичинде гана жеткиликтүү. Башкача айтканда, сиз "Түзүү" буйругун иштеткен бул серверден ага кирүү мүмкүн эмес. Аны жеткиликтүү кылуу үчүн, мисалы, кардар менен тесттер үчүн, сиз портту Порт картасы аркылуу багыттооңуз керек:

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 Groupтагы Kubernetes айланасында.

Тема боюнча дагы эмнени окуу керек:

  1. Заманбап IIoT платформасындагы маалымат базалары.
  2. Долбоор үчүн маалымат базасын кантип тандоо керек, ошондуктан кайра тандоонун кереги жок.

Source: www.habr.com

Комментарий кошуу