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

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

前置条件

部署异构集群

什么是异构集群

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

创建一个异构集群

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

apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: ${heterogeneous_cluster_name} spec: configUpdateStrategy: RollingUpdate version: v5.0.6 timezone: UTC pvReclaimPolicy: Delete discovery: {} cluster: name: ${origin_cluster_name} tikv: baseImage: pingcap/tikv replicas: 1 # if storageClassName is not set, the default Storage Class of the Kubernetes cluster will be used # storageClassName: local-storage requests: storage: "1Gi" config: {} tidb: baseImage: pingcap/tidb replicas: 1 service: type: ClusterIP config: {} tiflash: baseImage: pingcap/tiflash maxFailoverCount: 1 replicas: 1 storageClaims: - resources: requests: storage: 1Gi storageClassName: standard

执行以下命令创建集群:

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

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

部署集群监控

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

apiVersion: pingcap.com/v1alpha1 kind: TidbMonitor metadata: name: heterogeneous spec: clusters: - name: ${origin_cluster_name} - name: ${heterogeneous_cluster_name} prometheus: baseImage: prom/prometheus version: v2.11.1 grafana: baseImage: grafana/grafana version: 6.1.6 initializer: baseImage: pingcap/tidb-monitor-initializer version: v5.0.6 reloader: baseImage: pingcap/tidb-monitor-reloader version: v1.0.1 imagePullPolicy: IfNotPresent

执行以下命令创建集群:

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} 替换为想要加入的已有集群名称:

apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: ${heterogeneous_cluster_name} spec: tlsCluster: enabled: true configUpdateStrategy: RollingUpdate version: v5.0.6 timezone: UTC pvReclaimPolicy: Delete discovery: {} cluster: name: ${origin_cluster_name} tikv: baseImage: pingcap/tikv replicas: 1 # if storageClassName is not set, the default Storage Class of the Kubernetes cluster will be used # storageClassName: local-storage requests: storage: "1Gi" config: storage: # In basic examples, we set this to avoid using too much storage. reserve-space: "0MB" tidb: baseImage: pingcap/tidb replicas: 1 service: type: ClusterIP config: {} tlsClient: enabled: true tiflash: baseImage: pingcap/tiflash maxFailoverCount: 1 replicas: 1 storageClaims: - resources: requests: storage: 1Gi storageClassName: standard

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

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

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

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