文件菜单

在AWS EKS上部署TiDB

本文档介绍如何在AWS EKS (Elastic Kubernetes Service)上部署TiDB集群。

要在自管理的Kubernetes环境中部署TiDB Operator和TiDB集群,请参见部署TiDB运营商在Kubernetes上将部署TiDB

先决条件

在AWS EKS上部署TiDB集群前,请确保满足以下要求:

  • 安装执掌3:用于部署TiDB Operator。

  • 中完成所有操作让我们从eksctl开始

    本指南包括以下内容:

    • 安装和配置awscli
    • 安装和配置eksctl用于创建Kubernetes集群。
    • 安装kubectl

如果需要验证AWS CLI配置是否正确,请执行aws配置列表命令。如果输出显示的值access_keysecret_key, AWS CLI配置正确。否则,需要重新配置AWS CLI。

注意:

本文档中描述的操作至少需要具备所需的最小权限eksctl创建Linux bastion主机所需的服务特权

创建EKS集群和节点池

根据AWS官方博客推荐和的最佳实践文档,由于大多数TiDB集群组件使用EBS卷作为存储,建议在创建EKS时为每个组件在每个可用分区(至少3个)中创建一个节点池。

保存以下配置为cluster.yaml文件。取代$ {clusterName}使用所需的集群名称。集群和节点组的名称应该与正则表达式匹配[a-zA-Z] [-a-zA-Z0-9] *,因此要避免包含_

apiVersioneksctl.io / v1alpha5种类ClusterConfig元数据的名字clusterName地区美联社-东北-1节点组-的名字管理desiredCapacity1privateNetworking真正的标签专用的管理-的名字tidb-1desiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1a”标签专用的tidb污染了专用的tidbNoSchedule-的名字tidb-1 ddesiredCapacity0privateNetworking真正的availabilityZones“ap-northeast-1d”标签专用的tidb污染了专用的tidbNoSchedule-的名字tidb-1 cdesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1c”标签专用的tidb污染了专用的tidbNoSchedule-的名字pd-1desiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1a”标签专用的pd污染了专用的pdNoSchedule-的名字pd-1 ddesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1d”标签专用的pd污染了专用的pdNoSchedule-的名字pd-1 cdesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1c”标签专用的pd污染了专用的pdNoSchedule-的名字tikv-1desiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1a”标签专用的tikv污染了专用的tikvNoSchedule-的名字tikv-1 ddesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1d”标签专用的tikv污染了专用的tikvNoSchedule-的名字tikv-1 cdesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1c”标签专用的tikv污染了专用的tikvNoSchedule

默认情况下,只需要两个TiDB节点,因此可以设置desiredCapacitytidb-1d节点组0.如果需要,您可以在任何时候扩展此节点组。

执行如下命令创建集群:

创建集群-f cluster.yaml

执行以上命令后,需要等待,直到EKS集群创建成功,节点组创建成功并添加到EKS集群中。这个过程可能需要5到20分钟。有关更多集群配置,请参见eksctl文档

警告:

如果使用区域自动伸缩组(ASG):

部署TiDB运营商

要在EKS集群中部署TiDB Operator,请参考部署TiDB运营商部分在开始。

部署TiDB集群和监控组件

介绍如何在AWS EKS中部署TiDB集群及其监控组件。

创建名称空间

使用实例创建一个命名空间,用于部署TiDB集群。

Kubectl创建命名空间tidb-cluster

注意:

一个名称空间是由同一个物理集群支持的虚拟集群。这个文档需要tidb-cluster作为一个例子。如果要使用其他名称空间,请修改对应的参数- n——名称空间

部署

首先,下载示例TidbClusterTidbMonitor配置文件:

旋度o https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/aws/tidb-cluster.yaml&&旋度o https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/aws/tidb-monitor.yaml

配置TiDB集群在应用之前进一步定制和配置CR。

注意:

缺省情况下,tidb-cluster.yaml用“内部”方案为TiDB设置LoadBalancer。即LoadBalancer只能在VPC内部访问,不能对外访问。要通过MySQL协议访问TiDB,您需要使用一个bastion主机或使用kubectl左前.如果您想在互联网上公开TiDB,并且您知道这样做的风险,您可以在tidb-cluster.yaml文件。

部署TidbClusterTidbMonitor在EKS集群的CR中,执行以下命令:

Kubectl应用-f tidb-cluster。yaml - n tidb-cluster&&Kubectl应用-f tidb-monitor。yaml - n tidb-cluster

将上面的yaml文件应用到Kubernetes集群后,TiDB Operator会根据该yaml文件创建所需的TiDB集群及其监控组件。

查看集群状态

使用实例查看TiDB集群启动状态。

Kubectl得到pod -n tidb-cluster

当所有的豆荚都在运行准备好了状态,表示TiDB集群启动成功。例如:

姓名就绪状态重启年龄tidb-discovery-5cb8474d89-n8cxk 1/1运行47 h tidb-monitor-6fbcc68669-dsjlc 3/3运行0 47 h tidb-pd-0 1/1运行0 47 h tidb-pd-1 1/1运行46 0 h tidb-pd-2 1/1运行46 0 h tidb-tidb-0 2/2运行0 47 h tidb-tidb-1 2/2运行46 0 h tidb-tikv-0 1/1运行0 47 h tidb-tikv-1 1/1 0运行47 h tidb-tikv-2 1/1运行0 h 47

访问数据库

部署TiDB集群后,可以访问TiDB数据库来测试或开发应用程序。

准备一个堡垒主机

为TiDB集群创建的LoadBalancer是一个内部网LoadBalancer。您可以创建堡垒主机在集群VPC中访问数据库。要在AWS控制台上创建bastion主机,请参见AWS的文档

选择集群的“VPC”和“子网”,在下拉框中查看集群名称是否正确。用于查看集群的VPC和子网信息。

Eksctl得到cluster -n$ {clusterName}

允许bastion主机访问Internet。请选择正确的密钥对,以便SSH登录主机。

注意:

除了使用“bastion”主机,还可以使用“connection”方式将已有的主机连接到集群VPCVPC凝视.如果在已有的VPC中创建了ek集群,则可以使用该VPC中的主机。

安装MySQL客户端并连接

创建bastion主机后,可以通过SSH连接到bastion主机,并通过MySQL客户端访问TiDB集群。

  1. 通过SSH登录bastion主机:

    ssh我/ / /你/ private-key.pem路径ec2-user@<bastion-public-dns-name>
  2. 在bastion主机上安装MySQL客户端:

    sudo百胜安装mysql - y
  3. 连接客户端到TiDB集群:

    mysql - h$ {tidb-nlb-dnsname}- p4000- u根

    $ {tidb-nlb-dnsname}为TiDB服务的LoadBalancer域名。您可以在页面中查看域名外部ip现场执行Kubectl get SVC basic-tidb -n tidb-cluster

    例如:

    $ mysql -h abfc623004ccb4cc3b363f3f37475af1-9774d22c27310bc1.elb.us-west-2.amazonaws.com -P4000-u root欢迎使用MariaDB监控器。命令结尾g. MySQL连接id1189服务器版本:5.7.25-TiDB-v4.0.2 TiDB服务器Apache许可2.0Community Edition, MySQL5.7兼容的版权c20002018、Oracle、MariaDB Corporation Ab等。类型“帮助;”“\ h”的帮助。类型\ c清晰的当前输入语句。MySQL没有一个>显示状态+--------------------+--------------------------------------+|Variable_name|价值|+--------------------+--------------------------------------+|Ssl_cipher|||Ssl_cipher_list|||Ssl_verify_mode|0||Ssl_version|||ddl_schema_version|22||server_id|ed4ba88b - 436 a - 424 d - 9087 - 977 - e897cf5ec|+--------------------+--------------------------------------+60.00证券交易委员会

注意:

  • MySQL 8.0的默认认证插件从更新mysql_native_passwordcaching_sha2_password.因此,如果您使用MySQL客户端从MySQL 8.0访问TiDB服务(集群版本< v4.0.7),并且如果用户帐户有密码,您需要显式指定——default-auth = mysql_native_password参数。
  • 默认情况下,TiDB(从v4.0.2开始)定期与PingCAP共享使用细节,以帮助了解如何改进产品。共享的内容和关闭共享的方法请参见遥测

访问Grafana监控仪表板

获取Grafana的LoadBalancer域名:

Kubectl -n tidb-cluster get SVC basic-grafana

例如:

$ kubectl get svc basic-grafana NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE basic-grafana LoadBalancer 10.100.199.42 a806cfe84c12a4831aa3313e792e3eee-1964630135 .us-west . 2.elb.amazonaws.com 3000:30761/TCP 121m

在上面的输出中外部ip列为LoadBalancer域名。

您可以访问$ {grafana-lb}: 3000地址使用您的web浏览器查看监控指标。取代$ {grafana-lb}LoadBalancer域名。

注意:

默认的Grafana用户名和密码都是管理

访问TiDB仪表盘

看到访问TiDB仪表板参阅有关如何安全地允许访问TiDB Dashboard的说明。

升级

要升级TiDB集群,请编辑spec.version通过执行Kubectl编辑tc基本-n tidb-cluster

升级过程不会立即结束。可以通过执行命令查看升级进度Kubectl得到豆荚-n tidb-cluster -看

向外扩展

在向外扩展集群之前,您需要向外扩展相应的节点组,以便新实例有足够的资源进行操作。

本节介绍如何向外扩展EKS节点组和TiDB组件。

扩展EKS节点组

当向外扩展TiKV时,节点组必须在不同的可用性区域之间均匀地向外扩展。下面的示例展示了如何向外扩展tikv-1atikv-1c,tikv-1d组的$ {clusterName}集群到2个节点:

节点组——群集$ {clusterName}——名字tikv-1a节点2——nodes-min2——nodes-max2节点组——群集$ {clusterName}——名字tikv-1c节点2——nodes-min2——nodes-max2节点组——群集$ {clusterName}——名字tikv-1d节点2——nodes-min2——nodes-max2

有关管理节点组的更多信息,请参见eksctl文档

扩展TiDB组件

向外扩展EKS节点组之后,执行Kubectl编辑tc基本-n tidb-cluster,并修改每个组件的副本到所需的副本数量。然后完成扩展过程。

部署TiFlash / TiCDC

TiFlash是TiKV的柱状存储延伸。

TiCDC是一个通过提取TiKV更改日志来复制TiDB增量数据的工具。

这两个部分是不是必需的在部署。本节展示一个快速启动示例。

添加节点组

在eksctl (cluster.yaml),添加以下两项,分别为TiFlash/TiCDC添加节点组。desiredCapacity是您希望的节点数。

-的名字tiflash-1desiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1a”标签专用的tiflash污染了专用的tiflashNoSchedule-的名字tiflash-1 ddesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1d”标签专用的tiflash污染了专用的tiflashNoSchedule-的名字tiflash-1 cdesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1c”标签专用的tiflash污染了专用的tiflashNoSchedule-的名字ticdc-1desiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1a”标签专用的ticdc污染了专用的ticdcNoSchedule-的名字ticdc-1 ddesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1d”标签专用的ticdc污染了专用的ticdcNoSchedule-的名字ticdc-1 cdesiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1c”标签专用的ticdc污染了专用的ticdcNoSchedule

根据EKS集群状态,使用不同的命令:

  • 如果未创建集群,执行创建集群-f cluster.yaml创建集群和节点组。
  • 如果集群已经创建,则执行创建一个节点组创建节点组。已存在的节点组将被忽略,不会再次创建。

配置和部署

  • 如果需要部署TiFlash,请配置spec.tiflashtidb-cluster.yaml

    规范...tiflashbaseImagepingcap / tiflash副本1storageClaims-资源请求存储100年胃肠道的纵容-效果NoSchedule关键专用的操作符平等的价值tiflash

    其他参数请参见配置TiDB集群

    警告:

    TiDB操作员自动挂载pv按照配置的顺序storageClaims列表。因此,如果您需要为TiFlash添加磁盘,请务必添加磁盘只到原始配置结束在列表中。此外,你必须更改原始配置的顺序。

  • 部署TiCDC需要配置spec.ticdctidb-cluster.yaml

    规范...ticdcbaseImagepingcap / ticdc副本1的纵容-效果NoSchedule关键专用的操作符平等的价值ticdc

    修改副本根据你的需要。

最后,执行Kubectl -n tidb-cluster应用-f tidb-cluster.yaml更新TiDB集群配置。

详细的CR配置请参见API参考配置TiDB集群

部署TiDB企业版

如需部署TiDB/PD/TiKV/TiFlash/TiCDC企业版,请配置规范。[tidb | pd | tikv | tiflash | ticdc] .baseImagetidb-cluster.yaml作为企业形象。企业形象格式为pingcap / [tidb | pd | tikv | tiflash | ticdc)企业

例如:

规范...pdbaseImagepingcap / pd-企业...tikvbaseImagepingcap / tikv-企业

使用其他EBS卷类型

AWS EBS支持多种卷类型。如果您需要低延迟和高吞吐量,您可以选择io1类型。步骤如下:

  1. 创建一个存储类io1

    种类StorageClassapiVersionstorage.k8s.io / v1元数据的名字io1粮食供应者kubernetes.io / aws-ebs参数类型io1fsTypeext4iopsPerGB“10”加密“假”
  2. tidb-cluster.yaml,指定io1存储类申请io1卷类型通过storageClassName字段。

    以下是TiKV的配置示例,您可以参考:

    规范tikvbaseImagepingcap / tikv副本3.storageClaims-资源请求存储100年胃肠道storageClassNameio1

AWS已经支持EBS gp3,建议使用EBS gp3卷类型。但是,缺省情况下,EKS不支持供应EBS gp3 StorageClass。详情请参阅问题.如果你使用Amazon Elastic Block Store (EBS) CSI驱动v0.8.0或更高版本,gp3已经是默认的卷类型。

有关存储类配置和EBS卷类型的更多信息,请参见存储类文档EBS卷类型

使用本地存储

使用AWS EBS作为主要的生产配置。为了模拟裸金属性能,一些AWS实例类型提供额外的NVMe SSD本地存储卷.您可以为TiKV节点池选择这样的实例,以实现更高的IOPS和更低的延迟。

注意:

不能动态更改正在运行的TiDB集群的存储类。您可以创建一个新的集群来进行测试。

在EKS升级期间,本地存储中的数据将会丢失由于节点重建。当节点重构发生时,您需要迁移TiKV中的数据。如果不需要迁移数据,建议不要在生产环境中使用本地磁盘。

由于节点重构会导致本地存储的数据丢失,请参考AWS文档暂停的ReplaceUnhealthy对TiKV节点组进行处理。

有关提供本地卷的实例类型,请参见AWS实例类型.取c5d.4xlarge作为一个例子:

  1. 为TiKV创建具有本地存储的节点组。

    中修改TiKV节点组的实例类型eksctl配置文件c5d.4xlarge

    -的名字tikv-1desiredCapacity1privateNetworking真正的availabilityZones“ap-northeast-1a”instanceTypec5d.4xlarge标签专用的tikv污染了专用的tikvNoSchedule...

    创建节点组:

    创建节点组

    如果TiKV节点组已经存在,您可以删除旧组然后创建一个新组,或者更改组名以避免冲突。

  2. 部署本地卷供应器。

    你需要使用local-volume-provisioner发现和管理本地存储。执行以下命令将部署并创建一个本地存储存储类:

    Kubectl应用-f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/eks/local-volume-provisioner.yaml
  3. 使用本地存储。

    通过以上步骤,本地卷提供器可以发现集群中所有本地NVMe SSD硬盘。

    修改tikv.storageClassNametidb-cluster.yaml文件本地存储

    欲了解更多信息,请参阅部署TiDB集群及其监控组件