首頁 > 資料庫 > mysql教程 > Kubernetes 的 MySQL Operator MOCO 入門第 1 部分

Kubernetes 的 MySQL Operator MOCO 入門第 1 部分

DDD
發布: 2025-01-14 14:02:44
原創
535 人瀏覽過

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

MOCO (MySQL Operator for Kubernetes) 是一款功能強大的雲端原生工具,旨在簡化 Kubernetes 內的 MySQL 叢集管理。 它可以自動執行配置、擴展、備份和維護等關鍵任務,確保高可用性和可靠性。 MOCO 利用 Kubernetes 資源來有效地建立、監控和管理您的 MySQL 部署。

MOCO 支援特定的 MySQL 和 Kubernetes 版本。 目前相容於 MySQL 8.0.28、8.0.37、8.0.39、8.0.40、8.4.3,Kubernetes 1.29、1.30、1.31。

MOCO 如何運作

叢集配置

MOCO 使用 Kubernetes StatefulSets 設定 MySQL 叢集。這涉及:

  1. 定義指定所需設定的 MySQLCluster 自訂資源 (CR)。
  2. MOCO 控制器為叢集節點建立 StatefulSet 和持久磁碟區宣告 (PVC)。
  3. 使用半同步複製配置 MySQL 實例以實現高可用性。

部署服務

MOCO部署以下服務:

  • 主服務:將流量導向至主節點。
  • 副本服務:將讀取查詢路由到副本節點。
  • 備份服務:透過整合到 StatefulSet 中的 sidecar 管理備份。

部署類型

  • 單一主副本和副本: 預設值;一個主副本和多個副本。
  • 多區域群集:用於地理分佈式複製。

備份與復原

MOCO 有助於定期完整備份和增量備份儲存在與 Amazon S3 相容的物件儲存中。 特點包括:

  • 計畫備份到物件儲存。
  • 透過 Kubernetes API 進行隨選備份。
  • 用於修復的簡單 CR 更新。
  • 時間點復原 (PITR),實現強大的災難復原。

物件儲存桶

儲存桶是S3物件的管理單元。 MOCO 將備份儲存在指定的儲存桶中。 請注意,MOCO 不會自動刪除舊備份;您需要為此配置儲存桶生命週期管理。

更多詳細資訊可在提供的連結中找到。

處理有問題的 Pod

MOCO 自動偵測並隔離資料不一致的 MySQL 節點(錯誤的 Pod),防止複製問題。 如果需要,也可以手動刪除。

複製管理

MOCO利用半同步複製來確保資料一致性,確保主節點在提交交易之前將更改寫入副本。 透過將副本提升為主副本,故障轉移可實現自動化,從而最大程度地減少中斷。 MOCO 還監控複製延遲以保持同步和效能。

有狀態與無狀態

由於 MySQL 的持久性儲存需求,MOCO 部署本質上是有狀態的。 Kubernetes StatefulSets 確保:

  • 透過 PVC 進行持久性儲存。
  • MySQL 節點的穩定網路身分。
  • 有序縮放和滾動更新。

快速入門

有兩種安裝方式:

使用原始清單:

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

使用 Helm Chart:

<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>
登入後複製

透過 config/ 目錄 (kustomize) 支援清單自訂。

叢集建立

一個新叢集指定一個可寫實例作為主實例;所有其他都是唯讀副本。 以下 YAML 建立一個具有 pod 反親和性和資源限制的三節點叢集:

<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>
登入後複製

其他範例清單位於範例目錄中。

群集使用

kubectl moco 外掛程式(在 GitHub 版本上提供)提供對 MOCO MySQL 執行個體的外部存取。 服務(moco-test-primary.foo.svc 命名空間中 moco-test-replica.foo.svc 叢集的 testfoo)允許網路存取。

叢集狀態監控

使用 kubectl get mysqlclusterkubectl describe mysqlcluster 監控叢集運作狀況、可用性和最近的事件。

日誌存取

使用kubectl logs存取mysqld錯誤和慢速查詢日誌。

切換與故障轉移

MOCO 處理自動切換和故障轉移以確保高可用性。 可以透過kubectl moco switchover CLUSTER_NAME進行手動切換。

恢復錯誤的副本

使用kubectl delete刪除錯誤副本的PVC和Pod。

參考:https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814

以上是Kubernetes 的 MySQL Operator MOCO 入門第 1 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板