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 集群。这涉及:
部署服务
MOCO部署以下服务:
部署类型
备份与恢复
MOCO 有助于定期完整备份和增量备份存储在与 Amazon S3 兼容的对象存储中。 特点包括:
对象存储桶
存储桶是S3对象的管理单元。 MOCO 将备份存储在指定的存储桶中。 请注意,MOCO 不会自动删除旧备份;您需要为此配置存储桶生命周期管理。
更多详细信息可在提供的链接中找到。
处理有问题的 Pod
MOCO 自动检测并隔离数据不一致的 MySQL 节点(错误的 Pod),防止复制问题。 如果需要,也可以手动删除。
复制管理
MOCO利用半同步复制来保证数据一致性,确保主节点在提交事务之前将更改写入副本。 通过将副本提升为主副本,故障转移可实现自动化,从而最大程度地减少中断。 MOCO 还监控复制延迟以保持同步和性能。
有状态与无状态
由于 MySQL 的持久存储要求,MOCO 部署本质上是有状态的。 Kubernetes StatefulSets 确保:
快速入门
有两种安装方式:
使用原始清单:
<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
集群的 test
和 foo
)允许网络访问。
集群状态监控
使用 kubectl get mysqlcluster
和 kubectl 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中文网其他相关文章!