为已有 TiDB 集群部署异构集群

本文档介绍如何为已有的 TiDB 集群部署一个异构集群。

前置条件

部署异构集群

什么是异构集群

异构集群是给已经存在的 TiDB 集群创建差异化的实例节点,比如创建不同配置不同 Label 的 TiKV 集群用于热点调度或者创建不同配置的 TiDB 集群分别用于 TP 和 AP 查询。

创建一个异构集群

将如下配置存为 cluster.yaml 文件,并替换 ${heterogeneous_cluster_name} 为自己想命名的异构集群名字,${origin_cluster_name} 替换为想要加入的已有集群名称:

  1. apiVersion: pingcap.com/v1alpha1
  2. kind: TidbCluster
  3. metadata:
  4. name: ${heterogeneous_cluster_name}
  5. spec:
  6. configUpdateStrategy: RollingUpdate
  7. version: v5.2.1
  8. timezone: UTC
  9. pvReclaimPolicy: Delete
  10. discovery: {}
  11. cluster:
  12. name: ${origin_cluster_name}
  13. tikv:
  14. baseImage: pingcap/tikv
  15. replicas: 1
  16. # if storageClassName is not set, the default Storage Class of the Kubernetes cluster will be used
  17. # storageClassName: local-storage
  18. requests:
  19. storage: "1Gi"
  20. config: {}
  21. tidb:
  22. baseImage: pingcap/tidb
  23. replicas: 1
  24. service:
  25. type: ClusterIP
  26. config: {}
  27. tiflash:
  28. baseImage: pingcap/tiflash
  29. maxFailoverCount: 1
  30. replicas: 1
  31. storageClaims:
  32. - resources:
  33. requests:
  34. storage: 1Gi
  35. storageClassName: standard

执行以下命令创建集群:

  1. kubectl create -f cluster.yaml -n ${namespace}

异构集群除了使用 spec.cluster.name 字段加入到目标集群,其它字段和正常的 TiDB 集群一样。

部署集群监控

将如下配置存为 tidbmonitor.yaml 文件,并替换 ${origin_cluster_name} 为想要加入的集群名称,${heterogeneous_cluster_name} 替换为异构集群名称:

  1. apiVersion: pingcap.com/v1alpha1
  2. kind: TidbMonitor
  3. metadata:
  4. name: heterogeneous
  5. spec:
  6. clusters:
  7. - name: ${origin_cluster_name}
  8. - name: ${heterogeneous_cluster_name}
  9. prometheus:
  10. baseImage: prom/prometheus
  11. version: v2.11.1
  12. grafana:
  13. baseImage: grafana/grafana
  14. version: 6.1.6
  15. initializer:
  16. baseImage: pingcap/tidb-monitor-initializer
  17. version: v5.2.1
  18. reloader:
  19. baseImage: pingcap/tidb-monitor-reloader
  20. version: v1.0.1
  21. imagePullPolicy: IfNotPresent

执行以下命令创建集群:

  1. kubectl create -f tidbmonitor.yaml -n ${namespace}

部署 TLS 异构集群

开启异构集群 TLS 需要显示声明,需要创建新的 Secret 证书文件,使用和目标集群相同的 CA (Certification Authority) 颁发。如果使用 cert-manager 方式,需要使用和目标集群相同的 Issuer 来创建 Certificate

为异构集群创建证书的详细步骤,可参考以下文档:

创建一个异构 TLS 集群

将如下配置存为 cluster.yaml 文件,并替换 ${heterogeneous_cluster_name} 为自己想命名的异构集群名字,${origin_cluster_name} 替换为想要加入的已有集群名称:

  1. apiVersion: pingcap.com/v1alpha1
  2. kind: TidbCluster
  3. metadata:
  4. name: ${heterogeneous_cluster_name}
  5. spec:
  6. tlsCluster:
  7. enabled: true
  8. configUpdateStrategy: RollingUpdate
  9. version: v5.2.1
  10. timezone: UTC
  11. pvReclaimPolicy: Delete
  12. discovery: {}
  13. cluster:
  14. name: ${origin_cluster_name}
  15. tikv:
  16. baseImage: pingcap/tikv
  17. replicas: 1
  18. # if storageClassName is not set, the default Storage Class of the Kubernetes cluster will be used
  19. # storageClassName: local-storage
  20. requests:
  21. storage: "1Gi"
  22. config:
  23. storage:
  24. # In basic examples, we set this to avoid using too much storage.
  25. reserve-space: "0MB"
  26. tidb:
  27. baseImage: pingcap/tidb
  28. replicas: 1
  29. service:
  30. type: ClusterIP
  31. config: {}
  32. tlsClient:
  33. enabled: true
  34. tiflash:
  35. baseImage: pingcap/tiflash
  36. maxFailoverCount: 1
  37. replicas: 1
  38. storageClaims:
  39. - resources:
  40. requests:
  41. storage: 1Gi
  42. storageClassName: standard

spec.tlsCluster.enabled 表示组件间是否开启 TLS,spec.tidb.tlsClient.enabled 表示 MySQL 客户端是否开启 TLS。

执行以下命令创建开启 TLS 的异构集群:

  1. kubectl create -f cluster.yaml -n ${namespace}

详细的异构 TLS 集群配置示例,请参阅 ‘heterogeneous-tls’