使用 Kubernetes Operator 部署 MySQL 多云高可用架构

下面是使用 Kubernetes Operator 部署 MySQL 多云高可用架构两种模式配置模板和步骤


✅ 一、基础前提

  • 采用支持高可用的 MySQL Operator(如 PresslabsBitnami、或自研Operator)。

  • 多云环境可以通过以下方式互通:

    • 专线/VPN/VPC Peering
    • DNS 全局解析或 Consul 服务发现
  • 存储类建议使用区域可用的分布式存储(如 Longhorn, Ceph, EBS with replication)


✅ 二、方案一:1 套 Kubernetes 多云容灾(跨云节点)

特点: 同一个 K8s 集群中,有节点部署在不同云(通过 node affinity 调度)。

🔧 架构设计

Kubernetes 集群(混合云节点)
├── 云A Node
│   └── MySQL 主库 Pod(主节点调度)
├── 云B Node
│   └── MySQL 从库 Pod
├── Operator Pod(全局控制)
└── ProxySQL Pod(读写分离)

📦 配置模板(以 Bitnami MySQL Operator 为例)

1. 安装 Operator

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install mysql-operator bitnami/mysql-operator --namespace mysql-operator --create-namespace

2. 创建 MySQLCluster(含 NodeSelector)

apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlCluster
metadata:
  name: my-db
  namespace: mysql
spec:
  replicas: 3
  secretName: my-db-secret
  mysqlVersion: "8.0"

  # 云A主库调度规则
  podSpec:
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          podAffinityTerm:
            topologyKey: "kubernetes.io/hostname"
            labelSelector:
              matchLabels:
                app.kubernetes.io/name: my-db
    nodeSelector:
      cloud-provider: aliyun # 主库放阿里云节点

3. ProxySQL + Service 统一流量入口

apiVersion: v1
kind: Service
metadata:
  name: mysql-router
spec:
  selector:
    app.kubernetes.io/name: mysql-router
  ports:
    - port: 3306
      targetPort: 3306
  type: LoadBalancer

4. 高可用策略(控制切换)

  • Operator 内置支持检测主库状态、自动 Failover。
  • 配合 Operator Metrics + Prometheus 可增强可观测性。

✅ 三、方案二:2 套 Kubernetes 集群(双云独立)

特点: 云 A、云 B 各自一套 K8s,通过 MySQL 复制、外部服务暴露,结合 Orchestrator 实现跨云同步与切换。

🔧 架构设计

[ 云A K8s ]
├── MySQL 主库(StatefulSet)
├── ProxySQL 服务
└── Orchestrator Agent(连云B)

         ⇅ binlog+GTID复制
         
[ 云B K8s ]
├── MySQL 备库(StatefulSet)
├── ProxySQL 服务
└── Orchestrator Agent(连云A)

📦 步骤详解

1️⃣ 各云部署 Operator 与 MySQL StatefulSet

helm install mysql-operator bitnami/mysql-operator --namespace mysql-operator
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlCluster
metadata:
  name: mysql-cloudA
  namespace: mysql
spec:
  replicas: 1
  secretName: mysql-secret
  mysqlVersion: "8.0"
  podSpec:
    nodeSelector:
      cloud: cloudA

2️⃣ 主库开启 binlog + GTID,备库配置外部 replication 连接

# 云B备库连接云A的主库(通过公网IP或专线域名)
replicationSource:
  host: mysql.cloudA.example.com
  user: repl
  passwordSecretName: repl-secret

3️⃣ Orchestrator 独立部署(可混部也可自建 VM)

  • 可将其部署为 K8s Deployment + PVC,连接两边数据库。
  • 配置 failover webhook,将主库变化通知 ProxySQL、Consul、DNS 更新。

4️⃣ 跨集群 ProxySQL 统一接入层部署

apiVersion: v1
kind: Service
metadata:
  name: mysql-gateway
spec:
  type: LoadBalancer
  ports:
    - port: 3306
  selector:
    app: proxysql

通过主从角色切换,由 Operator + Orchestrator 协同更新 ProxySQL 后端。


✅ 四、差异对比总结

维度1 套 K8s(混部)2 套 K8s(跨集群)
运维复杂度较低
网络延迟较低(内网)高(公网或专线)
主从同步本地同步(快)需公网访问或专线
切换机制Operator 自动Orchestrator + ProxySQL
高可用性容灾有限更强(区域级)
推荐场景混合云 / 多 AZ跨云容灾,企业级要求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值