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

Kuidas jõudsime open source'ist Database as a Service'ini pilves
Olen tegelenud open source'iga alates 90ndate lõpust. Kakskümmend aastat tagasi oli open source'i, näiteks andmebaaside, kasutamine palju keerulisem. Tuleb alla laadida allikakood, teha kohandusi, kompileerida ja ainult siis kasutada.
Seejärel koges open source mitmeid lihtsustamisi:
- allikakoodid Tar.gz ja INSTALL, mida tuli kompileerida;
- sõltuvustega paketid, nagu .deb ja .rpm, kus tuleb lihtsalt installida paketikomplekt;
- pakettide hoidlad nagu APT ja YUM, mille abil toimub installimine automaatselt;
- lahendused nagu Docker ja Snap, mis võimaldavad pakette installida ilma väliste sõltuvusteta.
Kokkuvõttes muutub avatud tarkvara kasutamine lihtsamaks ning sisenemisbarjäär arendusse madalamaks.
Samuti, erinevalt olukorrast kakskümmend aastat tagasi, kus kõik olid eksperdid kokkupanekus, ei oska enamus arendajatest enam kasutada allikakoodist töövahendeid.
Tegelikult ei ole see halb, kuna:
- Saame kasutada keerulisemat, kuid mugavamat tarkvara. Näiteks brauser - selle kasutamine on mugav, kuid see sisaldab palju open source komponente, mille kokkupanek algusest peale on ebamugav.
- Rohkem inimesi saavad open source ja muu tarkvara arendajateks, rohkem tarkvara kasutab äri, kõrgem nõudlus selle järele.
Tagasi pöördumine - järgmine samm lihtsustamises on seotud pilvelahenduste kasutamisega, mis toob kaasa teatud sõltuvuse tarnijast, see tähendab, et sidutakse ühe pakkuja külge. Kasutame lihtsaid lahendusi ja teenusepakkujad kasutavad open source komponente, kuid nad on tegelikult kinni ühe suure pilvega. Seega on kõige lihtsam ja kiirem viis open source'i (ja ühilduva tarkvara) juurutamiseks pilvedes, kasutades patenditud API-d.
Kui rääkida andmebaasid pilves, on kaks lähenemist:
- Kogu andmebaasi infrastruktuur tuleb üles ehitada nagu tavalises andmekeskuses. See tähendab standardsete komponente: compute, storage ja nii edasi, nende peale paigaldatakse Linux, andmebaas, konfigureeritakse.
- Kasutage Database as a Service teenust, kus teenusepakkuja pakub juba valmis andmebaasi pilves.
Hetkel on DBaaS kiiresti kasvav turg, sest selline teenus võimaldab arendajatel andmebaasidega otseselt töötada ja vähendab rutiinset tööd. Teenusepakkuja vastutab High Availability (kõrge kättesaadavus) ja lihtsa skaleerimise, andmebaasi patchimise, varukoopiate tegemise, jõudluse seadistamise eest.
Kaks tüüpi Database as a Service avatud lähtekoodiga ja alternatiiv Kubernetesel põhinev.
On kaks tüüpi Database as a Service avatud andmebaasidele:
- Standardne avatud lähtekoodiga toode, mis on pakendatud haldustagamiseks, mis lihtsustab rakendamist ja haldamist.
- Täpsem kommertslahendus, millel on erinevad moodulid, mis on ühilduvad avatud lähtekoodiga.
Mõlemad variandid vähendavad migratsiooni võimalusi pilvede vahel, vähendavad andmete ja rakenduste ülekandmist. Näiteks, kuigi erinevad pilvetüübid toetavad põhimõtteliselt sama standardset MySQL, on nende vahel märkimisväärseid erinevusi: toimimises, jõudluses, varundamises ja nii edasi. Migratsioon ühelt pilvelt teisele võib olla keeruline, eriti keeruliste rakenduste puhul.
Ja siin tekib küsimus — kas on võimalik saada Database as a Service mugavust, kuid lihtsana avatud lähtekoodiga lahendusena?
Halb uudis on see, et kahjuks selliseid lahendusi turul praegu ei ole. Hea uudis on see, et on olemas Kubernetes, mis võimaldab selliseid lahendusi ellu viia.
Kubernetes on opsüsteem pilves või andmekeskuses, mis võimaldab rakendust teha ja hallata paljude serverite klastris, mitte ühel hostil.
Praegu on Kubernetes liider sarnase tarkvara kategoorias. Selliste ülesannete jaoks on olnud palju erinevaid lahendusi, kuid just temast on saanud standard. Paljud ettevõtted, kes varem tegelesid alternatiivsete lahendustega, keskenduvad nüüd oma toodete kohandamisele Kubernetesega ühilduvaks.
Lisaks on Kubernetes universaalne lahendus, mida toetavad paljude tarnijate privaatsetes, avalikes ja hübriidpilvedes, näiteks: AWS, Google Cloud, Microsoft Azure, .
Kuidas Kubernetes andmebaasidega töötab
Kubernetes loodi algselt stateless-rakenduste jaoks, mis töötlevad andmeid, kuid ei salvesta midagi, näiteks mikroteenused või veebirakendused. Andmebaasid on teisel pool spektrit, seega on need stateful-rakendused. Kubernetes ei olnud algselt mõeldud selliste rakenduste jaoks.
Siiski on olemas funktsioonid, mis on viimastel aegadel ilmunud Kubernetesesse ja võimaldavad kasutada andmebaase ja teisi stateful-rakendusi:
- Konseptsioon StatefulSet - terve rida primitiive, et hallata podide peatamise sündmusi ja teostada Graceful Shutdown (ennustatav rakenduse lõpetamine).
- Persistentsed mahud - andmete salvestuskohad, mis on seotud podidega, Kubernetes'i haldusobjektidega.
- Operator Framework - st võime luua komponente andmebaaside ja teiste stateful-rakenduste haldamiseks, mis on jaotatud paljude sõlmede vahel.
Juba praegu on avalikes pilvedes suurimaid Database as a Service teenuseid, mille taustal on Kubernetes, näiteks: CockroachCloud, InfluxDB, PlanetScale. See tähendab, et andmebaas Kuberneteses ei ole mitte ainult teoreetiliselt võimalik, vaid see töötab ka praktikas.
Perconal on kaks avatud lähtekoodiga lahendust Kuberneteseks:
- Kubernetes Operator Percona Server for MongoDB jaoks.
- Kubernetes Operator XtraDB CLUSTER jaoks - teenus, mis on ühilduv MySQL-iga, tagab kõrge saadavuse ja järjepidevuse. Samuti võib kasutada ühte sõlme, kui kõrge saadavus ei ole vajalik, näiteks arendusandmebaasi jaoks.
Kubernetes kasutajad võib jagada kahte rühma. Ühed kasutavad Kubernetes Operators otse - need on peamiselt edasijõudnud kasutajad, kes mõistavad tehnoloogia toimimist. Teised käivitavad selle taustal - neid kasutajaid huvitab midagi sarnast Database as a Service, nad ei soovi süveneda Kubernetes'i toimimise nüanssidesse. Teise rühma kasutajate jaoks on meil veel üks avatud lähtekoodiga lahendus - Percona DBaaS CLI Tool. See on katsetuslahendus neile, kes soovivad saada avatud lähtekoodiga DBaaS-i Kubernetesel ilma sügava tehnoloogia mõistmiseta.
Kuidas käivitada Percona DBaaS Google Kubernetes Engine'is
Google Kubernetes Engine, minu arvates, on üks kõige funktsionaalsemaid Kubernetes'i tehnoloogia teostusi. See on saadaval paljudes maailma piirkondades ja sellel on lihtne ning mugav käsuridade tööriist (SDK), mis võimaldab luua skripte, mitte juhtida platvormi käsitsi.
Kuna meie DBaaS peab tööle minema, on vajalikud järgmised komponendid:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Paigaldame kubectl
Paigaldame paketi teie operatsioonisüsteemile, vaatame Ubuntu näitel. Lisainformatsioon .
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
Paigaldame Google Cloud SDK
Sarnaselt paigaldame tarkvarapaketi. Lisainformatsioon .
# 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
Paigaldame Percona DBaaS CLI
Paigaldame Percona repolt. Percona DBaaS CLI Tool on praegu eksperimentaalne toode, seega asub see eraldi eksperimentaalses repolis, mille peate eraldi lubama, isegi kui teil on juba Percona repod.
Lisateave .
Paigaldamise algoritm:
- Konfigureerige Percona repod kasutades percona-release tööriista. Esiteks peate alla laadima 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 - Lubage kogumite tööriistade eksperimenteerimise komponendi järgmiselt:
sudo percona-release enable tools experimental - Installige percona-dbaas-cli pakett:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Konfigureerime komponentide töö
Lisainformatsioon sätete kohta .
Esmalt peate sisse logima Google'i kontole. Edasi võimaldab Google Cloud ühel kasutajal omada palju sõltumatuid projekte, mistõttu tuleb näidata aktiivset projekti, kasutades selle projekti koodi:
gcloud auth login
gcloud config set project hidden-brace-236921
Seejärel loome klastrite. Näidise jaoks lõin Kubernetes klastrist vaid kolm nodi - see on minimaalne, mis on vajalik kõrge kättesaadavuse saavutamiseks:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
Järgmine kubectl käsk annab meie praegusele kasutajale vajalikud õigused:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)Seejärel loome namespace ja aktiveerime selle. Namespace on, öeldes lihtsalt, samuti nagu projekt või keskkond, aga juba Kubernetes klastri sees. See on sõltumatu Google Cloudi projektidest:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Käivitame klastri
Pärast seda, kui oleme läbinud need mõned sammud, saame käivitada kolmest sõlmedest koosneva klastrite 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 saada
Vaikimisi on see k доступne ainult Kubernetesi sees. See tähendab, et sellest serverist, kus te käivitasite käsu „Loo”, ei ole see k доступne. Selleks, et see oleks k доступne, näiteks klientide testide jaoks, tuleb port suunata läbi Port Mapping:
kubectl port-forward svc/example-proxysql 3306:3306 $Seejärel ühendame teie MySQL-klienti:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Arendajate klastrihaldus käsud
Andmebaas avaliku IP-aadressiga
Kui soovite püsivamat lahendust klastri k доступsuseks, saate välise IP-aadressi. Sellisel juhul on andmebaas k доступne igast kohast. See on vähem turvaline, kuid sageli mugavam. Välise IP jaoks 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
Määrake parool selgelt
Selle asemel, et süsteem genereeriks parooli juhuslikult, saate selgelt määrata parooli:
# 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äin läbi skriptide väljundi loetavas vormingus, kuid toetatakse ka JSON-vormingut.
Keenhigh доступsuse välja lülitamine
Järgmise käsklusega võite välja lülitada kõrge доступsuse, 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 testimisülesannete jaoks, et maksimaalselt kiiresti ja lihtsalt üles seada MySQL, testida ning seejärel sulgeda või kasutada arendamiseks.
Percona DBaaS CLI tööriist aitab leida Kubernetesis lahenduse, mis on sarnane DBaaS-ile. Samuti jätkame selle funktsionaalsuse ja kasutajasõbralikkuse arendamist.
See ettekande kuulutati esmakordselt by Mail.ru Cloud Solutions&Tarantool. Vaata teisi ettekandeid ja jälgi ürituste teadaandeid Telegramis .
Mis veel teemaga seoses lugeda:
Allikas: habr.com
