Jag heter Petr Zaitsev, jag är VD, grundare och jag vill berätta:
- hur vi gick från lösningar med öppen källkod till Database as a Service;
- Vilka är tillvägagångssätten för att distribuera databaser i molnet?
- Hur Kubernetes kan ersätta DBaaS genom att eliminera leverantörsberoende samtidigt som enkelheten hos DBMS som en tjänst bibehålls.
Artikeln är baserad på rapporten på @Databases Meetup av Mail.ru Cloud Solutions & Tarantool. Om du inte vill läsa kan du titta på:

Hur öppen källkod kom till databasen som en tjänst i molnet
Jag har hållit på med öppen källkod sedan slutet av 90-talet. För tjugo år sedan var det inte så lätt att använda öppen källkod, som databaser. Det var nödvändigt att ladda ner källkoden, patcha den, kompilera den och först därefter använda den.
Sedan gick öppen källkod igenom en rad förenklingar:
- Tar.gz och INSTALL källor som behövde kompileras;
- paket med beroenden som .deb och .rpm, där du bara behöver installera en uppsättning paket;
- paketförråd som APT och YUM som tillåter installation att ske automatiskt;
- lösningar som Docker och Snap, som låter dig ta emot paket genom installation utan externa beroenden.
Som ett resultat blir det lättare att använda programvara med öppen källkod, och barriären för att komma in i utvecklingen av sådana applikationer sänks.
Men till skillnad från situationen för 20 år sedan, när alla var monteringsexperter, kan nu de flesta utvecklare inte sätta ihop verktygen de använder från källan.
Egentligen är detta inte dåligt, eftersom:
- Vi kan använda mer komplex men bekvämare programvara. En webbläsare är till exempel bekväm att använda, men den innehåller många komponenter med öppen källkod och är obekväm att bygga från grunden.
- Fler människor kan bli öppen källkod och andra mjukvaruutvecklare, mer programvara används av företag och det finns en större efterfrågan på det.
Nackdelen är att nästa steg i förenkling är förknippat med användningen av molnlösningar, och det leder till en viss leverantörslåsning, det vill säga bindning till en leverantör. Vi använder enkla lösningar och leverantörer använder komponenter med öppen källkod, men de är i huvudsak spikade till ett av de stora molnen. Det vill säga, det enklaste och snabbaste sättet att distribuera öppen källkod (och kompatibel programvara) är i molnen, med hjälp av ett proprietärt API.
När det kommer till databaser i molnet finns det två tillvägagångssätt:
- Собрать инфраструктуру базы данных, как в обычном дата-центре. То есть взять стандартные компоновочные блоки: compute, storage и так далее, поставить на них Linux, базу данных, настроить.
- Använd Database as a Service, där leverantören erbjuder en färdig databas inuti molnet.
DBaaS är för närvarande en snabbt växande marknad eftersom det tillåter utvecklare att arbeta med databaser direkt och minimerar rutinarbete. Leverantören tar hand om hög tillgänglighet och enkel skalning, databaspatchning, säkerhetskopiering och prestandajustering.
Två typer av Database as a Service baserad på öppen källkod och ett alternativ i form av Kubernetes
Det finns två typer av Database as a Service för öppna databaser:
- En standardprodukt med öppen källkod förpackad med en administrationsbackend, vilket gör det enkelt att distribuera och hantera.
- En avancerad kommersiell lösning med olika tillägg, kompatibel med öppen källkod.
Båda alternativen minskar möjligheten att migrera mellan moln och minskar portabiliteten av data och applikationer. Till exempel, trots att olika typer av moln stöder i huvudsak samma standard MySQL, finns det betydande skillnader mellan dem: i drift, 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 - är det möjligt att få bekvämligheten med Database as a Service, men som en enkel öppen källkodslösning?
Den dåliga nyheten är att det tyvärr inte finns några sådana lösningar på marknaden ännu. Den goda nyheten är att det finns Kubernetes, som låter dig implementera sådana lösningar.
Kubernetes är ett moln- eller datacenteroperativsystem som gör att en applikation kan distribueras och hanteras över flera servrar i ett kluster, snarare än en enda värd.
Kubernetes är för närvarande ledande inom denna typ av programvara. Det fanns många olika lösningar på sådana problem, men det blev standarden. Många företag som tidigare var fokuserade på alternativa lösningar fokuserar nu på att anpassa sina produkter för att stödja Kubernetes.
Dessutom är Kubernetes en mångsidig lösning som stöds i privata, offentliga och hybridmoln från många leverantörer, såsom AWS, Google Cloud, Microsoft Azure, .
Hur Kubernetes fungerar med databaser
Kubernetes designades ursprungligen för tillståndslösa applikationer som behandlar data men inte lagrar någonting, till exempel mikrotjänster eller webbapplikationer. Databaser finns i andra änden av spektrumet, vilket betyder att de är tillståndssäkra applikationer. Och Kubernetes designades inte ursprungligen för sådana applikationer.
Det finns dock funktioner som har dykt upp i Kubernetes nyligen som tillåter användning av databaser och andra stateful applikationer:
- StatefulSet-konceptet är en serie primitiver för att hantera podavstängningshändelser och utföra Graceful Shutdown (förutsägbar programavstängning).
- Beständiga volymer är datalager som är associerade med pods, de objekt som Kubernetes hanterar.
- Operator Framework - det vill säga möjligheten att skapa komponenter för hantering av databaser och andra stateful applikationer fördelade över många noder.
Det finns redan stora Database as a Service i publika moln med Kubernetes i backend, till exempel: CockroachCloud, InfluxDB, PlanetScale. Det vill säga att en databas på Kubernetes inte bara är något som är teoretiskt möjligt, utan också något som fungerar i praktiken.
Percona har två open source-lösningar för Kubernetes:
- Kubernetes Operator för Percona Server för MongoDB.
- Kubernetes Operator for XtraDB CLUSTER är en MySQL-kompatibel tjänst som ger hög tillgänglighet och konsekvens. Du kan också använda en enda nod om hög tillgänglighet inte behövs, till exempel för en dev-databas.
Kubernetes-användare kan delas in i två grupper. Vissa använder Kubernetes Operators direkt – det är mest avancerade användare som har en god förståelse för hur tekniken fungerar. Andra kör det på backend - dessa användare är intresserade av något som Database as a Service, de vill inte fördjupa sig i nyanserna av hur Kubernetes fungerar. För den andra gruppen användare har vi en annan öppen källkodslösning - Percona DBaaS CLI Tool. Detta är en experimentell lösning för dig som vill skaffa en öppen källkod DBaaS baserad på Kubernetes utan en djup förståelse för tekniken.
Hur man kör Perconas DBaaS på Google Kubernetes Engine
Google Kubernetes Engine är, enligt min mening, en av de mest funktionella implementeringarna av Kubernetes-teknik. Det är tillgängligt i många regioner i världen och har ett enkelt och lättanvänt kommandoradsverktyg (SDK) som låter dig skapa skript istället för att manuellt hantera plattformen.
För att vår DBaaS ska fungera behövs följande komponenter:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Installera kubectl
Устанавливаем пакет для вашей операционной системы, мы рассмотрим на примере Ubuntu... Fler detaljer .
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
Vi installerar mjukvarupaketet på samma sätt. Läs mer .
# 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
Installera från Percona repositories. Percona DBaaS CLI Tool är en experimentell produkt och ligger därför i experimentförrådet, vilket måste aktiveras separat, även om du redan har Percona-förråd installerade.
Mer .
Installationsalgoritm:
- Konfigurera Percona-förråd med 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 verktygsarkivet enligt följande:
sudo percona-release enable tools experimental - Installera paketet percona-dbaas-cli:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Inställning av driften av komponenter
Mer om inställningar .
Först måste du logga in på ditt Google-konto. Därefter tillåter Google Cloud en användare att ha många oberoende projekt, så du måste specificera arbetsprojektet med koden för det projektet:
gcloud auth login
gcloud config set project hidden-brace-236921
Därefter skapar vi ett kluster. För demon skapade jag ett Kubernetes-kluster med bara tre noder, vilket är det 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
Följande kubectl-kommando ger de nödvändiga privilegierna 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 namnutrymme och gör det aktivt. Namnutrymme är, grovt sett, också som ett projekt eller en miljö, men inne i ett Kubernetes-kluster. Det är oberoende av Google Cloud-projekt:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Startar klustret
När vi har gått igenom dessa få steg kan vi starta ett tre-nodskluster med detta 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 ett kluster
Som standard är det bara tillgängligt inom Kubernetes. Det vill säga att den inte är tillgänglig från servern från vilken du körde kommandot "Skapa". För att göra den tillgänglig, till exempel för tester med en klient, måste du vidarebefordra porten via Port Mapping:
kubectl port-forward svc/example-proxysql 3306:3306 $Sedan kopplar vi din MySQL-klient:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Avancerade kommandon för klusterhantering
Databas om offentlig IP
Om du vill ha en mer permanent lösning för klustertillgänglighet kan du få en extern IP-adress. I det här fallet kommer databasen att vara tillgänglig var som helst. Det är mindre säkert, men ofta mer bekvämt. För extern IP använder vi följande kommando:
# 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
Vi anger lösenordet explicit
Istället för att systemet genererar ett lösenord slumpmässigt kan du ställa in lösenordet 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 utdata från skripten i läsbart format, men JSON-format stöds också.
Stäng av hög tillgänglighet
Följande kommando kan användas för att inaktivera hög tillgänglighet för att distribuera en enda 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 rulla upp det eller använda det för utveckling.
Percona DBaaS CLI-verktyget hjälper dig att få en DBaaS-liknande lösning på Kubernetes. Samtidigt fortsätter vi att arbeta med dess funktionalitet och användbarhet.
Denna rapport presenterades först kl av Mail.ru Cloud Solutions&Tarantool. Se andra föreställningar och prenumerera på evenemangsmeddelanden på Telegram .
Vad mer att läsa om ämnet:
Källa: will.com
