- wie wir von Open Source-Lösungen zu Database as a Service gekommen sind;
- Welche Ansätze gibt es für die Bereitstellung von Datenbanken in der Cloud?
- Wie Kubernetes DBaaS ersetzen kann, indem die Herstellerabhängigkeit beseitigt und das DBMS als Service so einfach wie möglich gehalten wird.
Der Artikel basiert auf dem Bericht bei @Databases Meetup von Mail.ru Cloud Solutions & Tarantool. Wenn Sie nicht lesen möchten, können Sie sehen:
Wie von Open Source zu Database as a Service in der Cloud kam
Ich mache Open Source seit den späten 90ern. Vor zwanzig Jahren war die Verwendung von Open Source wie Datenbanken nicht einfach. Es war notwendig, die Quellen herunterzuladen, zu patchen, zu kompilieren und erst dann zu verwenden.
Dann durchlief Open Source eine Reihe von Vereinfachungen:
- Tar.gz- und INSTALL-Quellen, die kompiliert werden mussten;
- Pakete mit Abhängigkeiten wie .deb und .rpm, bei denen Sie nur eine Reihe von Paketen installieren müssen;
- Paket-Repositorys wie APT und YUM, über die die Installation automatisch erfolgt;
- Lösungen wie Docker und Snap, mit denen Sie Pakete bei der Installation ohne externe Abhängigkeiten erhalten können.
Infolgedessen wird es einfacher, Open-Source-Software zu verwenden, und die Eintrittsbarriere für die Entwicklung solcher Anwendungen wird verringert.
Im Gegensatz zur Situation vor 20 Jahren, als jeder ein Montageexperte war, können die meisten Entwickler die von der Quelle verwendeten Werkzeuge nicht mehr zusammenbauen.
In der Tat ist das nicht schlecht, weil:
- Wir können komplexere, aber bequemere Software verwenden. Zum Beispiel ist ein Browser bequem zu verwenden, enthält jedoch viele Open-Source-Komponenten, und es ist unpraktisch, ihn von Grund auf neu zu erstellen.
- Mehr Menschen können Entwickler von Open Source und anderer Software werden, mehr Software wird von Unternehmen verwendet und der Bedarf ist höher.
Der Nachteil ist, dass der nächste Schritt zur Vereinfachung mit der Verwendung von Cloud-Lösungen verbunden ist. Dies führt zu einer bestimmten Lieferantenbindung, dh einer Bindung an einen Lieferanten. Wir verwenden einfache Lösungen und Anbieter verwenden Open-Source-Komponenten, die jedoch tatsächlich an eine der großen Clouds gebunden sind. Das heißt, der einfachste und schnellste Weg, Open Source (und kompatible Software) bereitzustellen, ist in den Clouds mithilfe einer proprietären API.
Bei Datenbanken in der Cloud gibt es zwei Ansätze:
- Erstellen Sie die Datenbankinfrastruktur wie in einem normalen Rechenzentrum. Nehmen Sie also die Standardbausteine: Berechnen, Speichern usw., setzen Sie Linux darauf, eine Datenbank, konfigurieren Sie.
- Verwenden Sie Database as a Service, wobei der Anbieter eine vorgefertigte Datenbank in der Cloud anbietet.
Jetzt ist DBaaS ein schnell wachsender Markt, da Entwickler mit einem solchen Service direkt mit Datenbanken arbeiten können und Routinearbeiten minimiert werden. Der Anbieter übernimmt die Bereitstellung von Hochverfügbarkeit (Hochverfügbarkeit) und einfacher Skalierung, Datenbank-Patches, Backups und 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 Open Source-Datenbanken:
- Ein Standard-Open-Source-Produkt, das zur einfachen Bereitstellung und Verwaltung in ein Administrations-Backend gepackt ist.
- Eine fortschrittliche kommerzielle Lösung mit verschiedenen Add-Ons, die mit Open Source kompatibel ist.
Beide Optionen verringern die Fähigkeit zur Migration zwischen Clouds und verringern die Portabilität von Daten und Anwendungen. Trotz der Tatsache, dass verschiedene Cloud-Typen tatsächlich denselben Standard-MySQL-Code unterstützen, gibt es erhebliche Unterschiede zwischen ihnen: in Betrieb, Leistung, Sicherung usw. Die Migration von einer Cloud in eine andere kann insbesondere bei komplexen Anwendungen schwierig sein.
Und hier stellt sich die Frage: Ist es möglich, Database as a Service zu nutzen, aber als einfache Open Source-Lösung?
Die schlechte Nachricht ist, dass es leider noch keine solchen Lösungen auf dem Markt gibt. Die gute Nachricht ist, dass es Kubernetes gibt, mit denen Sie solche Lösungen implementieren können.
Kubernetes ist ein Cloud- oder Rechenzentrumsbetriebssystem, mit dem Sie Ihre Anwendung auf mehreren Servern in einem Cluster und nicht auf einem einzelnen Host bereitstellen und verwalten können.
Kubernetes ist jetzt führend in dieser Kategorie von Software. Es gab viele verschiedene Lösungen für solche Aufgaben, aber er war es, der zum Standard wurde. Viele Unternehmen, die sich zuvor mit alternativen Lösungen beschäftigt haben, konzentrieren sich jetzt darauf, ihre Produkte an die Unterstützung von Kubernetes anzupassen.
Darüber hinaus ist Kubernetes eine universelle Lösung, die in privaten, öffentlichen und Hybrid-Clouds vieler Anbieter unterstützt wird, z. B. AWS, Google Cloud, Microsoft Azure und Mail.ru Cloud-Lösungen .
Wie Kubernetes mit Datenbanken arbeitet
Kubernetes wurde ursprünglich für zustandslose Anwendungen entwickelt, die Daten verarbeiten, aber nichts speichern, z. B. Microservices oder Webanwendungen. Datenbanken befinden sich am anderen Ende des Spektrums, was bedeutet, dass es sich um statusbehaftete Anwendungen handelt. Und Kubernetes wurde ursprünglich nicht für solche Anwendungen entwickelt.
Es gibt jedoch Funktionen, die kürzlich in Kubernetes aufgetaucht sind und die Verwendung von Datenbanken und anderen statusbehafteten Anwendungen ermöglichen:
- Das StatefulSet-Konzept besteht aus einer ganzen Reihe von Grundelementen für die Behandlung von Pod-Shutdown-Ereignissen und die Durchführung eines Graceful Shutdown (vorhersehbares Herunterfahren von Anwendungen).
- Persistente Volumes - Datenspeicher, die Pods und Kubernetes-Verwaltungsobjekten zugeordnet sind.
- Operator Framework - das heißt, die Möglichkeit, Komponenten zum Verwalten von Datenbanken und anderen statusbehafteten Anwendungen zu erstellen, die auf vielen Knoten verteilt sind.
Es gibt bereits große Database as a Service in öffentlichen Clouds, in deren Backend Kubernetes beispielsweise CockroachCloud, InfluxDB, PlanetScale. Das heißt, eine Kubernetes-Datenbank ist nicht nur das, was theoretisch möglich ist, sondern auch das, was in der Praxis funktioniert.
Percona bietet zwei Open Source-Lösungen von Kubernetes:
- Kubernetes Operator für Percona Server für MongoDB.
- Kubernetes Operator für XtraDB CLUSTER ist ein MySQL-kompatibler Dienst, der hohe Verfügbarkeit und Konsistenz bietet. Sie können auch einen einzelnen Knoten verwenden, wenn keine Hochverfügbarkeit erforderlich ist, z. B. für die Entwicklerdatenbank.
Kubernetes-Benutzer können in zwei Gruppen unterteilt werden. Einige Benutzer verwenden Kubernetes-Operatoren direkt - dies sind hauptsächlich fortgeschrittene Benutzer, die ein gutes Verständnis für die Funktionsweise der Technologie haben. Andere führen es im Backend aus - solche Benutzer interessieren sich für etwas wie Database as a Service, sie möchten nicht in die Nuancen von Kubernetes eintauchen. Für die zweite Benutzergruppe haben wir eine andere Open Source-Lösung - das Percona DBaaS CLI Tool. Dies ist eine experimentelle Lösung für diejenigen, die Open-Source-DBaaS auf Basis von Kubernetes ohne tiefes Verständnis der Technologie erhalten möchten.
So führen Sie DBaaS von Percona auf der Google Kubernetes Engine aus
Die Google Kubernetes Engine ist meiner Meinung nach eine der funktionalsten Implementierungen der Kubernetes-Technologie. Es ist in vielen Regionen der Welt verfügbar und verfügt über ein einfaches und praktisches Command Line Tool (SDK), mit dem Sie Skripte erstellen können, anstatt die Plattform manuell zu bearbeiten.
Damit unser DBaaS funktioniert, benötigen wir die folgenden Komponenten:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Installieren Sie kubectl
Bei der Installation des Pakets für Ihr Betriebssystem sehen wir uns das Beispiel von Ubuntu an. Weitere Details hier .
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
Installieren Sie das Softwarepaket auf die gleiche Weise. Weitere Details hier .
# 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 Sie die Percona DBaaS-CLI
Installation von den Percona-Repositorys. Das Percona DBaaS CLI-Tool ist immer noch ein experimentelles Produkt. Daher befindet es sich in einem experimentellen Repository, das separat enthalten sein muss, auch wenn Sie bereits Percona-Repositorys installiert haben.
Weitere Details hier .
Installationsalgorithmus:
- Konfigurieren Sie Percona-Repositorys mit dem Percona-Release-Tool. Zuerst müssen Sie das offizielle Percona-Release-Paket 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 Tool-Repository-Komponente 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
Komponenten einrichten
Lesen Sie mehr über die Einstellungen hier .
Zuerst müssen Sie sich in Ihrem Google-Konto anmelden. Darüber hinaus ermöglicht Google Cloud einem Nutzer, viele unabhängige Projekte zu haben. Sie müssen daher ein Arbeitsprojekt mit dem Code dieses Projekts angeben:
gcloud auth login
gcloud config set project hidden-brace-236921
Als nächstes erstellen wir einen Cluster. Für die Demo habe ich einen Kubernetes-Cluster mit nur drei Knoten erstellt. Dies ist das Minimum, das für eine 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 Befehl kubectl gewährt unserem aktuellen Benutzer die erforderlichen Berechtigungen:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)
Dann erstellen wir einen Namespace und aktivieren ihn. Der Namespace ähnelt grob gesagt auch einem Projekt oder einer Umgebung, befindet sich jedoch bereits im Kubernetes-Cluster. Es ist unabhängig von Google Cloud-Projekten:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Wir starten den Cluster
Nachdem wir diese wenigen Schritte ausgeführt haben, können wir mit diesem einfachen Befehl einen Cluster von drei Knoten 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
So stellen Sie eine Verbindung zu einem Cluster her
Standardmäßig ist es nur in Kubernetes verfügbar. Das heißt, von diesem Server, von dem aus Sie den Befehl Erstellen ausgeführt haben, ist er nicht verfügbar. Um es beispielsweise für Tests mit einem Client verfügbar zu machen, müssen Sie den Port über Port Mapping übergeben:
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
Öffentliche IP-Datenbank
Wenn Sie eine dauerhaftere Lösung für die Clusterverfügbarkeit wünschen, können Sie eine externe IP-Adresse erhalten. In diesem Fall kann von überall auf die Datenbank zugegriffen werden. Es ist weniger sicher, aber oft bequemer. Verwenden Sie für externe IP 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
Legen Sie das Passwort explizit fest
Anstatt dass das System das Kennwort zufällig generiert, können Sie das Kennwort 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 Skriptausgabe im lesbaren Format an, aber das JSON-Format wird ebenfalls unterstützt.
Schalten Sie die Hochverfügbarkeit aus
Sie können die Hochverfügbarkeit mit dem folgenden Befehl deaktivieren, um den einzelnen Knoten zu erweitern:
# 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
Dies ist eine Lösung für Testprobleme, um MySQL schnell und einfach zu starten, zu testen und dann aufzurollen oder für die Entwicklung zu verwenden.
Mit dem Percona DBaaS CLI-Tool erhalten Sie eine DBaaS-ähnliche Lösung für Kubernetes. Gleichzeitig arbeiten wir weiter an seiner Funktionalität und Benutzerfreundlichkeit.
Dieser Vortrag wurde erstmals auf dem @Databases Meetup von Mail.ru Cloud Solutions & Tarantool gehalten. Sehen Sie sich Videos anderer Reden an und abonnieren Sie Veranstaltungsankündigungen in Telegram Around Kubernetes in der Mail.ru Group .
Was gibt es sonst noch zu diesem Thema zu lesen: