从零部署TiDB集群

一 前言

朋友圈,关注的公众号经常出现各个公司开始用TiDB的案例和各种技术分享。对TiDB蛮有兴趣,这几天终于可以尝试接触 TiDB,第一步当然是安装和部署。过程还是蛮曲折的,耗费差不多三个工作日。本文先记录安装过程和遇到的问题,避免其他朋友踩坑。

二 TiDB 简介

TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。一图胜千言

TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。

Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。

PD 通过 Raft 协议保证数据的安全性。Raft 的 leader server 负责处理所有操作,其余的 PD server 仅用于保证高可用。建议部署奇数个 PD 节点。

TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。

TiSparkTiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。

TiDB Operator 提供在主流云基础设施(Kubernetes)上部署管理 TiDB 集群的能力。它结合云原生社区的容器编排最佳实践与 TiDB 的专业运维知识,集成一键部署、多集群混部、自动运维、故障自愈等能力,极大地降低了用户使用和管理 TiDB 的门槛与成本。

源自 https://pingcap.com/docs-cn/stable/architecture/

二 准备

初始部署需要准备好一个集群拓扑,TiKV和TiDB,PD分开部署,TiDB可以和PD混合部署,TiKV 作为存储单元独立部署。监控节点可以和某一台TiDB混合部署。

qabb-qa-tibd0/10.215.20.24部署管控机器/TiDB/PD/ 监控
qabb-qa-tibd1/10.215.20.19TiKV
qabb-qa-tibd2/10.215.20.7TiKV
qabb-qa-tibd3/10.215.20.13TiKV

部署的时候整个集群还需要一个中控机,通过ansible 在其他节点上执行各种命令和集群的运维动作。

官方文档中需要一个tidb账号具有各个节点免密登陆权限和sudo权限,这个和我们公司的运维体系有点冲突,故本次部署的时候使用我个人账号代替。

三 部署步骤

我在测试环境可以选择联机部署的方式,如果不能访问外网,则需要采用离线部署。

3.1 获取最新的版本

git clone https://github.com/pingcap/tidb-ansible.git

安装ansible以及依赖

cd /data/users/yangqilong/tidb-ansible && \sudo pip install -r ./requirements.txt && \ansible --version

编辑文件 hosts.ini

[servers]
10.215.20.24
10.215.20.19
10.215.20.7
10.215.20.13

[all:vars]
username =  yangqilong
ntp_server = pool.ntp.org

3.2 验证用户权限

命令如下:

ansible -i inventory.ini all -m shell -a ‘whoami’

需要都返回”yangqilong”

ansible -i inventory.ini all -m shell -a ‘whoami’ -n

返回 “root”

3.3 联网下载TiDB binary

ansible-playboot blocal_prepare.yml

3.4 初始化系统环境

ansible-playbook bootstrap.yaml

我在安装TiDB 集群过程中,这一步遇到的问题比较多,解决这些问题的办法是:在tidb-ansible下面的roles目录,对应找到出错的tasks,如果确定一些限制或者检查可以忽略,则可以注释掉对应的代码。

  1. ulimit -n 小于1000000的限制,ansible会自动在 /etc/security/limits.conf 添加或者自己手动添加。
  2. fio压测性能不过关,则删掉 benchmark相关的task。
  3. 还有ext4挂载参数要求是加上 nodelalloc, 我的测试环境是把这个ext4 注释掉了,生产环境用的xfs系统。

进展顺利会有如下提示:

3.5 部署TiDB集群

前面的都是基本准备安装包和检查系统参数和系统硬件的动作,接下来终于到了安装的步骤,不过这一步依然可能有问题。

ansible-playbook deploy.yml

安装顺利的结果

可能遇到的问题是 用于监控的blackbox_exporter二进制文件有异常,命名存在但是脚本执行命令报不存在。

解决方法

在tidb-ansible/roles/blackboxexporter/tasks/binarydeployment.yml文件里,删除setcap 这个task

#- name: blackbox_exporter binary add CAP_NET_RAW capability#  command: setcap cap_net_raw+ep "{{ deploy_dir }}/bin/blackbox_exporter"#  become: true

3.6 启动集群

ansible-playbook start.yml

启动需要一些列的检查,没任何问题之后 提示:

然后就可以使用mysql 客户端连接tidb了

四 小结

第一次整体安装集群的过程比较复杂和曲折,和安装Oracle 的RAC 有点像,经过一系列的账号权限,系统参数,rpm包的检查才能确定是否符合安装条件。有自己独立运维体系的团队,可以尝试自己打包部署。

接下来就可以开始深入的学习TiDB各种功能和运维实践,期待TiDB能在有赞有合适的用处。

感谢TiDB团队技术的远程支持,帮忙解决各种问题。

作者 | yangyidba 来源 | 公众号「yangyidba」

Image placeholder
IT头条
未设置
  46人点赞

没有讨论,发表一下自己的看法吧

推荐文章
influxDB集群模式实践

influxDB数据库以其优秀的时序数据存储和查询能力,在处理和分析类似资源监控等时序数据方面得到了广泛的应用。而influxDB自带的各种特殊函数如求平均值、标准差、随机取数据,使数据分析变得十分方

如何在生产环境中部署Kubernetes集群?

如果把kubernetes集群应用于生产环境中,需要做哪些准备?我们先要弄清楚一个词,什么是“生产就绪”?生产就绪,是我们经常听到的一个专业术语,大概意思是已经准备好并已处于即将生产的状态。但是,到底

使用kubei一步部署k8s高可用集群(包含docker安装、k8s组件安装、master初始化和加入nodes节点)

kubei(kubernetesinstaller)是一个go开发的用来部署kubernetes高可用集群的命令行工具,该工具可在Windows、Linux、Mac中运行kubei原理:通过ssh连接

从零开始入门 K8s:应用编排与管理

一、需求来源 背景问题 首先来看一下背景问题。如下图所示:如果我们直接管理集群中所有的Pod,应用A、B、C的Pod,其实是散乱地分布在集群中。 现在有以下的问题: 首先,如何保证集群内可用Pod的

【总结】2019 从零开始入行 1年6 个月以来的感受和体验

2019年已经随着寒潮的袭来进入了年尾。 去年年末的时候写了一篇2018年的总结,当时记录了我从零基础入行半年的一些感想和感受。当时收到了很多人的温暖的鼓励,在这里谢谢大家。因为工作业务上以及个人琐

从零开始入门 K8s | K8s 的应用编排与管理

作者|张振阿里云高级技术专家一、资源元信息1.Kubernetes资源对象我们知道,Kubernetes的资源对象组成:主要包括了Spec、Status两部分。其中Spec部分用来描述期望的状态,St

DBA职业发展之路:去“IOE”等挑战之下,DBA将何去何从?

开篇随着近些年来,开源、自动化、云化的兴起,DBA职业也正悄然发生一些变化。经常有朋友咨询我,职业发展规划;特别是近期Oracle的大幅裁员之后,针对DBA这一职业未来该如何发展?本文是个人对此问题的

美团点评Kubernetes集群管理实践

背景作为国内领先的生活服务平台,美团点评很多业务都具有非常显著、规律的“高峰”和“低谷”特征。尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长。这对集群中心的资源弹性和可用性有非常高的要求

PB级数据实时查询,滴滴Elasticsearch多集群架构实践

Elasticsearch是基于Lucene实现的分布式搜索引擎,提供了海量数据实时检索和分析能力。Elastic 公司开源的一系列产品组成的ElasticStack,可以为日志服务、搜索引擎、系统监

运营商大规模数据集群治理的实践指南

写在开头的话Q: 军哥,你们运营商行业的大规模集群,都有啥特点啊?A: 我们集群主要是承载B域、信令和互联网日志等去标识化数据,简单的说,有三个特点:1)集群规模较大:数千节点规模,近百PB数据量,日

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis

Linux集群

普通服务器:1-1.5w1u式机架式服务器服务器应用举例:端游(客户端游戏):如魔兽世界LOL;页游(网页游戏):如斗地主,偷菜页游占的资源更大,(端游的地图、建模、动画等等都安装在了本机(客户端)上

Kafka 集群在马蜂窝大数据平台的优化与应用扩展

马蜂窝技术原创文章,更多干货请订阅公众号:mfwtechKafka是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐、低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的

使用 openvpn 与集群内部服务通信

当我们访问集群内部服务,如postgres,redis,traefikDashboard,gitlab时,如果直接暴露在公网中,会造成很大的安全隐患,而使用BasicAuth,WhiteList等也稍

Redis学习笔记2—缓存、集群、一致性等

缓存淘汰策略为了保证高性能,缓存都保存在内存中,当内存满了之后,需要通过适当的策略淘汰老数据,以便腾出空间存储新数据。数据的淘汰策略,典型的包括FIFO(先进先出,淘汰最老数据),LRU(淘汰最近最少

Redis 6.0 新特性之集群代理

Redis6.0releasenotes ======================= UpgradeurgencyLOW:ThisisthefirstRCofRedis6. Introduct

MongoDB初学者最常用的10个命令

1.登录mongodb 以下命令可以用于登录mongodb数据库,但是需要保证用户你声明的数据库中存在对应的用户和密码 mongo--host--port-u-p--authenticationDat

GoWeb教程_11.2. 使用 GDB 调试

开发程序过程中调试代码是开发者经常要做的一件事情,Go语言不像PHP、Python等动态语言,只要修改不需要编译就可以直接输出,而且可以动态的在运行环境下打印数据。当然Go语言也可以通过Println

0x01 MongoDB 练习手札

最近看Node.js相关的一些东西,跟着书上的教程实现了一个Express+MongoDB+Vue.js实验性项目,对于常年使用LNMP黄金搭档的我来说,不用写SQL语句真的是太爽了,也不用关心MyS

Hyperf 发布 Session、极简 DB、zk 配置中心组件和支持 Twig/Plates 视图引擎支持

更新内容 本周更新主要新增极简DB组件,Zookeeper配置中心,和Session组件,以及为视图组件增加了Twig和Plates视图引擎的支持,同时为计划任务组件增加了集群执行的支持。极简DB组件

InfluxDB 管理工具

配置 vim/etc/influxdb/influxdb.conf[admin] Determineswhethertheadminserviceisenabled. enabled=true The

NutsDB v0.5.0 发布~

项目地址 https://github.com/xujiajun/nutsdb Changelog [Newfeature]SupportEntryIdxMode:HintBPTSparseIdxMo

docker 安装 Laravel 环境 (nginx mariadb PHP7.3)

1,安装mariadb创建网路dockernetworkcreate--subnet=172.18.0.0/16mynetworkdockerrun-d-p3306:3306-eMYSQL_ROOT_

GoldenDB ,一个已经全面支撑银行核心系统的国产数据库

摘要:沿用、并存还是替代,一直是银行核心系统数据库转型重点思考的问题。四大行目前主要采用的是沿用与并存的数据库产品战略,在确保稳定的大前提下对新兴数据库技术进行探索研究和实践。相对而言,股份制银行在这

MongoDB与阿里云达成战略合作,云将是数据库最佳载体

摘要:开源数据库厂商与云服务供应商两大阵营之间存在争议是事实,MongoDB与阿里云达成战略合作,背后意味着什么?对MongoDB,对阿里云分别意味着什么?对整个数据库产业又意味着什么?MongoDB