点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

作者 | yangyidba

来源 | 公众号「yangyidba」

一 前言

朋友圈,关注的公众号经常出现各个公司开始用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.19

TiKV

qabb-qa-tibd2/10.215.20.7

TiKV

qabb-qa-tibd3/10.215.20.13

TiKV

部署的时候整个集群还需要一个中控机,通过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团队技术的远程支持,帮忙解决各种问题。

本文通过OpenWrite的Markdown转换工具发布

关注我,回复“加群”加入各种主题讨论群

  • IntelliJ 平台 2020 年路线图

  • 解决Maven依赖冲突的好帮手,必须了解一下!

  • 使用Redis实现在线点赞系统

  • 前端项目如何用eslint提高代码质量

  • 通过这12张手绘图,搞懂什么是微服务架构

  • Redis 到底是怎么实现“附近的人”这个功能的呢?

点击“阅读原文免费领取价值199元学习大礼包

从零部署TiDB集群相关推荐

  1. 通过 TiUP 部署 TiDB 集群的拓扑文件配置

    通过 TiUP 部署或扩容 TiDB 集群时,需要提供一份拓扑文件(示例)来描述集群拓扑. 同样,修改集群配置也是通过编辑拓扑文件来实现的,区别在于修改配置时仅允许修改部分字段.本文档介绍拓扑文件的各 ...

  2. TiDB集群部署最细化教程-亲测有效

    TiDB-TiUP集群部署 本次部署使用环境: CentOS Linux release 7.9.2009 (Core) TiDB 6.5.1 三台服务器: (内)172.19.172.179 (内) ...

  3. tidb集群安装部署

    tidb集群安装部署 部署架构图 一.安装tiup curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/inst ...

  4. TIDB集群搭建-流水线

    官方文档:TIDB简介 TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传 ...

  5. 在开发环境使用 TiUP安装TiDB集群

    TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP cluster 组件就可以进行日常的运维工 ...

  6. Centos7配置TiDB集群

    一:各模块属性 模块名称 状态 建议实例数 功能 负载均衡组件 TiDB 无状态 2 接收SQL请求,处理SQL相关逻辑,并通过PB找到存储数据的TiKV地址 LVS.HAProxy.F5 PB 集群 ...

  7. 在华为 Kylin V10 SP1操作系统,HUAWEI,Kunpeng 920 CPU(4Cores)单机上模拟部署生产环境TiDB集群...

    作者:陈麒 原文来源: https://tidb.net/blog/0cacc3df TiDB 集群部署 在单机上模拟部署生产环境集群 适用场景:希望用单台 Linux 服务器,体验 TiDB 最小的 ...

  8. tidb 集群部署详细步骤

    tidb 集群部署详细步骤 一.准备工作 1. 四台服务器(开通外网) 117.50.96.236 centos 7.3 64位 117.50.96.235 centos 7.3 64位 117.50 ...

  9. 在线安装TIDB集群

    在线安装TIDB集群  在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要 ...

最新文章

  1. 小猿圈自学web前端之CSS3动画练习案例:用CSS3做个钟表
  2. 从C++strStr到字符串匹配算法
  3. HDU1533 Going Home(最小费用最大流 spfa模版)
  4. 深入理解Java注解Annotation之注解处理器
  5. 2020CCPC(长春) - Combination Lock(二分图博弈)
  6. 没有任何权力的“项目经理”该如何当?
  7. 电脑系统哪个最好用_袪痘袪痘印哪个产品最好 祛痘印最好用的产品十大推荐...
  8. oracle同义词6,oracle 同义词,oracle同义词是什么意思?
  9. HLS第十二课(bayer photo)
  10. CVPR 2020 论文大盘点-人脸技术篇
  11. Windows Azure 虚机密码忘记处理
  12. 阿里巴巴食堂:看菜名我跪了~程序员:给我来个“油炸产品经理”
  13. 关于怎样突破一个个微信投一票及人工刷票微信号推荐的方法和教程
  14. eclipse安装nodejs插件nodeclipse
  15. 【服务器数据恢复】华为OceanStor服务器热备盘同步数据失败的数据恢复案例
  16. iview-admin二级目录只有一个时变成一级目录解决方法
  17. 【Mybatis框架】初识Mybatis
  18. sio.loadmat加载高光谱图像出错:OSError: could not read bytes
  19. 下列不属于C语言程序开发步骤,程序设计技术(C语言)-中国大学mooc-题库零氪...
  20. 二项式反演(学习笔记)

热门文章

  1. python 正则表达式 查找 替换 文本
  2. python3 读取文件的最后一行 非空行
  3. linux shell 查找某字符串 在文件的行数
  4. linux centos7 开机自动登录
  5. linux c icmp协议 判断主机存活
  6. easy_install与pip 区别
  7. golang range 遍历读写数据问题
  8. golang goroutine 协程原理
  9. alpine linux 简介(面向安全应用的发行版)apk
  10. ashx和aspx的区别