暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过TiDB Operator为已有TiDB集群部署异构集群

原创 严少安 2023-03-21
260

https://tidb.net/blog/21dee5a3
版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

lqbyz 发表于 2023-03-08
原创扩/缩容集群管理安装 & 部署管理与运维故障排查/诊断

本文档介绍如何为已有的的tidb集群再部署一个不同服务组件构建的集群。异构集群是与已有 TiDB 集群不同配置的节点构成的集群。
适用场景

适用于基于已有的 TiDB 集群需要创建一个差异化配置的实例节点的场景,例如:

创建不同配置不同 Label 的 TiKV 集群用于热点调度

创建不同配置的 TiDB 集群分别用于 OLTP 和 OLAP 查询

前置条件

已经存在一个 TiDB 集群。如果尚未部署 TiDB 集群,请现在K8S环境中构建一个TiDB集群。
部署异构集群

依据是否需要为异构集群开启TLS,分为方式一和方式二,可任选。
方式一,非TLS部署
为异构集群新建一个集群配置文件。

执行以下指令创建异构集群配置文件,其中 origin_cluster_name 为要加入的原集群名称,heterogeneous_cluster_name 为异构集群名称,为了后续在 TidbMonitor 的 Grafana 中同时查看原集群和异构集群的监控数据,请以原集群名称为前缀对异构集群进行命名。

origin_cluster_name=basic
heterogeneous_cluster_name=basic-heterog
cat > cluster.yaml << EOF
apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
name: ${heterogeneous_cluster_name}
spec:
configUpdateStrategy: RollingUpdate
version: v6.5.0
timezone: UTC
pvReclaimPolicy: Delete
discovery: {}
cluster:
name: ${origin_cluster_name}
tikv:
baseImage: pingcap/tikv
maxFailoverCount: 0
replicas: 1
# 如果不设置 storageClassName,TiDB Operator 将使用 Kubernetes 集群默认的 Storage Class
# storageClassName: local-storage
requests:
storage: “100Gi”
config: {}
tidb:
baseImage: pingcap/tidb
maxFailoverCount: 0
replicas: 1
service:
type: ClusterIP
config: {}
tiflash:
baseImage: pingcap/tiflash
maxFailoverCount: 0
replicas: 1
storageClaims:
- resources:
requests:
storage: 100Gi
EOF

相比于普通 TiDB 集群配置文件,异构集群配置文件的唯一区别是,你需要额外配置 spec.cluster.name 字段为已有的 TiDB 集群名。通过此字段,TiDB Operator 会将该异构集群加入到已有的 TiDB 集群。
依据需要,修改异构集群配置文件中各组件节点的配置项

如果不需要或者删除不需要的组件,可以不加相关的配置或replicas为0

apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
name: idc
namespace: lqbyz
spec:
configUpdateStrategy: RollingUpdate
version: v6.5.0
timezone: UTC
pvReclaimPolicy: Delete
discovery: {}
cluster:
name: tidb-test
tikv:
baseImage: pingcap/tikv
maxFailoverCount: 0
replicas: 3

# 如果不设置 storageClassName,TiDB Operator 将使用 Kubernetes 集群默认的 Storage Class

storageClassName: local-hostpath
requests:
  storage: "20Gi"
config: {}

tidb:
baseImage: pingcap/tidb
maxFailoverCount: 0
replicas: 3
service:
type: ClusterIP
config: {}
tiflash:
baseImage: pingcap/tiflash
maxFailoverCount: 0
replicas: 1
storageClaims:
- resources:
requests:

创建异构集群

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

方式二,TLS部署

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

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

为 TiDB 组件间开启 TLS

为 MySQL 客户端开启 TLS

创建证书后,要部署一个开启 TLS 的异构集群,请进行以下操作:
为异构集群新建一个集群配置文件。

执行以下指令创建异构集群配置文件,其中 origin_cluster_name 为要加入的原集群名称,heterogeneous_cluster_name 为异构集群名称,为了后续在 TidbMonitor 的 Grafana 中同时查看原集群和异构集群的监控数据,请以原集群名称为前缀对异构集群进行命名。

apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
name: ${heterogeneous_cluster_name}
spec:
tlsCluster:
enabled: true
configUpdateStrategy: RollingUpdate
version: v6.5.0
timezone: UTC
pvReclaimPolicy: Delete
discovery: {}
cluster:
name: ${origin_cluster_name}
tikv:
baseImage: pingcap/tikv
maxFailoverCount: 0
replicas: 1
# 如果不设置 storageClassName,TiDB Operator 将使用 Kubernetes 集群默认的 Storage Class
# storageClassName: local-storage
requests:
storage: “100Gi”
config: {}
tidb:
baseImage: pingcap/tidb
maxFailoverCount: 0
replicas: 1
service:
type: ClusterIP
config: {}
tlsClient:
enabled: true
tiflash:
baseImage: pingcap/tiflash
maxFailoverCount: 0
replicas: 1
storageClaims:
- resources:
requests:
storage: 100Gi

依据需要,修改异构集群配置文件中各节点的配置项。

例如,你可以修改 cluster.yaml 文件中各组件的 replicas 数量或者删除不需要的组件。
执行以下命令创建开启 TLS 的异构集群。你需要将 cluster.yaml 替换为你的异构集群配置文件名。

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

如果执行成功,输出会提示 tidbcluster.pingcap.com/${heterogeneous_cluster_name} created。TiDB Operator 会根据集群配置文件,创建对应配置的 TiDB 集群。

部署集群监控

如果你需要为异构集群部署监控,请在已有 TiDB 集群的 TidbMonitor CR 文件增加异构集群名。具体操作如下:
编辑已有 TiDB 集群的 TidbMonitor Custom Resource (CR):

kubectl edit tm ${cluster_name} -n ${namespace}

参考以下示例,替换 ${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.27.1
grafana:
baseImage: grafana/grafana
version: 7.5.11
initializer:
baseImage: pingcap/tidb-monitor-initializer
version: v6.5.0
reloader:
baseImage: pingcap/tidb-monitor-reloader
version: v1.0.1
prometheusReloader:
baseImage: quay.io/prometheus-operator/prometheus-config-reloader
version: v0.49.0
imagePullPolicy: IfNotPresent

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论