Minu nimi on Peeter Zaitsev, olen tegevjuht ja asutaja ja tahan rääkida:
- kuidas me open source-lahendustest jõudsime Database as a Service'i;
- millised on lähenemisviisid andmebaaside väljakirjutamisele pilves;
- kuidas Kubernetes suudab asendada DBaaS-i, hajutades sõltuvusi tarnijatest ja säilitades andmebaasi teenusena lihtsuse.
Artikkel on koostatud Mail.ru Cloud Solutions & Tarantooli @Databases Meetup'i ettekande põhjal. Kui te ei soovi lugeda, saate vaadata:

Kuidas me open source'ist jõudsime Database as a Service'ini pilves
Olen open source'iga tegelenud 90ndate lõpust. Kakskümmend aastat tagasi ei olnud open source'i kasutamine, näiteks andmebaaside puhul, sugugi nii lihtne. Tuli allalaadida lähtekood, seda patšida, kompileerida ja alles siis kasutada.
Seejärel läbis open source mitmeid lihtsustamisi:
- lähtekoodid Tar.gz ja INSTALL, millede kompileerimine oli vajalik;
- paketid sõltuvustega nagu .deb ja .rpm, kus tuli installida ainult pakettide komplekt;
- pakettide hoidlad nagu APT ja YUM, mille abil toimus installatsioon automaatselt;
- lahendused nagu Docker ja Snap, mis võimaldavad saada pakette installatsiooni käigus ilma väliste sõltuvusteta.
Seega on avatud tarkvara kasutamine muutunud lihtsamaks ning koodiarendusse sisenemise barjäär on vähenenud.
Samas, erinevalt kahekümne aasta tagusest olukorrast, mil kõik olid eksperdid kompileerimise osas, ei oska praegu enamik arendajatest kasutada lähtekoodidest kasutatavaid tööriistu.
Tegelikult pole see halb, kuna:
- Me saame kasutada keerukamaid, kuid mugavamaid tarkvaralahendusi. Näiteks on brauser mugav kasutada, kuid see sisaldab palju open source-i komponente, seda on keeruline nullist üles ehitada.
- Rohkem inimesi saavad avatud lähtekoodiga ja muu tarkvara arendajateks, rohkem tarkvara kasutab äris, tõuseb vajadus selle järele.
Negatiivne külg on järgmine lihtsustamise samm, mis on seotud pilvelahenduste kasutamisega, mis toob endaga kaasa teatud tarnija lukustumise, st ühe tarnijaga seotud olemise. Me kasutame lihtsaid lahendusi ja teenusepakkujad kasutavad open source-i komponente, kuid tegelikult on nad seotud ühe suure pilveteenuse pakkujaga. Seega on kõige lihtsam ja kiirem viis avatud lähtekoodiga (ja selle ühetaolise tarkvara) kasutamiseks pilves, kasutades proprietary API-t.
Kui rääkida andmebaasidest pilves, on kaks lähenemisviisi:
- Koguda andmebaasi infrastruktuur nagu tavalises andmekeskuses. See tähendab standardsete komponentide kasutamist: arvutus, salvestus jne, installida neile Linux, andmebaas, seadistada.
- Kasutada Database as a Service'i, kus teenusepakkuja pakub juba valmis andmebaasi pilves.
Praegu on DBaaS kiiresti kasvav turg, kuna see teenus võimaldab arendajatel töötada andmebaasidega otse ja minimeerib rutiinset tööd. Teenusepakkuja vastutab High Availability (kõrge kättesaadavuse) ja kerge skaleeritavuse, andmebaasi patchimise, varundamise ja jõudluse seadistamise eest.
Kaks tüüpi Database as a Service avatud lähtekoodiga ja alternatiiv Kubernetes'ile
On kaks tüüpi Database as a Service avatud andmebaaside jaoks:
- Tavaline open source-toode, mis on pakitud haldustagamiseks, mis lihtsustab installimist ja haldamist.
- Arendatud kommertslahendus erinevate täiustustega, mis on ühildatav open source'iga.
Mõlemad variandid vähendavad migreerimise võimalusi pilvede vahel, vähendavad andmete ja rakenduste kaasaskantavust. Näiteks, kuigi erinevad pilvetüübid toetavad põhimõtteliselt sama standardset MySQL-i, on nende vahel märkimisväärseid erinevusi: töö, jõudlus, varundamine jne. Migreerimine ühest pilvest teise võib olla keeruline, eriti keerukate rakenduste puhul.
Ja siis tekib küsimus — kas on võimalik saada Database as a Service'i mugavust, kuid avatud lähtekoodiga lahendusena?
Halb uudis on see, et kahjuks hetkel selliseid lahendusi turul ei ole. Hea uudis on see, et olemas on Kubernetes, mis võimaldab selliseid lahendusi teostada.
Kubernetes on operatsioonisüsteem pilves või andmekeskuses, mis võimaldab rakenduse paigaldamist ja haldamist paljude serverite klastris, mitte ühel hostil.
Praegu on Kubernetes liider sarnaste tarkvarade kategoorias. Selliste ülesannete jaoks on olnud palju erinevaid lahendusi, kuid just see on saanud standardiks. Paljud ettevõtted, kes varem tegelesid alternatiivsete lahendustega, keskenduvad nüüd oma toodete kohandamisele Kubernetes'e toetamiseks.
Lisaks on Kubernetes universaalne lahendus, mida toetatakse paljude tarnijate privaatsetes, avalikes ja hübriidpilvedes, näiteks: AWS, Google Cloud, Microsoft Azure, .
Kuidas Kubernetes toimib andmebaasidega
Kubernetes loodi algselt stateless-rakenduste jaoks, mis töötlevad andmeid, kuid ei salvestata midagi, näiteks mikroteenused või veebirakendused. Andmebaasid on spektri teises otsas, s.t need on stateful-rakendused. Ja Kubernetes ei olnud algselt selliste rakenduste jaoks mõeldud.
Kuid on funktsioone, mis on hiljuti Kubernetesesse lisatud ja võimaldavad kasutada andmebaase ja teisi stateful-rakendusi:
- StatefulSet kontseptsioon — terve rida primitiivide jaoks, et käsitleda podide töökatkestamisega seotud sündmusi ja teostada Graceful Shutdown (ennustatav rakenduse lõpetamine).
- Persistent Volumes — andmete ladustamisruumid, mis on seotud podide ja Kubernetes'e juhtimisobjektidega.
- Operator Framework — see tähendab võimalust luua komponente andmebaaside ja teiste stateful-rakenduste haldamiseks, jagatuna paljudele sõlmedele.
Juba praegu on avalikes pilvedes suured Database as a Service, mille tagaplaanil on Kubernetes, näiteks: CockroachCloud, InfluxDB, PlanetScale. See tähendab, et andmebaasi kasutamine Kuberneteses ei ole ainult teoreetiliselt võimalik, vaid ka praktikas toimiv.
Perconal on kaks open source lahendust Kubernetes'ele:
- Kubernetes Operator for Percona Server for MongoDB.
- Kubernetes Operator for XtraDB CLUSTER — teenus, mis on ühilduv MySQL-iga, tagab kõrge kättesaadavuse ja järjepidevuse. Tõeliselt saab kasutada ka ühte sõlme, kui kõrge kättesaadavus ei ole vajalik, näiteks dev andmebaasi jaoks.
Kubernetes'e kasutajad saab jagada kahte rühma. Ühed kasutavad Kubernetes Operators otse — need on peamiselt edasijõudnud kasutajad, kes mõistavad tehnoloogia toimimist. Teised käivitavad selle tagaplaanil — neid kasutajaid huvitab rohkem Database as a Service, nad ei soovi süveneda Kubernetes'e töödetailidesse. Teiseks kasutajagrupiks on meil veel üks open source lahendus — Percona DBaaS CLI Tool. See on eksperimentaalne lahendus neile, kes soovivad saada open source DBaaS-i Kubernetes'e põhjal ilma sügava tehnoloogiateadmiseta.
Kuidas käivitada Percona DBaaS Google Kubernetes Engine'is
Google Kubernetes Engine on minu arvates üks kõige funktsionaalsemaid Kubernetes'e tehnoloogia rakendusi. See on saadaval paljudes maailma piirkondades ja omab lihtsat ning mugavat Command Line Tool'i (SDK), mis võimaldab luua skripte, mitte hallata platvormi käsitsi.
Kuna meie DBaaS tööle hakkaks, on vajalikud järgnevad komponendid:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Käivitame kubectl
Installime paketi teie operatsioonisüsteemile, vaatame näiteks Ubuntu näitel. Lisainfot .
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
Käivitame Google Cloud SDK
Sarnane käitumine, installime tarkvara paketi. Lisainfot .
# 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
Käivitame Percona DBaaS CLI
Installime Percona repode kaudu. Percona DBaaS CLI Tool on toode, mis on praegu alles eksperimentaalne, seega asub see eksperimentaalses repos, mille peate eraldi lubama, isegi kui teil on juba Percona repositooriumid installitud.
Rohkem .
Installimise algoritm:
- Seadistage Percona repositooriumid percona-release tööriista abil. Esiteks peate allalaadima ja installima Percona ametliku percona-release paketi:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb - Luba tööriistade eksperimentaalne komponendirepositoorium järgmiselt:
sudo percona-release enable tools experimental - Installige percona-dbaas-cli pakett:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Sätime komponentide tööd
Rohkem infot seadistuste kohta .
Esiteks peate sisse logima oma Google'i kontole. Eelnevalt Google Cloud võimaldab ühel kasutajal omada mitmeid sõltumatuid projekte, seetõttu on vajalik määrata töömudeli projekt, kasutades selle projekti koodi:
gcloud auth login
gcloud config set project hidden-brace-236921
Seejärel loome klastrit. Demoks lõin Kubernetes-klastri, mis koosneb kolmest voznust — see on minimaalne, mis on vajalik kõrge kättesaadavuse tagamiseks:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
Järgmine käsk kubectl annab meie kasutajale vajalikud õigused:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)Seejärel loome namespace'i ja aktiveerime selle. Namespace on nagu projekt või keskkond, kuid juba Kubernetes-klastri sees. See on sõltumatu Google Cloud'i projektidest:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Käivitame klastrit
Pärast nende mõne sammu läbimist saame klastrit kolmest sõlmest käivitada järgmise lihtsa käsuga:
# 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
Kuidas klastriga ühendust võtta
Vaikimisi on see saadaval ainult Kuberneteses. See tähendab, et serverist, kus te käsu 'Loo' käivitasite, ei ole see saadaval. Selleks, et see oleks kergesti kergesti kättesaadav, näiteks klientide testimiseks, tuleb port avada Port Mappingi kaudu:
kubectl port-forward svc/example-proxysql 3306:3306 $Seejärel ühendame teie MySQL-klient:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Täpsemad klastrihaldamise käsud
Andmebaas avalikus IP-s
Kui soovite püsivamat lahendust klastrile juurdepääsuks, saate välise IP-aadressi. Sellisel juhul on andmebaas kättesaadav kus iganes. See on vähem turvaline, kuid sageli mugavam. Välise IP saamiseks kasutame järgmist käsku:
# 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
Sätete parool
Selle asemel, et süsteem genereeriks parooli juhuslikult, saate parooli seada selgelt:
# 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
Käitan skripti väljundit loetaval kujul, kuid toetan ka JSON-formaati.
Lülitame välja kõrge kättesaadavuse
Järgnev käsk lülitab välja kõrge kättesaadavuse, et juurutada üksik sõlm:
# 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
See on lahendus katsetamiseks, et võimalikult kiiresti ja lihtsalt üles seada MySQL, testida ja hiljem sulgeda või kasutada arendamiseks.
Percona DBaaS CLI tööriist aitab luua Kubernetesel põhinevat DBaaS lahendust. Me jätkame selle funktsionaalsuse ja kasutatavuse arendamist.
See ettekannet kõlas esmakordselt by Mail.ru Cloud Solutions& Tarrantool. Vaata teisi ettekandeid ja tellige ürituste teateid Telegramis .
Mida veel selle teema kohta lugeda:
Allikas: habr.com
