DBaaS алмастыра алатын Kubernetes көмегімен гибридті бұлтты қалай құруға болады

Менің атым Петр Зайцев, мен бас директор, негізін қалаушымын Перкона және мен сізге айтқым келеді:

  • Дерекқорға қызмет ретінде ашық бастапқы шешімдерден қалай келдік;
  • бұлтта дерекқорды орналастырудың қандай тәсілдері бар;
  • Kubernetes қалай DBaaS ауыстыра алады, бұл жеткізушіге тәуелділікті жояды және ДҚБЖ қызмет ретінде қарапайымдылығын сақтайды.

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


Ашық дереккөзден бұлттағы қызмет ретінде Дерекқорға қалай келдік

Мен 90-жылдардың аяғынан бастап ашық кодта жұмыс істеймін. Жиырма жыл бұрын дерекқорлар сияқты ашық бастапқы кодты пайдалану оңай болған жоқ. Бастапқы кодты жүктеп алып, оны түзетіп, құрастырып, содан кейін ғана пайдалану керек болды.

Содан кейін ашық бастапқы код бірқатар жеңілдетулерден өтті:

  • Tar.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 бұлтты шешімдері.

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 DBaaS жүйесін қалай іске қосуға болады

Google Kubernetes Engine, менің ойымша, Kubernetes технологиясының ең функционалды іске асыруларының бірі. Ол әлемнің көптеген аймақтарында қолжетімді және платформаны қолмен басқарудың орнына сценарийлер жасауға мүмкіндік беретін қарапайым және ыңғайлы пәрмен жолы құралы (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 репозиторийлерін перконаны босату құралы арқылы орнатыңыз. Алдымен 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. Қайта таңдаудың қажеті болмас үшін жоба үшін дерекқорды қалай таңдауға болады.

Ақпарат көзі: www.habr.com

пікір қалдыру