MOCO (MySQL Operator for Kubernetes) ist ein leistungsstarkes, cloudnatives Tool, das für eine optimierte MySQL-Clusterverwaltung innerhalb von Kubernetes entwickelt wurde. Es automatisiert wichtige Aufgaben wie Bereitstellung, Skalierung, Backups und Wartung und sorgt so für hohe Verfügbarkeit und Zuverlässigkeit. MOCO nutzt Kubernetes-Ressourcen, um Ihre MySQL-Bereitstellungen effizient zu erstellen, zu überwachen und zu verwalten.
MOCO unterstützt bestimmte MySQL- und Kubernetes-Versionen. Derzeit ist es mit MySQL 8.0.28, 8.0.37, 8.0.39, 8.0.40 und 8.4.3 sowie Kubernetes 1.29, 1.30 und 1.31 kompatibel.
Wie MOCO funktioniert
MOCO stellt MySQL-Cluster mithilfe von Kubernetes StatefulSets bereit. Dazu gehört:
Bereitstellungsdienste
MOCO stellt die folgenden Dienste bereit:
Bereitstellungstypen
Sichern und Wiederherstellen
MOCO ermöglicht regelmäßige vollständige und inkrementelle Sicherungen, die im Amazon S3-kompatiblen Objektspeicher gespeichert werden. Zu den Funktionen gehören:
Objektspeicher-Bucket
Der Bucket ist die S3-Verwaltungseinheit für Objekte. MOCO speichert Backups in einem bestimmten Bucket. Beachten Sie, dass MOCO alte Backups nicht automatisch entfernt. Hierfür müssen Sie das Bucket-Lifecycle-Management konfigurieren.
Weitere Details finden Sie im bereitgestellten Link.
Umgang mit problematischen Pods
MOCO erkennt und isoliert automatisch MySQL-Knoten mit inkonsistenten Daten (fehlerhafte Pods) und verhindert so Replikationsprobleme. Bei Bedarf ist auch eine manuelle Entfernung möglich.
Replikationsverwaltung
MOCO nutzt halbsynchrone Replikation für Datenkonsistenz und stellt sicher, dass der Primärknoten Änderungen in Replikate schreibt, bevor er Transaktionen festschreibt. Failover werden automatisiert, indem ein Replikat zum Primärserver heraufgestuft wird, wodurch Störungen minimiert werden. MOCO überwacht auch die Replikationsverzögerung, um Synchronisierung und Leistung aufrechtzuerhalten.
Stateful vs. Stateless
MOCO-Bereitstellungen sind aufgrund der dauerhaften Speicheranforderungen von MySQL von Natur aus zustandsbehaftet. Kubernetes StatefulSets stellen Folgendes sicher:
Schnellstart
Es stehen zwei Installationsmethoden zur Verfügung:
Rohmanifeste verwenden:
<code class="language-bash">curl -fsLO https://github.com/cybozu-go/moco/releases/latest/download/moco.yaml kubectl apply -f moco.yaml</code>
Helm-Diagramm verwenden:
<code class="language-bash">helm repo add moco https://cybozu-go.github.io/moco/ helm repo update helm install --create-namespace --namespace moco-system moco moco/moco</code>
Die Manifestanpassung wird über das Verzeichnis config/
(kustomize) unterstützt.
Clustererstellung
Ein neuer Cluster legt eine beschreibbare Instanz als primär fest; Alle anderen sind schreibgeschützte Replikate. Die folgende YAML erstellt einen Drei-Knoten-Cluster mit Pod-Anti-Affinität und Ressourcenbeschränkungen:
<code class="language-yaml">apiVersion: moco.cybozu.com/v1beta2 kind: MySQLCluster metadata: namespace: default name: test spec: replicas: 3 podTemplate: spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - mysql - key: app.kubernetes.io/instance operator: In values: - test topologyKey: "kubernetes.io/hostname" containers: - name: mysqld image: ghcr.io/cybozu-go/moco/mysql:8.4.3 resources: limits: cpu: "10" memory: "10Gi" volumeClaimTemplates: - metadata: name: mysql-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi</code>
Weitere Beispielmanifeste finden Sie im Beispielverzeichnis.
Cluster-Nutzung
Das kubectl moco
-Plugin (verfügbar in GitHub-Versionen) bietet externen Zugriff auf MOCO-MySQL-Instanzen. Dienste (moco-test-primary.foo.svc
und moco-test-replica.foo.svc
für einen test
-Cluster im foo
-Namespace) ermöglichen den Netzwerkzugriff.
Cluster-Statusüberwachung
Verwenden Sie kubectl get mysqlcluster
und kubectl describe mysqlcluster
, um den Clusterzustand, die Verfügbarkeit und aktuelle Ereignisse zu überwachen.
Protokollzugriff
Greifen Sie mit kubectl logs
auf MySQL-Fehler- und langsame Abfrageprotokolle zu.
Switchover und Failover
MOCO übernimmt die automatische Umschaltung und den Failover, um eine hohe Verfügbarkeit sicherzustellen. Eine manuelle Umschaltung ist über kubectl moco switchover CLUSTER_NAME
.
Fehlerhafte Replikate wiederherstellen
Entfernen Sie das PVC und den Pod einer fehlerhaften Replik mit kubectl delete
.
Referenz: https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814
Das obige ist der detaillierte Inhalt vonErste Schritte mit MOCO, dem MySQL-Operator für Kubernetes Teil 1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!