一、背景知识TiDB作为一个分布式数据库,在多个节点上配置和安装服务是相当繁琐的。为了简化操作和方便管理,使用自动化工具进行批量部署是个不错的主意。选择。Ansible是基于Python开发的自动化运维工具。它结合了很多老式运维工具的优点,实现了批量操作系统配置、批量程序部署、批量运行命令等功能。使用简单,只需要在管理工作站上安装Ansible。程序配置了被控主机的IP信息,被控主机没有客户端。基于以上原因,我们选择了自动化工具Ansible来批量安装、配置和部署TiDB。下面介绍如何使用Ansible部署TiDB。2.TiDB安装环境配置如下:操作系统使用CentOS7.2及以上版本,文件系统使用EXT4。注意:低版本操作系统(如CentOS6.6)和XFS文件系统存在一些内核bug,会影响性能,不推荐使用。我们选择使用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和负载均衡。当然,如果只是测试集群,可以使用1个PD,1个TiDB,3个TiKV(如果少于3个,需要修改备份个数)三、下载TiDB安装包并解压创建ansible安装包存放目录mkdir/root/Workspace切换目录cd/root/workspace下载安装包wgethttps://github.com/pingcap/tidb-ansible/archive/master.zip将压缩包解压到当前目录unzipmaster.zip查看安装包结构,主要内容如下cdtidb-ansible-master&&ls4.部分内容含义ansible.cfg:ansible配置文件inventoty.ini:组和主机的相关配置conf:TiDB相关配置模板group_vars:相关变量配置脚本:grafana监控json模板local_prepare.yml:下载相关安装包bootstrap.yml:初始化集群各节点deploy.yml:InstallTiDB在每个节点上对应的服务角色:ansible任务的集合start.yml:启动所有服务stop.yml:停止所有服务unsafe_cleanup_data.yml:清除数据unsafe_cleanup。yml:销毁集群5.修改配置文件主要配置集群节点分布和安装路径。TiDB服务(其他类似)会安装在tidb_servers组的机器上,所有服务默认安装在变量deploy_dir路径下。#要安装TiDB服务的节点[tidb_servers]192.168.1.102192.168.1.103#要安装TiKV服务的节点[tikv_servers]192.168.1.104192.168.1.105192.168.1.106#要安装PD服务的节点被安装[pd_servers]192.16192.1.10168.1.102192.168.1.103#将要安装Promethues服务的节点#MonitoringPart[monitoring_servers]192.168.1.101#将要安装Grafana服务的节点[grafana_servers]192.168.1.101#该节点其中会安装Node_exporter服务[monitored_servers:children]tidb_servers_servers[var:serverstik_v]#服务安装路径,每个节点都一样,根据实际情况配置deploy_dir=/home/tidb/deploy##连接#方法一:使用root用户安装#sshviaroot:#ansible_user=root#ansible_become=true#ansible_become_user=tidb#方法二:使用普通用户安装(需要sudo权限)#sshvianormaluseransible_user=tidb#集群名称,可以自定义itcluster_name=test-cluster#miscenable_elk=Falseenable_firewalld=Falseenable_ntpd=False#binlogtrigger#是否开启pump,pump生成TiDBbinlog#如果需要从这个TiDB集群同步数据,可以改成True开启enable_binlog=错误的。安装过程分为root用户安装和普通用户安装。当然,必须要有root用户。修改系统参数、创建目录等不会涉及权限不足,直接安装即可完成。但是有些环境并没有直接给root权限,这种场景下需要普通用户安装。为了便于配置,我们建议所有节点使用相同的普通用户;为了满足权限需求,我们还需要给这个普通用户sudo权限。下面分别介绍两种安装方式的详细过程。安装完成后,需要手动启动该服务。1、使用root用户安装(1)下载Binary包到downloads目录,解压复制到resources/bin,后面的安装过程就是使用ansible-playbook-iinventory.inilocal_prepare.yml下的二进制程序resources/bin(2)初始化集群的每个节点。它会检查inventory.ini配置文件、Python版本、网络状态、操作系统版本等,修改一些内核参数,并创建相应的目录。修改配置文件如下##Connection#sshviaroot:ansible_user=root#ansible_become=trueansible_become_user=tidb#sshviannormaluser#ansible_user=tidb执行初始化命令ansible-playbook-iinventory.inibootstrap.yml-k#ansible-playboo命令说明,请参考附录(3)安装服务。这一步会在服务器上安装相应的服务,并自动设置配置文件和所需的脚本。修改配置文件如下##Connection#sshviaroot:ansible_user=rootansible_become=trueansible_become_user=tidb#sshviannormaluser#ansible_user=tidb执行安装命令ansible-playbook-iinventory.inideploy.yml-k2。使用普通用户安装(1)下载Binary包到中控机ansible-playbook-iinventory.inilocal_prepare.yml(2)初始化集群各节点。修改配置文件如下##Connection#sshviaroot:#ansible_user=root#ansible_become=true#ansible_become_user=tidb#sshvianormaluseransible_user=tidb执行初始化命令ansible-playbook-iinventory.inibootstrap.yml-k-K(3)安装服务ansible-playbook-iinventory.inideploy.yml-k-K6.启动和停止服务(1)启动所有服务ansible-playbook-iinventory.inistart.yml-k(2)停止所有服务ansible-playbook-iinventory.inistop.yml(3)附录ansible-playbook-iinventory.inixxx.yml-k-K-k执行后需要输入ssh连接用户的密码。如果中控机与所有节点建立互信,则不需要该参数。-K执行后,需要输入sudo要求的密码。如果使用root用户或者不带密码的sudo,那么不需要这个参数【本文为专栏作者“PingCAP”原创文章,转载请联系作者获得授权】点此查看作者的更多好文章作者
