Jag heter Peter Zaitsev, jag Àr verkstÀllande direktör och grundare och jag vill berÀtta:
- hur vi gick frÄn open source-lösningar till Database as a Service;
- vilka metoder som finns för att implementera databaser i molnet;
- hur Kubernetes kan ersÀtta DBaaS genom att eliminera leverantörsberoende och bevara enkelheten hos databaser som en tjÀnst.
Den hÀr artikeln Àr baserad pÄ en presentation vid @Databases Meetup av Mail.ru Cloud Solutions & Tarantool. Om du inte vill lÀsa kan du titta pÄ:

Hur vi gick frÄn open source till Database as a Service i molnet
Jag har sysslat med open source sedan slutet av 90-talet. För tjugo Är sedan var det inte sÄ enkelt att anvÀnda open source, till exempel databaser. Man var tvungen att ladda ner kÀllkoden, patcha, kompilera och först dÀrefter anvÀnda den.
Sedan dess har open source genomgÄtt en serie förenklingar:
- kÀllkod i Tar.gz och INSTALL som mÄste kompileras;
- paket med beroenden som .deb och .rpm, dÀr man bara behöver installera ett paketset;
- paketarkiv som APT och YUM, dÀr installationen sker automatiskt;
- lösningar som Docker och Snap, som möjliggör installation av paket utan externa beroenden.
Slutresultatet Àr att det blir enklare att anvÀnda öppen programvara, och intrÀdesbarriÀren för att utveckla sÄdana applikationer sÀnks.
Till skillnad frÄn situationen för 20 Är sedan, nÀr alla var experter pÄ att kompilera, kan nu de flesta utvecklare inte kompilera de verktyg de anvÀnder.
Det hÀr Àr faktiskt inte dÄligt, eftersom:
- Vi kan anvÀnda mer avancerad men mer anvÀndarvÀnlig programvara. Till exempel Àr webblÀsaren enkel att anvÀnda, men den innehÄller mÄnga open source-komponenter och Àr besvÀrlig att kompilera frÄn grunden.
- Fler mÀnniskor kan bli utvecklare av open source och annan programvara, fler företag anvÀnder programvara, och behovet av den ökar.
Den baksidan av myntet Àr att nÀsta steg i förenklingen Àr kopplad till anvÀndningen av molnlösningar, vilket leder till en viss vendor lock-in, det vill sÀga bindning till en enda leverantör. Vi anvÀnder enkla lösningar och leverantörer anvÀnder open source-komponenter, men de Àr faktiskt fastlÄsta till ett av de stora molnen. Det enklaste och snabbaste sÀttet att implementera open source (och kompatibel programvara) Àr i molnet, genom att anvÀnda proprietÀra API:er.
NÀr det gÀller databaser i molnet finns det tvÄ metoder:
- Skapa en databasarkitektur som i ett traditionellt datacenter. Det innebÀr att anvÀnda standardkomponenter: compute, storage och sÄ vidare, installera Linux pÄ dem, en databas och konfigurera den.
- AnvÀnda Database as a Service dÀr leverantören erbjuder en fÀrdig databas i molnet.
Idag Àr DBaaS en snabbt vÀxande marknad, eftersom denna tjÀnst gör det möjligt för utvecklare att arbeta med databaser direkt och minimerar rutinuppgifter. Leverantören ansvarar för att sÀkerstÀlla hög tillgÀnglighet och enkel skalbarhet, patchning av databasen, sÀkerhetskopiering och prestandakonfiguration.
TvÄ typer av Database as a Service baserat pÄ open source och ett alternativ i form av Kubernetes.
Det finns tvÄ typer av Database as a Service för öppna databaser:
- En standard open source-produkt paketerad i ett backend för administration, vilket förenklar installation och hantering.
- Ett avancerat kommersiellt lösning med olika tillÀgg som Àr kompatibelt med open source.
BÄda alternativen minskar möjligheten för migrering mellan moln, vilket minskar portabiliteten av data och applikationer. Till exempel, trots att olika typer av moln i grunden stödjer samma standard MySQL, finns det betydande skillnader mellan dem nÀr det gÀller funktionalitet, prestanda, sÀkerhetskopiering och sÄ vidare. Att migrera frÄn ett moln till ett annat kan vara utmanande, sÀrskilt för komplexa applikationer.
Och hĂ€r uppstĂ„r frĂ„gan â kan man fĂ„ bekvĂ€mligheten av Database as a Service men som en enkel open source-lösning?
DĂ„liga nyheter Ă€r att det tyvĂ€rr för nĂ€rvarande inte finns nĂ„gra sĂ„dana lösningar pĂ„ marknaden. Goda nyheter â det finns Kubernetes, som gör det möjligt att implementera sĂ„dana lösningar.
Kubernetes Àr ett operativsystem för molnet eller datacentret som möjliggör utrullning av applikationer och hantering av dem pÄ flera kluster-servrar istÀllet för pÄ en enda vÀrd.
Idag Àr Kubernetes ledande inom denna typ av programvara. Det har funnits mÄnga olika lösningar för sÄdana uppgifter, men det har blivit standarden. MÄnga företag som tidigare arbetade med alternativa lösningar fokuserar nu pÄ att anpassa sina produkter för att stödja Kubernetes.
Dessutom Àr Kubernetes en universell lösning som stöds i privata, offentliga och hybridmoln av mÄnga leverantörer, till exempel: AWS, Google Cloud, Microsoft Azure, .
Hur Kubernetes fungerar med databaser
Kubernetes utvecklades ursprungligen för stateless-applikationer som hanterar data men inte lagrar nÄgot, som mikrotjÀnster eller webbapplikationer. Databaser ligger i den andra Ànden av spektrumet, det vill sÀga de Àr stateful-applikationer. Kubernetes var frÄn början inte avsedd för sÄdana applikationer.
Men det finns funktioner som nyligen har införts i Kubernetes som gör det möjligt att anvÀnda databaser och andra stateful-applikationer:
- Konceptet StatefulSet Àr en serie primitiva verktyg för att hantera hÀndelser som rör nedstÀngning av pods och genomföra Graceful Shutdown (förutsÀgbar nedstÀngning av applikationen).
- Persistent Volumes Àr datalagringsenheter som Àr kopplade till pods, objekt som hanteras av Kubernetes.
- Operator Framework â det vill sĂ€ga möjligheten att skapa komponenter för att hantera databaser och andra stateful-applikationer som Ă€r distribuerade över mĂ„nga noder.
Redan nu finns det stora Database as a Service-lösningar i offentliga moln dÀr Kubernetes anvÀnds i backend, till exempel: CockroachCloud, InfluxDB, PlanetScale. Detta innebÀr att databaser pÄ Kubernetes inte bara Àr en teoretisk möjlighet utan ocksÄ nÄgot som fungerar i praktiken.
Percona erbjuder tvÄ open source-lösningar för Kubernetes:
- Kubernetes Operator för Percona Server för MongoDB.
- Kubernetes Operator för XtraDB CLUSTER â en tjĂ€nst som Ă€r kompatibel med MySQL, som erbjuder hög tillgĂ€nglighet och konsekvens. Det gĂ„r ocksĂ„ att anvĂ€nda en enskild nod om hög tillgĂ€nglighet inte behövs, till exempel för utvecklingsdatabaser.
AnvĂ€ndarna av Kubernetes kan delas in i tvĂ„ grupper. Vissa anvĂ€nder Kubernetes Operators direkt â detta Ă€r frĂ€mst avancerade anvĂ€ndare som har god förstĂ„else för hur teknologin fungerar. Andra kör det i backend â dessa anvĂ€ndare Ă€r intresserade av nĂ„got i stil med Database as a Service och vill inte gĂ„ in pĂ„ detaljerna i hur Kubernetes fungerar. För den andra gruppen har vi en annan open source-lösning â Percona DBaaS CLI Tool. Detta Ă€r en experimentell lösning för dem som vill ha en open source DBaaS baserad pĂ„ Kubernetes utan att behöva förstĂ„ teknologin i detalj.
Hur man startar DBaaS frÄn Percona pÄ Google Kubernetes Engine
Google Kubernetes Engine, enligt min mening, Àr en av de mest funktionella implementationerna av Kubernetes-teknologin. Den Àr tillgÀnglig i mÄnga regioner runt om i vÀrlden och har ett enkelt och anvÀndarvÀnligt kommandoradsverktyg (SDK) som gör det möjligt att skapa skript istÀllet för att hantera plattformen manuellt.
För att vÄr DBaaS ska fungera behövs följande komponenter:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Installerar kubectl
Vi installerar paketet för ditt operativsystem, vi tar Ubuntu som exempel. Mer information .
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
Installerar Google Cloud SDK
Installationen av programvarupaketet Àr i princip densamma. Mer information .
# 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
Installerar Percona DBaaS CLI
Installerar frÄn Percona-repositories. Percona DBaaS CLI Tool Àr fortfarande ett experimentellt produkt, sÄ det finns i ett experimentellt repository som mÄste aktiveras separat, Àven om du redan har Percona-repositories installerade.
LĂ€s mer .
Installationsalgoritm:
- Konfigurera Percona-repositories med hjÀlp av percona-release-verktyget. Först mÄste du ladda ner och installera det officiella percona-release-paketet frÄn Percona:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb - Aktivera den experimentella komponenten i verktygsrepositoriet pÄ följande sÀtt:
sudo percona-release enable tools experimental - Installera percona-dbaas-cli-paketet:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Konfigurera funktionaliteten för komponenterna
Mer information om instÀllningarna .
Först mÄste du logga in pÄ ditt Google-konto. Google Cloud tillÄter en anvÀndare att ha mÄnga oberoende projekt, sÄ du mÄste ange det aktiva projektet med kod för det projektet:
gcloud auth login
gcloud config set project hidden-brace-236921
DĂ€refter skapar vi en kluster. För demo har jag skapat en Kubernetes-kluster med endast tre noder â det Ă€r minimum som krĂ€vs för hög tillgĂ€nglighet:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
NÀsta kubectl-kommando ger rÀtt privilegier till vÄr nuvarande anvÀndare:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)Sedan skapar vi ett namespace och markerar det som aktivt. Ett namespace Àr, grovt sagt, likt ett projekt eller en miljö, men inom Kubernetes-klustret. Det Àr oberoende av Google Cloud-projekt:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Startar klustret
Efter att ha gÄtt igenom dessa fÄ steg kan vi starta klustret med tre noder med följande enkla kommando:
# 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
Hur man ansluter till klustret
Som standard Àr den endast tillgÀnglig inom Kubernetes. Det innebÀr att den inte Àr tillgÀnglig frÄn den server dÀr du körde kommandot 'Skapa'. För att den ska bli tillgÀnglig, till exempel för tester med klienten, mÄste du kartlÀgga porten genom Port Mapping:
kubectl port-forward svc/example-proxysql 3306:3306 $Anslut sedan din MySQL-klient:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Avancerade kommandon för klusterhantering
Databas pÄ offentlig IP
Om du vill ha en mer permanent lösning för tillgÀnglighet i klustret kan du fÄ en extern IP-adress. I det fallet kommer databasen att vara tillgÀnglig frÄn var som helst. Det Àr mindre sÀkert men ofta bekvÀmare. AnvÀnd följande kommando för att fÄ en extern 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
Ange lösenordet explicit
IstÀllet för att systemet randomiserar ett lösenord kan du ange ett lösenord uttryckligen:
# 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
Jag visar skriptens utdata i lÀsbar form, men JSON-format stöds ocksÄ.
StÀng av hög tillgÀnglighet
Med följande kommando kan du stÀnga av hög tillgÀnglighet för att installera en enskild nod:
# 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
Detta Àr en lösning för testuppgifter, för att snabbt och enkelt sÀtta upp MySQL, testa det och sedan avveckla eller anvÀnda det för utveckling.
Verktyget Percona DBaaS CLI hjÀlper till att fÄ en lösning i Kubernetes liknande DBaaS. Vi fortsÀtter samtidigt att arbeta med dess funktionalitet och anvÀndbarhet.
Denna presentation hördes först pÄ by Mail.ru Cloud Solutions&Tarantool. Se andra förelÀsningar och följ anmÀlningarna till evenemang pÄ Telegram .
Vad mer att lÀsa om Àmnet:
KĂ€lla: habr.com
