TiDB 做为一个分布式数据库,在多个节点分别配置安装服务会至关繁琐,为了简化操做以及方便管理,使用自动化工具来批量部署成为了一个很好的选择。javascript
Ansible 是基于 Python 研发的自动化运维工具,糅合了众多老牌运维工具的优势实现了批量操做系统配置、批量程序的部署、批量运行命令等功能,并且使用简单,仅需在管理工做站上安装 Ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。基于以上缘由,咱们选用自动化工具 Ansible 来批量的安装配置以及部署 TiDB。java
下面咱们来介绍如何使用 Ansible 来部署 TiDB。git
操做系统使用 CentOS7.2 或者更高版本,文件系统使用 EXT4。github
说明:低版本的操做系统(例如 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、1 个 TiKV,这里简单说一下为何这样部署。数据库
#建立目录用来存放 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复制代码
部份内容含义json
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: 销毁集群复制代码
主要配置集群节点的分布状况,以及安装路径。bootstrap
会在 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 权限。
下面介绍两种安装方式的详细过程,安装完成以后须要手动启动服务。网络
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复制代码
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 无需密码,则不须要此参数