使用 Ansible 安装部署 TiDB

开发 开发工具
TiDB 作为一个分布式数据库,在多个节点分别配置安装服务会相当繁琐,为了简化操作以及方便管理,我们选用自动化工具 Ansible 来批量的安装配置以及部署 TiDB。下面我们来介绍如何使用 Ansible 来部署 TiDB。

一、背景知识

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

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

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

二、TiDB 安装环境配置如下

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

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

iDB 安装环境配置

我们选择使用 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 安装包

  1. mkdir /root/workspace    

切换目录

  1. cd /root/workspace     

下载安装包

  1. wget https://github.com/pingcap/tidb-ansible/archive/master.zip      

解压压缩包到当前目录下

  1. unzip master.zip     

查看安装包结构,主要内容说明如下

  1. 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 路径下。

  1. #将要安装 TiDB 服务的节点 
  2. [tidb_servers] 
  3. 192.168.1.102 
  4. 192.168.1.103 
  5.  
  6. #将要安装 TiKV 服务的节点 
  7. [tikv_servers] 
  8. 192.168.1.104 
  9. 192.168.1.105 
  10. 192.168.1.106 
  11.  
  12. #将要安装 PD 服务的节点 
  13. [pd_servers] 
  14. 192.168.1.101 
  15. 192.168.1.102 
  16. 192.168.1.103 
  17.  
  18. #将要安装 Promethues 服务的节点 
  19. # Monitoring Part 
  20. [monitoring_servers] 
  21. 192.168.1.101 
  22.  
  23. #将要安装 Grafana 服务的节点 
  24. [grafana_servers] 
  25. 192.168.1.101 
  26.  
  27. #将要安装 Node_exporter 服务的节点 
  28. [monitored_servers:children] 
  29. tidb_servers 
  30. tikv_servers 
  31. pd_servers 
  32.  
  33. [all:vars] 
  34. #服务安装路径,每个节点均相同,根据实际情况配置 
  35. deploy_dir = /home/tidb/deploy 
  36.  
  37. ## Connection 
  38. #方式一:使用 root 用户安装 
  39. # ssh via root: 
  40. ansible_user = root 
  41. ansible_become = true 
  42. ansible_become_user = tidb 
  43.  
  44. #方式二:使用普通用户安装(需要有 sudo 权限) 
  45. # ssh via normal user 
  46. ansible_user = tidb 
  47.  
  48. #集群的名称,自定义即可 
  49. cluster_name = test-cluster 
  50.  
  51. # misc 
  52. enable_elk = False 
  53. enable_firewalld = False 
  54. enable_ntpd = False 
  55.  
  56. # binlog trigger 
  57. #是否开启 pump,pump 生成 TiDB 的 binlog  
  58. #如果有从此 TiDB 集群同步数据的需求,可以改为 True 开启 
  59. enable_binlog = False 

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

1. 使用 root 用户安装

(1) 下载 Binary 包到 downloads 目录下,并解压拷贝到 resources/bin 下,之后的安装过程就是使用的 resources/bin 下的二进制程序

  1. ansible-playbook -i inventory.ini local_prepare.yml 

(2) 初始化集群各个节点。会检查 inventory.ini 配置文件、Python 版本、网络状态、操作系统版本等,并修改一些内核参数,创建相应的目录。

修改配置文件如下

  1. ## Connection 
  2. # ssh via root: 
  3. ansible_user = root 
  4. ansible_become = true 
  5. ansible_become_user = tidb 
  6.  
  7. # ssh via normal user 
  8. ansible_user = tidb 

执行初始化命令

  1. ansible-playbook -i inventory.ini bootstrap.yml -k   #ansible-playboo命令说明请见附录 

(3) 安装服务。该步骤会在服务器上安装相应的服务,并自动设置好配置文件和所需脚本。

修改配置文件如下

  1. ## Connection 
  2. # ssh via root: 
  3.   ansible_user = root 
  4.   ansible_become = true 
  5.   ansible_become_user = tidb 
  6.  
  7. # ssh via normal user 
  8. ansible_user = tidb 

执行安装命令

  1. ansible-playbook -i inventory.ini deploy.yml -k 

2. 使用普通用户安装

(1) 下载 Binary 包到中控机

  1. ansible-playbook -i inventory.ini local_prepare.yml 

(2) 初始化集群各个节点。

修改配置文件如下

  1. ## Connection 
  2. # ssh via root: 
  3. ansible_user = root 
  4. ansible_become = true 
  5. ansible_become_user = tidb 
  6.  
  7. # ssh via normal user 
  8. ansible_user = tidb 

执行初始化命令

  1. ansible-playbook -i inventory.ini bootstrap.yml -k -K 

(3) 安装服务

  1. ansible-playbook -i inventory.ini deploy.yml -k -K 

六、启停服务

(1) 启动所有服务

  1. ansible-playbook -i inventory.ini start.yml -k 

(2) 停止所有服务

  1. ansible-playbook -i inventory.ini stop.yml 

(3) 附录

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

【本文是51CTO专栏作者“PingCAP”的原创文章,转载请联系作者本人获取授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2020-01-02 10:44:22

运维架构技术

2020-10-10 20:30:05

Ansible自动化工具系统运维

2023-12-11 18:15:46

AnsibleMinikubeKubernetes

2022-06-15 10:12:04

Ansible命令Linux

2021-01-26 06:58:03

AnsibleCeph集群运维

2022-11-21 16:57:20

2016-10-17 13:33:26

原子主机AnsibleCockpit

2021-12-21 21:00:23

Ansible树莓派语音助手

2021-05-17 12:54:04

AnsiblePodman开源

2018-06-12 14:50:35

系统运维Ansible运行分析工具

2022-11-22 13:00:38

2019-09-08 17:04:00

DebianLinuxAnsible

2015-08-17 14:13:52

Ansible轻量自动化部署工具

2017-02-22 13:53:16

2019-10-30 14:47:05

工具代码开发

2021-01-08 08:19:36

数据库TiDB集群

2017-07-11 08:38:38

TiDB数据库分布式

2016-10-24 09:09:48

AnsibleVagrantFedora

2020-01-02 19:00:05

AnsibleGitHubGitLab

2019-10-30 12:00:02

Ansible容器与云容器镜像
点赞
收藏

51CTO技术栈公众号