tidb 介绍
邓登( Suan Deng)和格雷格·韦伯(Greg Weber)是PingCAP的云产品工程师。
Kubernetes的兴起极大地简化了云原生应用程序的部署和操作。 经验的重要部分是轻松运行像TiDB这样的云原生分布式数据库。 TiDB是一个开源的,MySQL兼容的“ NewSQL”数据库,它支持混合事务处理和分析处理(HTAP)。
在本教程中,我们将讨论如何使用TiDB Operator ,这是PingCAP的新开源项目,以利用Kubernetes部署整个TiDB平台及其所有组件。 TiDB Operator允许您监视Kubernetes集群中的TiDB部署,并提供管理职责的网关。
在这一点上,就像Linux基金会执行董事Jim Zemlin所说的那样,也许Kubernetes是云原生应用程序的事实上的编排引擎,即“云的Linux ”,这也许是一个已成定局的结论。 Kubernetes不仅是一种成熟且有用的技术,而且对于许多大公司的IT运营具有战略价值。 2017年, 至少有54%的《财富》 500强公司正在招聘Kubernetes技能。
受CoreOS的Operator Framework普及的概念和模式的启发,大约一年前,我们开始构建TiDB Operator。 那时,Kubernetes不稳定或功能丰富,所以我们必须实施许多变通办法以使我们的操作员...运转良好。 随着去年Kubernetes的迅猛发展,在将GitHub上的TiDB Operator开源之前,我们重构了旧代码以使其与当今Kubernetes的标准和风格保持一致。
Kubernetes的日益普及催生了庞大的云原生应用生态系统,这一点由云原生计算基金会(CNCF)组装的大量云原生项目证明了这一点。 那么TiDB在所有这些方面适合什么? 这些应用程序中的大多数都可以被认为是无状态的 ,占据了任何云原生架构的一些核心部分,例如微服务,服务网格,消息传递/跟踪/监视等。但是, 状态应用程序(例如持久性分布式数据库)也有一个地方)。 这就是TiDB的适用范围。
让我们深入研究如何在笔记本电脑上使用Kubernetes部署TiDB,尽管这可以在任何Kubernetes集群上完成。 请注意,此本地部署仅是为了使您能体会TiDB Operator的测试和试验能力,而不是用于生产用途。 我们的团队和开源社区仍在对其进行测试。 我们鼓励您参加。
首先,让我们快速概述一下TiDB集群中的内容以及它如何与Kubernetes架构相适应。 每个TiDB集群都有三个组件:
在Kubernetes的上下文中,TiKV和PD在磁盘上维护数据库状态,因此被映射到具有持久卷声明的StatefulSet。 TiDB无状态SQL层也映射到StatefulSet,但不会进行任何持久卷声明。
该安装已经过测试,可以在MacOS和Linux上运行,但是请注意,在笔记本电脑上运行Kubernetes正在进行中。
Minikube是在笔记本电脑上运行Kubernetes的流行选项。 但是,Minikube仅创建一个Kubernetes节点。 要运行TiDB,我们需要多个Kubernetes节点。 有一些选项,但是在本教程中,我们将使用DinD(Docker中的Docker)。
DinD允许在顶级Docker容器内运行Docker守护程序。 这意味着顶级容器可以模拟Kubernetes节点并在其中启动容器。 kubeadm-dind-cluster项目通过DinD在独立计算机上作为Kubernetes节点启动多个Docker容器,然后通过使用Docker在这些节点上启动Kubernetes组件来启动Kubernetes集群。
在将TiDB集群部署到Kubernetes之前,请确保满足以下要求:
brew install md5sha1sum
进行安装。 使用DinD安装和部署多节点Kubernetes集群:
$ wget https://cdn.rawgit.com/kubernetes-sigs/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.10.sh
$ chmod +x dind-cluster-v1.10.sh
$ CNI_PLUGIN=flannel NUM_NODES=4 ./dind-cluster-v1.10.sh up
注意:如果由于与防火墙相关的问题而无法提取Docker映像,则可以尝试以下方法(使用的Docker映像是从UCloud Docker Registry提取的):
$ git clone https://github.com/pingcap/kubeadm-dind-cluster
$ cd kubeadm-dind-cluster
$ NUM_NODES=4 tools/multi_k8s_dind_cluster_manager.sh rebuild e2e-v1.10
(此引导过程将花费5到10分钟。这是获取冷饮或进行拉伸的好时机。)
完成DinD群集引导后,使用以下命令来验证Kubernetes群集已启动并正在运行:
$ kubectl get node,componentstatus
$ kubectl get po -n kube-system
您的输出应类似于以下屏幕截图,其中所有组件都在运行。 如果没有,给它更多的时间。
IDG如果您想在Kubernetes仪表板中查看部署,则可以使用以下命令启动代理:
$ kubectl proxy
然后,您可以查看仪表板 。
IDG现在集群已启动并正在运行,您需要将Kubernetes软件包管理器Helm安装到集群中。 Helm将用于部署和管理TiDB Operator和TiDB集群。
$ os=`uname -s| tr ‘[:upper:]’ ‘[:lower:]’`
$ wget “https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-${os}-amd64.tar.gz”
$ tar xzf helm-v2.9.1-${os}-amd64.tar.gz
$ sudo mv ${os}-amd64/helm /usr/local/bin
$ git clone https://github.com/pingcap/tidb-operator
$ cd tidb-operator
$ kubectl apply -f manifests/tiller-rbac.yaml
$ helm init --service-account=tiller --upgrade
$ kubectl get po -n kube-system | grep tiller # verify Tiller is running; this should take only a few seconds
$ helm version # verify the Helm server is running
注意:如果由于防火墙导致图像拖拉失败而导致分helm init --service-account=tiller --upgrade
容器无法启动,则可以使用以下命令替换helm init --service-account=tiller --upgrade
:
helm init --service-account=tiller --upgrade —tiller-image=uhub.ucloud.cn/pingcap/tiller:v2.9.1
LocalPersistentVolume用于持久保存PD / TiKV数据。 本地持久卷供应商无法在DinD中直接使用,因此您将需要修改其部署。 而Kubernetes不支持动态provisionin 摹呢,所以你需要手动安装的磁盘或目录挂载点。
为了简化此操作,请使用以下脚本来帮助配置开发环境:
$ # create directories for local volumes, this happens in the tidb-operator directory
$ ./manifests/local-dind/pv-hosts.sh
$ # deploy local volume provisioner
$ kubectl apply -f manifests/local-dind/local-volume-provisioner.yaml
$ # wait for local-volume-provisioner pods to run, which may take a few minutes
$ kubectl get po -n kube-system -l app=local-volume-provisioner
$ # verify pv created
$ kubectl get pv
您的输出应如下所示:
IDG$ kubectl apply -f manifests/crd.yaml
$ # This command creates the custom resource for the cluster that the operator uses.
$ kubectl get customresourcedefinitions
$ # Install the TiDB Operator into Kubernetes
$ helm install charts/tidb-operator --name=tidb-operator --namespace=pingcap
$ # while waiting for operator to run, you can check its status with this command
$ kubectl get po -n pingcap -l app=tidb-operator
IDG
$ helm install charts/tidb-cluster --name=tidb-cluster --namespace=tidb
$ # you can watch the tidb cluster get created using this ‘watch’ command
$ watch kubectl get pods --namespace tidb -l cluster.pingcap.com/tidbCluster=demo -o wide
您的输出应如下所示:
IDG$ # you can see all the services available to you now with your tidb cluster deployment and their port number to access them
$ kubectl get service -n tidb
IDG
$ # you can see the entire pod with this command
$ kubectl get pod -n tidb
IDG
要访问TiDB集群,请使用kubectl port-forward
将服务公开给主机。
使用MySQL客户端访问TiDB:
$ kubectl port-forward svc/demo-tidb 4000:4000 --namespace=tidb
$ mysql -h 127.0.0.1 -P 4000 -u root
IDG
查看监视器仪表板:
$ kubectl port-forward svc/demo-grafana 3000:3000 --namespace=tidb
既然您已经使用tidb-operator部署了一个可用的TiDB集群,那么可以尝试以下一些功能。
您只需修改副本数即可扩展或扩展TiDB集群。
首先配置图表/tidb-cluster/values.yaml文件。 例如,要扩展群集,可以将TiKV副本的数量从3修改为5,或将TiDB副本的数量从2修改为3。
然后运行以下命令以应用更改:
helm upgrade tidb-cluster charts/tidb-cluster --namespace=tidb
注意:如果需要按TiKV进行扩展,则消耗的时间取决于现有数据量,因为需要安全地迁移数据。
首先配置图表/tidb-cluster/values.yaml文件。 例如,将PD / TiKV / TiDB映像的版本从v2.0.4更改为v2.0.5。
然后运行以下命令以应用更改:
helm upgrade tidb-cluster charts/tidb-cluster --namespace=tidb
完成测试后,请使用以下命令销毁TiDB集群:
$ helm delete tidb-cluster --purge
注意:这只会删除正在运行的Pod和其他资源。 数据保持不变。 如果不再需要数据,请运行以下命令来清理数据。 (请注意,这将永久删除数据。)
$ kubectl get pv -l cluster.pingcap.com/namespace=tidb -o name | xargs -I {} kubectl patch {} -p ‘{”spec”:{”persistentVolumeReclaimPolicy”:”Delete”}}’
$ kubectl delete pvc --namespace tidb --all
如果您不再需要DinD Kubernetes集群,请转到存储dind-cluster-v1.10.sh的目录并运行以下命令:
$ ./dind-cluster-v1.10.sh clean
我们希望您现在已经成功使用TiDB Operator来启动TiDB集群,并体验了其与MySQL的无缝兼容性。 当然,云原生应用程序是为大型分布式系统中的许多机器而不是单个笔记本电脑设计的,因此TiDB Operator的许多方面在这里都无法展示。
TiDB运营商是TiDB正在进行的云原生之旅的重要一步。 但是,TiDB Operator仍是一个年轻的开源项目。 我们鼓励您关注它的发展,并通过做出的贡献来帮助我们改进它:错误报告,问题,PR等。下面是该项目的路线图 。
将来,我们将继续与Kubernetes社区一起成长,合并新功能,在各种云平台上与托管的Kubernetes服务集成,并使TiDB的部署和维护经验达到最佳状态。 在Twitter , LinkedIn , Reddit上关注我们,并继续关注有关如何在生产级云环境中部署TiDB的更多教程。
邓登( Suan Deng)和格雷格·韦伯(Greg Weber)是PingCAP的云产品工程师。
-
新技术论坛提供了一个以前所未有的深度和广度探索和讨论新兴企业技术的场所。 选择是主观的,是基于我们选择的技术,我们认为这些技术对InfoWorld读者来说是重要的,也是他们最感兴趣的。 InfoWorld不接受发布的营销担保,并保留编辑所有贡献内容的权利。 将所有查询发送到 [email protected] 。
翻译自: https://www.infoworld.com/article/3297700/introducing-the-kubernetes-operator-for-tidb.html
tidb 介绍