ホームページ >データベース >mysql チュートリアル >Kubernetes 用 MySQL Operator MOCO の入門パート 1

Kubernetes 用 MySQL Operator MOCO の入門パート 1

DDD
DDDオリジナル
2025-01-14 14:02:44537ブラウズ

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 StatefulSet を使用して MySQL クラスターをプロビジョニングします。これには以下が含まれます:

  1. 必要な構成を指定して MySQLCluster カスタム リソース (CR) を定義します。
  2. クラスター ノードの StatefulSet と永続ボリューム クレーム (PVC) を作成する MOCO コントローラー。
  3. 高可用性を実現するための半同期レプリケーションを使用した MySQL インスタンスの構成。

導入サービス

MOCO は次のサービスを展開しています:

  • プライマリ サービス: トラフィックをプライマリ ノードに転送します。
  • レプリカ サービス: 読み取りクエリをレプリカ ノードにルーティングします。
  • バックアップ サービス: StatefulSet に統合されたサイドカーを介してバックアップを管理します。

展開タイプ

  • レプリカを持つ単一のプライマリ: デフォルト。 1 つのプライマリと複数のレプリカ。
  • マルチリージョン クラスター: 地理的に分散されたレプリケーション用。

バックアップと復元

MOCO は、Amazon S3 互換のオブジェクト ストレージに保存される定期的な完全バックアップおよび増分バックアップを容易にします。 機能は次のとおりです:

  • オブジェクト ストレージへのスケジュールされたバックアップ。
  • Kubernetes API を介したオンデマンド バックアップ。
  • 修復のためのシンプルな CR アップデート。
  • 堅牢な災害復旧のためのポイントインタイム リカバリ (PITR)。

オブジェクト ストレージ バケット

バケットはオブジェクトの S3 管理単位です。 MOCO は、指定されたバケット内にバックアップを保存します。 MOCO は古いバックアップを自動的に削除しないことに注意してください。これにはバケットのライフサイクル管理を構成する必要があります。

詳細については、提供されたリンクをご覧ください。

問題のあるポッドの処理

MOCO は、一貫性のないデータ (誤ったポッド) を持つ MySQL ノードを自動的に検出して隔離し、レプリケーションの問題を防ぎます。 必要に応じて手動で削除することも可能です。

レプリケーション管理

MOCO はデータの一貫性のために半同期レプリケーションを利用し、トランザクションをコミットする前にプライマリ ノードがレプリカに変更を書き込むことを保証します。 レプリカをプライマリに昇格させることでフェールオーバーが自動化され、中断が最小限に抑えられます。 MOCO は、同期とパフォーマンスを維持するためにレプリケーションの遅延も監視します。

ステートフルとステートレス

MOCO デプロイメントは、MySQL の永続ストレージ要件により、本質的にステートフルです。 Kubernetes StatefulSet は以下を保証します:

  • PVC を介した永続的なストレージ。
  • MySQL ノードの安定したネットワーク ID。
  • 順序付けられたスケーリングとローリング更新。

クイックスタート

2 つのインストール方法が利用可能です:

生のマニフェストの使用:

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

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>

マニフェストのカスタマイズは、config/ ディレクトリ (kusTOMize) を介してサポートされています。

クラスターの作成

新しいクラスターは、1 つの書き込み可能なインスタンスをプライマリとして指定します。他のものはすべて読み取り専用レプリカです。 次の YAML は、ポッドの反アフィニティとリソース制限を備えた 3 ノードのクラスターを作成します。

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

追加のサンプル マニフェストは、example ディレクトリにあります。

クラスターの使用状況

kubectl moco プラグイン (GitHub リリースで利用可能) は、MOCO MySQL インスタンスへの外部アクセスを提供します。 サービス (moco-test-primary.foo.svc 名前空間内の moco-test-replica.foo.svc クラスターの test および foo) は、ネットワーク アクセスを許可します。

クラスターステータス監視

kubectl get mysqlclusterkubectl describe mysqlcluster を使用して、クラスターの健全性、可用性、および最近のイベントを監視します。

ログアクセス

kubectl logs を使用して mysqld エラーと低速クエリのログにアクセスします。

スイッチオーバーとフェイルオーバー

MOCO は自動スイッチオーバーとフェイルオーバーを処理して、高可用性を確保します。 kubectl moco switchover CLUSTER_NAME 経由で手動切り替えが可能です。

誤ったレプリカの回復

kubectl deleteを使用して、誤ったレプリカの PVC とポッドを削除します。

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

以上がKubernetes 用 MySQL Operator MOCO の入門パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。