Rumah >pangkalan data >tutorial mysql >Bermula dengan MOCO, Operator MySQL untuk Kubernetes Bahagian 1

Bermula dengan MOCO, Operator MySQL untuk Kubernetes Bahagian 1

DDD
DDDasal
2025-01-14 14:02:44537semak imbas

Getting started on MOCO, the MySQL Operator for Kubernetes Part 1

MOCO (Operator MySQL untuk Kubernetes) ialah alat asli awan yang berkuasa yang direka untuk pengurusan kluster MySQL yang diperkemas dalam Kubernetes. Ia mengautomasikan tugas utama seperti peruntukan, penskalaan, sandaran dan penyelenggaraan, memastikan ketersediaan dan kebolehpercayaan yang tinggi. MOCO memanfaatkan sumber Kubernetes untuk mencipta, memantau dan mengurus penggunaan MySQL anda dengan cekap.

MOCO menyokong versi MySQL dan Kubernetes tertentu. Pada masa ini, ia serasi dengan MySQL 8.0.28, 8.0.37, 8.0.39, 8.0.40 dan 8.4.3 serta Kubernetes 1.29, 1.30 dan 1.31.

Bagaimana MOCO Berfungsi

Peruntukan Kluster

MOCO menyediakan kluster MySQL menggunakan Kubernetes StatefulSets. Ini melibatkan:

  1. Mentakrifkan sumber tersuai (CR) MySQLCluster yang menentukan konfigurasi yang diingini.
  2. Pengawal MOCO mencipta StatefulSets dan tuntutan volum berterusan (PVC) untuk nod kelompok.
  3. Mengkonfigurasi tika MySQL dengan replikasi separa segerak untuk ketersediaan tinggi.

Perkhidmatan Penggunaan

MOCO menggunakan perkhidmatan berikut:

  • Perkhidmatan Utama: Menghalakan trafik ke nod utama.
  • Perkhidmatan Replika: Laluan membaca pertanyaan ke nod replika.
  • Perkhidmatan Sandaran: Menguruskan sandaran melalui sidecars yang disepadukan ke dalam StatefulSet.

Jenis Alokasi

  • Utama Tunggal dengan Replika: Lalai; satu replika utama dan berbilang.
  • Kluster Berbilang Wilayah: Untuk replikasi taburan geografi.

Sandarkan dan Pulihkan

MOCO memudahkan sandaran penuh dan tambahan biasa yang disimpan dalam storan objek serasi Amazon S3. Ciri-ciri termasuk:

  • Sandaran berjadual ke storan objek.
  • Sandaran atas permintaan melalui API Kubernetes.
  • Kemas kini CR ringkas untuk pemulihan.
  • Pemulihan Titik-dalam-Masa (PITR) untuk pemulihan bencana yang teguh.

Badi Penyimpanan Objek

Timba ialah unit pengurusan S3 untuk objek. MOCO menyimpan sandaran dalam baldi yang ditetapkan. Ambil perhatian bahawa MOCO tidak mengalih keluar sandaran lama secara automatik; anda perlu mengkonfigurasi pengurusan kitaran hayat baldi untuk ini.

Butiran lanjut tersedia dalam pautan yang disediakan.

Mengendalikan Pod Bermasalah

MOCO secara automatik mengesan dan mengasingkan nod MySQL dengan data yang tidak konsisten (pod sesat), menghalang isu replikasi. Pembuangan manual juga boleh dilakukan jika diperlukan.

Pengurusan Replikasi

MOCO menggunakan replikasi separa segerak untuk ketekalan data, memastikan nod utama menulis perubahan pada replika sebelum melakukan transaksi. Failover diautomasikan dengan mempromosikan replika kepada utama, meminimumkan gangguan. MOCO juga memantau ketinggalan replikasi untuk mengekalkan penyegerakan dan prestasi.

Stateful vs. Stateless

Penyerahan MOCO sememangnya dinyatakan kerana keperluan penyimpanan berterusan MySQL. Kubernetes StatefulSets memastikan:

  • Penyimpanan berterusan melalui PVC.
  • Identiti rangkaian yang stabil untuk nod MySQL.
  • Kemas kini penskalaan dan rolling yang dipesan.

Permulaan Pantas

Dua kaedah pemasangan tersedia:

Menggunakan Manifes Mentah:

<code class="language-bash">curl -fsLO https://github.com/cybozu-go/moco/releases/latest/download/moco.yaml
kubectl apply -f moco.yaml</code>

Menggunakan Carta Helm:

<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>

Penyesuaian manifes disokong melalui direktori config/ (kustomize).

Penciptaan Kluster

Kluster baharu menetapkan satu contoh boleh tulis sebagai yang utama; semua yang lain adalah replika baca sahaja. YAML berikut mencipta gugusan tiga nod dengan anti-afiniti pod dan had sumber:

<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>

Manfes contoh tambahan terdapat dalam direktori contoh.

Penggunaan Kluster

Pemalam kubectl moco (tersedia pada keluaran GitHub) menyediakan akses luaran kepada kejadian MySQL MOCO. Perkhidmatan (moco-test-primary.foo.svc dan moco-test-replica.foo.svc untuk kelompok test dalam foo ruang nama) membenarkan akses rangkaian.

Pemantauan Status Kluster

Gunakan kubectl get mysqlcluster dan kubectl describe mysqlcluster untuk memantau kesihatan kelompok, ketersediaan dan acara terbaharu.

Akses Log

Akses ralat mysqld dan log pertanyaan perlahan menggunakan kubectl logs.

Tukar dan Gagal

MOCO mengendalikan penukaran automatik dan failover untuk memastikan ketersediaan yang tinggi. Pertukaran manual boleh dilakukan melalui kubectl moco switchover CLUSTER_NAME.

Memulihkan Replika Sesat

Alih keluar PVC dan Pod replika yang sesat menggunakan kubectl delete.

Rujukan: https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814

Atas ialah kandungan terperinci Bermula dengan MOCO, Operator MySQL untuk Kubernetes Bahagian 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn