使用 Ansible 安装部署 TiDB

作者: 刘博

背景知识

TiDB 作为一个分布式数据库,在多个节点分别配置安装服务会相当繁琐,为了简化操作以及方便管理,使用自动化工具来批量部署成为了一个很好的选择。

Ansible 是基于 Python 研发的自动化运维工具,糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能,而且使用简单,仅需在管理工作站上安装 Ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。基于以上原因,我们选用自动化工具 Ansible 来批量的安装配置以及部署 TiDB。

下面我们来介绍如何使用 Ansible 来部署 TiDB。

TiDB 安装环境配置如下

操作系统使用 CentOS7.2 或者更高版本,文件系统使用 EXT4。

说明:低版本的操作系统(例如 CentOS6.6 ) 和 XFS 文件系统会有一些内核 Bug,会影响性能,我们不推荐使用。

IP

Services

192.168.1.101

PD Prometheus Grafana Pushgateway Node_exporter

192.168.1.102

PD TiDB Node_exporter

192.168.1.103

PD TiDB Node_exporter

192.168.1.104

TiKV Node_exporter

192.168.1.105

Tikv Node_exporter

192.168.1.106

TiKV Node_exporter

我们选择使用 3 个 PD、2 个 TiDB、3 个 TiKV,这里简单说一下为什么这样部署。

  • 对于 PD 。PD 本身是一个分布式系统,由多个节点构成一个整体,并且同时有且只有一个主节点对外提供服务。各个节点之间通过选举算法来确定主节点,选举算法要求节点个数是奇数个 (2n+1) ,1 个节点的风险比较高,所以我们选择使用 3 个节点。
  • 对于 TiKV 。TiDB 底层使用分布式存储,我们推荐使用奇数 (2n+1) 个备份,挂掉 n 个备份之后数据仍然可用。使用 1 备份或者 2 备份的话,有一个节点挂掉就会造成一部分数据不可用,所以我们选择使用 3 个节点、设置 3 个备份 (默认值)。
  • 对于 TiDB 。我们的 TiDB 是无状态的,现有集群的 TiDB 服务压力大的话,可以在其他节点直接增加 TiDB 服务,无需多余的配置。我们选择使用两个 TiDB,可以做 HA 和负载均衡。
  • 当然如果只是测试集群的话,完全可以使用一个 PD 、一个 TiDB 、三个 TiKV (少于三个的话需要修改备份数量)

下载 TiDB 安装包并解压

#创建目录用来存放 ansible 安装包
mkdir /root/workspace                 

#切换目录
cd /root/workspace                    

#下载安装包
wget https://github.com/pingcap/tidb-ansible/archive/master.zip     

#解压压缩包到当前目录下
unzip master.zip                      

#查看安装包结构,主要内容说明如下
cd tidb-ansible-master && ls

部分内容含义

ansible.cfg: ansible 配置文件
inventoty.ini: 组和主机的相关配置
conf: TiDB 相关配置模版
group_vars: 相关变量配置
scripts: grafana 监控 json 模版
local_prepare.yml: 用来下载相关安装包
bootstrap.yml: 初始化集群各个节点
deploy.yml: 在各个节点安装 TiDB 相应服务
roles: ansible tasks 的集合
start.yml: 启动所有服务
stop.yml: 停止所有服务
unsafe_cleanup_data.yml: 清除数据
unsafe_cleanup.yml: 销毁集群

修改配置文件

主要配置集群节点的分布情况,以及安装路径。

会在 tidb_servers 组中的机器上安装 TiDB 服务(其他类似),默认会将所有服务安装到变量 deploy_dir 路径下。

#将要安装 TiDB 服务的节点
[tidb_servers]
192.168.1.102
192.168.1.103

#将要安装 TiKV 服务的节点
[tikv_servers]
192.168.1.104
192.168.1.105
192.168.1.106

#将要安装 PD 服务的节点
[pd_servers]
192.168.1.101
192.168.1.102
192.168.1.103

#将要安装 Promethues 服务的节点
# Monitoring Part
[monitoring_servers]
192.168.1.101

#将要安装 Grafana 服务的节点
[grafana_servers]
192.168.1.101

#将要安装 Node_exporter 服务的节点
[monitored_servers:children]
tidb_servers
tikv_servers
pd_servers

[all:vars]
#服务安装路径,每个节点均相同,根据实际情况配置
deploy_dir = /home/tidb/deploy

## Connection
#方式一:使用 root 用户安装
# ssh via root:
# ansible_user = root
# ansible_become = true
# ansible_become_user = tidb

#方式二:使用普通用户安装(需要有 sudo 权限)
# ssh via normal user
ansible_user = tidb

#集群的名称,自定义即可
cluster_name = test-cluster

# misc
enable_elk = False
enable_firewalld = False
enable_ntpd = False

# binlog trigger
#是否开启 pump,pump 生成 TiDB 的 binlog 
#如果有从此 TiDB 集群同步数据的需求,可以改为 True 开启
enable_binlog = False

安装过程可以分为 root 用户安装和普通用户安装两种方式。有 root 用户当然是最好的,修改系统参数、创建目录等不会涉及到权限不够的问题,能够直接安装完成。 但是有些环境不会直接给 root 权限,这种场景就需要通过普通用户来安装。为了配置简便,我们建议所有节点都使用相同的普通用户;为了满足权限要求,我们还需要给这个普通用户 sudo 权限。 下面介绍两种安装方式的详细过程,安装完成之后需要手动启动服务。

1. 使用 root 用户安装

  • 下载 Binary 包到 downloads 目录下,并解压拷贝到 resources/bin 下,之后的安装过程就是使用的 resources/bin 下的二进制程序
ansible-playbook -i inventory.ini local_prepare.yml
  • 初始化集群各个节点。会检查 inventory.ini 配置文件、Python 版本、网络状态、操作系统版本等,并修改一些内核参数,创建相应的目录。
    • 修改配置文件如下 ## Connection # ssh via root: ansible_user = root # ansible_become = true ansible_become_user = tidb # ssh via normal user # ansible_user = tidb
    • 执行初始化命令 ansible-playbook -i inventory.ini bootstrap.yml -k #ansible-playboo 命令说明请见附录
  • 安装服务。该步骤会在服务器上安装相应的服务,并自动设置好配置文件和所需脚本。
    • 修改配置文件如下 ## Connection # ssh via root: ansible_user = root ansible_become = true ansible_become_user = tidb # ssh via normal user # ansible_user = tidb
    • 执行安装命令 ansible-playbook -i inventory.ini deploy.yml -k

2. 使用普通用户安装

  • 下载 Binary 包到中控机
ansible-playbook -i inventory.ini local_prepare.yml
  • 初始化集群各个节点。
    • 修改配置文件如下 ## Connection # ssh via root: # ansible_user = root # ansible_become = true # ansible_become_user = tidb # ssh via normal user ansible_user = tidb
    • 执行初始化命令 ansible-playbook -i inventory.ini bootstrap.yml -k -K
  • 安装服务
ansible-playbook -i inventory.ini deploy.yml -k -K

启停服务

  • 启动所有服务
ansible-playbook -i inventory.ini start.yml -k
  • 停止所有服务
ansible-playbook -i inventory.ini stop.yml

附录

ansible-playbook -i inventory.ini xxx.yml -k -K -k 执行之后需要输入 ssh 连接用户的密码,如果做了中控机到所有节点的互信,则不需要此参数 -K 执行之后需要输入 sudo 所需的密码,如果使用 root 用户或者 sudo 无需密码,则不需要此参数

TiDB 源码地址:https://github.com/pingcap/tidb Ansible 源码地址:https://github.com/pingcap/tidb-ansible

本文仅代表作者观点,不代表腾讯云

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

Tomcat 安全配置与性能优化

Tomcat 安全配置与性能优化 摘要 我的系列文档 Netkiller Architect 手札Netkiller Developer 手札Netkiller...

3446
来自专栏大魏分享(微信公众号:david-share)

Openshift容器云安全加固措施70项

前言 企业中使用容器承载业务,除了考虑到容器的优势之外,容器的安全更是很多客户关心的话题。本篇文章就此进行讨论。本文在书写过程中,参考了一些文档,文后给出了链接...

4497
来自专栏zhangdd.com

linux每天定时备份MySQL数据库并删除五天前的备份文件

Mysql定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据。利用系统crontab来定时执行备份文件,按日期对...

822
来自专栏云计算教程系列

如何使用fsck - 快速解答

fsck是文件系统一致性检查的缩写,是一个实用程序,用于检查文件系统是否存在错误,并尝试在可能的情况下修复它们。它使用内置工具的组合来检查磁盘并生成其结果的报告...

983
来自专栏快乐八哥

Netbeans配置Xdebug

1.进入 http://xdebug.org/wizard.php 页面,新建一个php页面,里面输入 echo phpinfo(); 然后在运行的页面,复制页...

1987
来自专栏行者常至

将oracle驱动包加到maven中

2、确认maven环境变量已整确(cmd 中执行 mvn -v 显示maven的版本信息);

753
来自专栏大魏分享(微信公众号:david-share)

深度理解:Openshift端口方式全解析

一、几种网络端口模式 Openshift/Docker中,我们会遇到(听到)的几种网络端口模式有: Hostport Nodeport Hostnetwork ...

49810
来自专栏Jerry的SAP技术分享

使用describe命令进行Kubernetes pod错误排查

我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段。

750
来自专栏jeremy的技术点滴

获取docker容器的主机虚拟网卡

4284
来自专栏EarlGrey的专栏

如何快速部署国人开源的 Java 博客系统 Tale

前几天,在社区看到有国人开发者开源了用 Java 写的一个博客系统 Tale。从作者放出的 Demo 站点来看,效果还是不错的。本书梳理了一下部署 Tale 的...

8.5K3

扫码关注云+社区