A nevem Péter Zaycev, ügyvezető igazgató és alapító vagyok, és szeretném elmondani,
- hogyan jutottunk el az open source megoldásoktól az adatbázis szolgáltatásig (DBaaS);
- milyen megközelítések léteznek az adatbázisok felhőalapú telepítésére;
- hogyan tudja a Kubernetes helyettesíteni a DBaaS-t, eltávolítva a szállítótól való függőséget, miközben megtartja az adatbázis mint szolgáltatás egyszerűségét.
A cikk a Mail.ru Cloud Solutions & Tarantool @Databases Meetup-ján elhangzott előadás alapján készült. Ha nem szeretne olvasni, itt megnézheti:

Hogyan jutottunk el az open source-tól a felhőbeli Database as a Service-ig
1990-es évek vége óta foglalkozom open source-szal. Húsz évvel ezelőtt az open source, például az adatbázisok használata nem volt egyszerű. Le kellett tölteni a forrást, javítani, lefordítani, és csak ezután lehetett használni.
Ezután az open source egy sor egyszerűsítést élt át:
- forráskód Tar.gz és INSTALL, amelyeket le kellett fordítani;
- .deb és .rpm típusú függőségekkel rendelkező csomagok, ahol csak a csomagok halmazát kellett telepíteni;
- csomagkezelő rendszerek, mint az APT és a YUM, amelyek révén a telepítés automatikusan történik;
- olyan megoldások, mint a Docker és a Snap, lehetővé téve a csomagok egyszerű telepítését külső függőségek nélkül.
Ennek eredményeként az open source szoftver használata egyszerűbbé válik, és csökken a belépési küszöb a hasonló alkalmazások fejlesztéséhez.
Ellenben a 20 évvel ezelőtti helyzettel, amikor mindenki szakértő volt az összeállításban, manapság a fejlesztők többsége nem tudja lefordítani a használt eszközöket a forrásból.
Valójában ez nem rossz, mivel:
- Bonyolultabb, de kényelmesebb szoftvereket használhatunk. Például a böngésző — kényelmes, de sok open source összetevőt tartalmaz, és nem könnyű alapjáraton összeállítani.
- Több ember válhat open source és egyéb szoftverek fejlesztőjévé, a vállalkozások által használt szoftverek száma nő, és így a kereslet is növekszik.
A másik oldal: a következő lépés az egyszerűsítésben a felhőalapú megoldások használatával kapcsolatos, ami egy bizonyos vendor lock-in-hoz vezet, azaz egy szolgáltatóhoz való kötődéshez. Mi egyszerű megoldásokat használunk, és a szolgáltatók open source összetevőket használnak, de valójában egyike a nagy felhőszolgáltatóknak. Tehát a legegyszerűbb és leggyorsabb mód arra, hogy az open source-t (és a vele kompatibilis szoftvereket) kifejlesszük, a felhők használata, a tulajdonosi API-val.
Ha az adatbázisokról van szó a felhőben, két megközelítés létezik:
- Adja meg az adatbázis-infrastruktúrát, mint egy hagyományos adatközpontban. Vagyis vegyen standard komponensblokkokat: compute, storage és így tovább, telepítsen rájuk Linuxot, adatbázist, állítson be mindent.
- Használjon Database as a Service-t, ahol a szolgáltató már készenlétben kínál egy adatbázist a felhőben.
Jelenleg a DBaaS egy gyorsan növekvő piac, mert ez a szolgáltatás lehetővé teszi a fejlesztők számára, hogy közvetlenül dolgozzanak az adatbázisokkal, és minimalizálja a rutin munkát. A szolgáltató magára vállalja a magas rendelkezésre állás (High Availability) biztosítását, az egyszerű skálázhatóságot, az adatbázis frissítését, biztonsági mentését és a teljesítmény beállítását.
Kétféle Database as a Service létezik: nyílt forráskódú alapú és Kubernetes alternatíva.
Két típusú Database as a Service van a nyílt adatbázisok számára:
- Standard nyílt forráskódú termék, amelyet adminisztrációs háttérrel csomagoltak, ez leegyszerűsíti a telepítést és a kezelést.
- Fejlett kereskedelmi megoldás különféle kiegészítőkkel, amely kompatibilis a nyílt forráskódú megoldásokkal.
Mindkét lehetőség csökkenti a felhők közötti migrálás lehetőségét, csökkenti az adatok és alkalmazások hordozhatóságát. Például, bár különböző felhőtípusok alapvetően ugyanazt a standard MySQL-t támogatják, jelentős eltérések vannak közöttük a működés, teljesítmény, biztonsági mentés és egyéb szempontok terén. Az egyik felhőről a másikra való migrálás nem mindig egyszerű, különösen bonyolult alkalmazások esetében.
Itt merül fel a kérdés — lehet-e élvezni a Database as a Service kényelmét, mint egy egyszerű nyílt forráskódú megoldás?
A rossz hír az, hogy sajnos jelenleg nincsenek ilyen megoldások a piacon. A jó hír — van Kubernetes, amely lehetővé teszi az ilyen megoldások megvalósítását.
A Kubernetes egy operációs rendszer a felhőhöz vagy adatközponthoz, amely lehetővé teszi egy alkalmazás telepítését és kezelését egy klaszter számos szerverén, nem pedig egyetlen hoszton.
Jelenleg a Kubernetes vezető szerepet játszik az ilyen típusú szoftverek kategóriájában. Sok különféle megoldás létezett korábban, de ő lett a standard. Számos vállalat, amely korábban alternatív megoldásokkal foglalkozott, most a termékeik Kubernetes támogatásra való alkalmazására összpontosít.
Továbbá a Kubernetes egy sokoldalú megoldás, amelyet több szolgáltató magán-, nyilvános- és hibrid felhői támogatnak, mint például az AWS, a Google Cloud és a Microsoft Azure. .
Hogyan működik a Kubernetes az adatbázisokkal?
A Kubernetes-t eredetileg stateless alkalmazásokhoz fejlesztették ki, amelyek adatokat dolgoznak fel, de nem tárolják őket, mint például a mikroszolgáltatások vagy webalkalmazások. Az adatbázisok másik végletet képviselik, tehát ezek stateful alkalmazások. A Kubernetes ilyen alkalmazásokhoz eredetileg nem volt tervezve.
Van azonban néhány új funkció, amelyek a közelmúltban jelentek meg a Kubernetes-ben, és lehetővé teszik adatbázisok és más stateful alkalmazások használatát:
- A StatefulSet koncepció egy sor primitívet jelent az események kezelésére a podok leállítása kapcsán, valamint a Graceful Shutdown (előre megtervezett leállás) végrehajtására.
- Persistent Volumes - azok az adattárolók, amelyek a podokhoz és a Kubernetes irányító objektumokhoz kapcsolódnak.
- Operator Framework - tehát a lehetőség, hogy komponenseket hozzunk létre adatbázisok és más stateful alkalmazások kezelésére, amelyek több csomóponton oszlanak meg.
Már most is léteznek nagy Database as a Service szolgáltatások a nyilvános felhőkben, amelyek mögött Kubernetes áll, például: CockroachCloud, InfluxDB, PlanetScale. Tehát a Kubernetes alapú adatbázis nem csupán elméletben lehetséges, hanem a gyakorlatban is működik.
A Percona-nak két open source megoldása van Kubernetes-hez:
- Kubernetes Operator a Percona Server for MongoDB-hoz.
- Kubernetes Operator az XtraDB CLUSTER-hez - egy MySQL kompatibilis szolgáltatás, amely magas rendelkezésre állást és konzisztenciát biztosít. Egyetlen csomópont is használható, ha a magas rendelkezésre állás nem szükséges, például dev adatbázis esetén.
A Kubernetes felhasználókat két csoportra lehet osztani. Egyesek közvetlenül használják a Kubernetes Operátorokat - ők főként haladó felhasználók, akik jól értik a technológiát. Mások a hátterében futtatják - ezeknek a felhasználóknak valami olyan érdekli őket, mint a Database as a Service, és nem akarnak belemerülni a Kubernetes részleteibe. A második csoport számára van egy másik open source megoldásunk - Percona DBaaS CLI Tool. Ez egy kísérleti megoldás, amely lehetővé teszi, hogy open source DBaaS-t kapjanak Kubernetes alapú megoldásként anélkül, hogy mélyen megértenék a technológiát.
Hogyan indítsuk el a Percona DBaaS-t a Google Kubernetes Engine-en
A Google Kubernetes Engine, véleményem szerint, az egyik legfunkcionálisabb megvalósítása a Kubernetes technológiának. Elérhető sok régióban a világban, és rendelkezik egy egyszerű és felhasználóbarát Parancssori Eszközzel (SDK), amely lehetővé teszi a szkriptek létrehozását, nem pedig a platform manuális kezelését.
Ahhoz, hogy a DBaaS működjön, a következő komponensekre van szükség:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
A kubectl telepítése
Telepítsük a csomagot az operációs rendszeréhez, az Ubuntu példáját fogjuk megvizsgálni. Bővebben .
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
A Google Cloud SDK telepítése
Hasonlóan telepítjük a szoftvercsomagot. Bővebben .
# 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
A Percona DBaaS CLI telepítése
Telepítés a Percona tárolókból. A Percona DBaaS CLI Eszköz egyelőre kísérleti termék, ezért egy külön kísérleti tárolóban található, amit külön kell bekapcsolni, még akkor is, ha a Percona tárolók már telepítve vannak.
További információ .
A telepítési folyamat:
- Állítsa be a Percona tárolókat a percona-release eszközzel. Először le kell töltenie és telepítenie a Percona hivatalos percona-release csomagját:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb - Kapcsolja be a tárolók kísérleti összetevőit a következőképpen:
sudo percona-release enable tools experimental - Telepítse a percona-dbaas-cli csomagot:
sudo apt-get update sudo apt-get install percona-dbaas-cli
A komponens működésének beállítása
További információ a beállításokról .
Először be kell jelentkeznie a Google-fiókjába. A Google Cloud lehetővé teszi egy felhasználónak, hogy több független projektje legyen, ezért meg kell adni a munkaprojektet, a projekt kódjának használatával:
gcloud auth login
gcloud config set project hidden-brace-236921
Ezután klustercsoportot hozunk létre. A bemutatóra egy háromnodes Kubernetes klasztert hoztam létre - ez a minimum, ami a magas rendelkezésre álláshoz szükséges:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
A következő kubectl parancs a szükséges jogosultságokat adja meg a jelenlegi felhasználónknak:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)Ezután létrehozzuk a namespace-t és aktívvá tesszük. A namespace, durván fogalmazva, mint egy projekt vagy környezet, de már a Kubernetes klaszteren belül. Ez független a Google Cloud projektektől:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Klaszter indítása
Miután végigmentünk ezeken a lépéseken, egy ilyen egyszerű paranccsal elindíthatjuk a három nodes klasztert:
# 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
Hogyan csatlakozzunk a klaszterhez
Alapértelmezetten csak a Kubernetes-en belül érhető el. Ez azt jelenti, hogy az a szerver, ahonnan a 'Létrehozás' parancsot kiadtad, nem fér hozzá. Ahhoz, hogy elérhetővé váljon, például az ügyféltesztekhez, porttovábbítást kell beállítanod:
kubectl port-forward svc/example-proxysql 3306:3306 $Ezután csatlakozunk az MySQL-klienshez:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Haladó parancsok a klaszter kezelésére
Adatbázis nyilvános IP-n
Ha egy tartósabb megoldást szeretnél a klaszter elérhetőségére, külső IP-címet is kérhetsz. Ebben az esetben az adatbázis bárhonnan elérhető lesz. Ez kevésbé biztonságos, de gyakran kényelmesebb. Külső IP-hoz az alábbi parancsot használjuk:
# 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
Kifejezetten megadjuk a jelszót
Ahelyett, hogy a rendszer véletlenszerűen generálna jelszót, kifejezetten megadhatod a jelszót:
# 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
Megjelenítem a szkriptek kimenetét olvasható formátumban, de a JSON formátum is támogatott.
Kikapcsoljuk a magas rendelkezésre állást
A következő paranccsal kikapcsolhatjuk a magas rendelkezésre állást, hogy egyetlen csomópontot telepítsünk:
# 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
Ez a megoldás tesztfeladatokhoz készült, hogy a lehető leggyorsabban és egyszerűbben felállíthassuk az MySQL-t, tesztelhetjük, majd leállíthatjuk vagy fejlesztés céljából használhatjuk.
A Percona DBaaS CLI eszköz segít egy Kubernetes-alapú DBaaS megoldás létrehozásában. Eközben folyamatosan dolgozunk a funkcionalitásán és a használhatóságán.
Ez a beszéd először hangzott el by Mail.ru Cloud Solutions&Tarantool. Tekintse meg más előadásokat, és iratkozz fel az események értesítéseire a Telegramon .
További olvasmányok a témában:
Forrás: habr.com
