Ich heiße Peter Zaitsev, ich bin Geschäftsführer und Gründer und möchte erzählen:
- wie wir von Open-Source-Lösungen zu Database as a Service gekommen sind;
- welche Ansätze es für die Bereitstellung von Datenbanken in der Cloud gibt;
- wie Kubernetes DBaaS ersetzen kann, indem es die Abhängigkeit von Anbietern beseitigt und die Einfachheit von DBMS als Dienst bewahrt.
Der Artikel basiert auf einem Vortrag bei @Databases Meetup von Mail.ru Cloud Solutions & Tarantool. Wenn Sie nicht lesen möchten, können Sie folgendermaßen schauen:

Wie wir von Open Source zu Database as a Service in der Cloud kamen
Ich beschäftige mich seit den späten 90er Jahren mit Open Source. Vor zwanzig Jahren war es nicht so einfach, Open Source zu nutzen, zum Beispiel bei Datenbanken. Man musste den Quellcode herunterladen, patchen, kompilieren und erst dann benutzen.
Dann erlebte Open Source eine Reihe von Vereinfachungen:
- Quellcodes in Tar.gz und INSTALL, die kompiliert werden mussten;
- Pakete mit Abhängigkeiten wie .deb und .rpm, bei denen nur ein Set von Paketen installiert werden muss;
- Paket-Repositories wie APT und YUM, mit denen die Installation automatisch erfolgt;
- Lösungen wie Docker und Snap, die ermöglichten, Pakete ohne externe Abhängigkeiten zu installieren.
Infolgedessen wird die Nutzung von Open-Source-Software einfacher, und die Einstiegshürde für die Entwicklung solcher Anwendungen sinkt.
Im Gegensatz zur Situation vor 20 Jahren, als alle Experten im Zusammenbauen waren, können die meisten Entwickler heute die verwendeten Tools nicht aus dem Quellcode zusammenstellen.
Tatsächlich ist das nicht schlecht, denn:
- Wir können komplexere, aber benutzerfreundlichere Software verwenden. Zum Beispiel ist ein Browser benutzerfreundlich, aber er enthält viele Open-Source-Komponenten, die es unbequem machen, ihn von Grund auf neu zu erstellen.
- Mehr Menschen können Entwickler von Open Source und anderer Software werden, mehr Software wird in der Wirtschaft verwendet, und die Nachfrage danach steigt.
Die Kehrseite ist, dass der nächste Schritt in der Vereinfachung mit der Nutzung von Cloud-Lösungen verbunden ist, was zu einer bestimmten Bindung an Anbieter führt, also der Bindung an einen einzigen Anbieter. Wir verwenden einfache Lösungen, und Anbieter nutzen Open-Source-Komponenten, aber tatsächlich sind sie an eine der großen Clouds gebunden. Das heißt, der einfachste und schnellste Weg, Open Source (und damit kompatible Software) bereitzustellen, besteht darin, in Clouds mit proprietären APIs zu arbeiten.
Wenn es um Datenbanken in der Cloud geht, gibt es zwei Ansätze:
- Infrastruktur einer Datenbank aufbauen, wie in einem herkömmlichen Rechenzentrum. Das heißt, Standardkomponenten verwenden: Compute, Storage und so weiter, darauf Linux und die Datenbank installieren, konfigurieren.
- Database as a Service nutzen, bei der der Anbieter bereits eine fertige Datenbank in der Cloud anbietet.
Derzeit ist DBaaS ein schnell wachsender Markt, da dieser Service Entwicklern ermöglicht, direkt mit Datenbanken zu arbeiten und die Routinearbeit zu minimieren. Der Anbieter übernimmt die Sicherstellung von hoher Verfügbarkeit und einfacher Skalierbarkeit, Patch-Management der Datenbank, Backups und die Leistungsoptimierung.
Zwei Arten von Database as a Service basierend auf Open Source und eine Alternative in Form von Kubernetes.
Es gibt zwei Arten von Database as a Service für offene Datenbanken:
- Ein standardisiertes Open Source-Produkt, das in ein Backend für die Administration verpackt ist, was das Deployment und Management erleichtert.
- Eine fortschrittliche kommerzielle Lösung mit verschiedenen Ergänzungen, die mit Open Source kompatibel ist.
Beide Optionen verringern die Möglichkeit einer Migration zwischen Clouds, reduzieren die Portabilität von Daten und Anwendungen. Zum Beispiel, obwohl verschiedene Arten von Clouds im Wesentlichen denselben Standard-MySQL unterstützen, gibt es wesentliche Unterschiede: in der Funktionalität, Leistung, Backup und so weiter. Die Migration von einer Cloud zur anderen kann besonders für komplexe Anwendungen nicht einfach sein.
Hier stellt sich die Frage – kann man den Komfort von Database as a Service als einfache Open Source-Lösung erhalten?
Die schlechte Nachricht ist, dass es derzeit leider keine solchen Lösungen auf dem Markt gibt. Die gute Nachricht ist, dass Kubernetes existiert, das solche Lösungen ermöglicht.
Kubernetes ist ein Betriebssystem für die Cloud oder ein Rechenzentrum, das es ermöglicht, Anwendungen auf mehreren Cluster-Servern zu deployen und zu verwalten, statt auf einem einzigen Host.
Derzeit ist Kubernetes der Marktführer in dieser Software-Kategorie. Für solche Aufgaben gab es viele verschiedene Lösungen, aber es hat sich als der Standard etabliert. Viele Unternehmen, die zuvor alternative Lösungen angeboten haben, konzentrieren sich jetzt darauf, ihre Produkte zur Unterstützung von Kubernetes anzupassen.
Außerdem ist Kubernetes eine universelle Lösung, die in privaten, öffentlichen und hybriden Clouds vieler Anbieter unterstützt wird, wie z.B.: AWS, Google Cloud, Microsoft Azure. .
Wie funktioniert Kubernetes mit Datenbanken?
Kubernetes wurde ursprünglich für zustandslose Anwendungen entwickelt, die Daten verarbeiten, aber nichts speichern, beispielsweise Mikrodienste oder Webanwendungen. Datenbanken befinden sich am anderen Ende des Spektrums, das heißt, sie sind zustandsbehaftete Anwendungen. Kubernetes war ursprünglich nicht für solche Anwendungen ausgelegt.
Es gibt jedoch Funktionen, die kürzlich in Kubernetes hinzugefügt wurden und es ermöglichen, Datenbanken und andere zustandsbehaftete Anwendungen zu verwenden:
- Das Konzept des StatefulSet ist eine Reihe von Primitiven zur Verarbeitung von Ereignissen beim Stoppen von Pods und zum Durchführen eines Graceful Shutdown (vorhersehbares Beenden der Anwendung).
- Persistent Volumes sind Datenspeicher, die mit Pods und Kubernetes-Verwaltungsobjekten verknüpft sind.
- Operator Framework – das heißt, die Möglichkeit, Komponenten zur Verwaltung von Datenbanken und anderen zustandsbehafteten Anwendungen zu erstellen, die über viele Knoten verteilt sind.
Bereits jetzt gibt es in öffentlichen Clouds große Database as a Service, deren Backend Kubernetes ist, zum Beispiel: CockroachCloud, InfluxDB, PlanetScale. Das heißt, eine Datenbank auf Kubernetes ist nicht nur theoretisch möglich, sondern funktioniert auch in der Praxis.
Percona bietet zwei Open-Source-Lösungen für Kubernetes an:
- Kubernetes Operator für Percona Server für MongoDB.
- Kubernetes Operator für XtraDB CLUSTER – ein Dienst, der mit MySQL kompatibel ist, hohe Verfügbarkeit und Konsistenz bietet. Es ist auch möglich, einen Einzelknoten zu verwenden, wenn hohe Verfügbarkeit nicht erforderlich ist, zum Beispiel für eine Entwicklungsdatenbank.
Die Benutzer von Kubernetes lassen sich in zwei Gruppen einteilen. Einige verwenden Kubernetes Operators direkt — das sind hauptsächlich fortgeschrittene Benutzer, die gut verstehen, wie die Technologie funktioniert. Andere setzen es im Backend ein — diese Benutzer interessieren sich für etwas wie Database as a Service, sie möchten sich nicht mit den Einzelheiten von Kubernetes beschäftigen. Für die zweite Gruppe von Benutzern haben wir noch eine weitere Open-Source-Lösung — Percona DBaaS CLI Tool. Dies ist eine experimentelle Lösung für diejenigen, die eine Open-Source-DBaaS auf Basis von Kubernetes ohne tiefes Verständnis der Technologie erhalten möchten.
So starten Sie DBaaS von Percona auf Google Kubernetes Engine
Google Kubernetes Engine ist meiner Meinung nach eine der funktionsreichsten Implementierungen der Kubernetes-Technologie. Sie ist in vielen Regionen der Welt verfügbar und bietet ein einfaches und benutzerfreundliches Command Line Tool (SDK), mit dem Skripte erstellt und die Plattform nicht manuell verwaltet werden muss.
Um unseren DBaaS zum Laufen zu bringen, sind die folgenden Komponenten erforderlich:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Installieren Sie kubectl
Installieren Sie das Paket für Ihr Betriebssystem, wir betrachten dies am Beispiel von Ubuntu. Weitere Informationen .
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
Installieren des Google Cloud SDK
Ähnlich installieren wir das Software-Paket. Weitere Informationen .
# 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
Installieren des Percona DBaaS CLI
Installieren aus den Percona-Repositories. Das Percona DBaaS CLI-Tool ist ein experimentelles Produkt und befindet sich daher in einem experimentellen Repository, das separat aktiviert werden muss, selbst wenn Sie bereits Percona-Repositories installiert haben.
Weitere Informationen .
Installationsalgorithmus:
- Richten Sie die Percona-Repositories mit dem Tool percona-release ein. Zuerst müssen Sie das offizielle Paket percona-release von Percona herunterladen und installieren:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb - Aktivieren Sie die experimentelle Komponente des Repository-Tools wie folgt:
sudo percona-release enable tools experimental - Installieren Sie das Paket percona-dbaas-cli:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Konfigurieren der Komponenten
Weitere Informationen zu den Einstellungen .
Zuerst müssen Sie sich in Ihr Google-Konto einloggen. Google Cloud ermöglicht einem Benutzer, viele unabhängige Projekte zu haben, daher muss das Arbeitsprojekt angegeben werden, indem der Code dieses Projekts verwendet wird:
gcloud auth login
gcloud config set project hidden-brace-236921
Als nächstes erstellen wir einen Cluster. Für das Demo habe ich einen Kubernetes-Cluster aus nur drei Knoten erstellt – das ist das Minimum, das für hohe Verfügbarkeit erforderlich ist:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
Der folgende kubectl-Befehl gewährt unserem aktuellen Benutzer die notwendigen Berechtigungen:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)Dann erstellen wir einen Namespace und machen ihn aktiv. Ein Namespace ist, grob gesagt, wie ein Projekt oder eine Umgebung, jedoch innerhalb des Kubernetes-Clusters. Er ist unabhängig von Google Cloud-Projekten:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Starten des Clusters
Nachdem wir diese wenigen Schritte durchlaufen haben, können wir den Cluster aus drei Knoten mit folgendem einfachen Befehl starten:
# 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
Wie man sich mit dem Cluster verbindet
Standardmäßig ist er nur innerhalb von Kubernetes verfügbar. Das bedeutet, dass er von dem Server, von dem Sie den Befehl „Erstellen“ ausgeführt haben, nicht zugänglich ist. Damit er beispielsweise für Tests mit dem Client zugänglich wird, muss der Port über Port Mapping weitergeleitet werden:
kubectl port-forward svc/example-proxysql 3306:3306 $Dann verbinden wir Ihren MySQL-Client:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Erweiterte Clusterverwaltungsbefehle
Datenbank mit öffentlicher IP
Wenn Sie eine dauerhaftere Lösung für die Verfügbarkeit des Clusters wünschen, können Sie eine externe IP-Adresse erhalten. In diesem Fall ist die Datenbank von überall zugänglich. Das ist weniger sicher, aber oft praktischer. Für die externe IP verwenden wir den folgenden Befehl:
# 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
Passwort explizit festlegen
Anstatt dass das System ein Passwort zufällig generiert, können Sie ein Passwort explizit festlegen:
# 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
Ich zeige die Ausgabe der Skripte in einem lesbaren Format an, aber es wird auch das JSON-Format unterstützt.
Hochverfügbarkeit deaktivieren
Mit dem folgenden Befehl können Sie die Hochverfügbarkeit deaktivieren, um einen einzelnen Knoten bereitzustellen:
# 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
Diese Lösung ist für Testaufgaben gedacht, um MySQL schnell und einfach zu starten, zu testen und dann zu stoppen oder für die Entwicklung zu verwenden.
Das Werkzeug Percona DBaaS CLI hilft dabei, eine Lösung auf Kubernetes zu erstellen, die DBaaS ähnelt. Dabei arbeiten wir weiterhin an seiner Funktionalität und Benutzerfreundlichkeit.
Dieser Bericht wurde erstmals auf by Mail.ru Cloud Solutions&Tarantool. Siehe weitere Vorträge und abonnieren Sie die Ankündigungen von Veranstaltungen auf Telegram .
Was Sie sonst noch zum Thema lesen sollten:
Quelle: habr.com
