Ansible 是一款自动化运维工具,TiDB-Ansible 是 PingCAP 基于 Ansible playbook 功能编写的集群部署工具。本文档介绍如何使用 TiDB-Ansible 部署一个完整的 TiDB 集群。
TiDB官方文档
注: 对于生产环境,须使用 TiDB-Ansible 部署 TiDB 集群。如果只是用于测试 TiDB 或体验 TiDB 的特性,建议使用 Docker Compose 在单机上快速部署 TiDB 集群
一共七台服务器,三台跑TiKV server,三台跑PD server, 两台跑TiDB server
内网ip | 外网ip | 角色 |
---|---|---|
192.168.56.156 | 192.168.43.191 | 下载机 |
192.168.56.155 | 无 | PD、Prometheus、Grafana、Pushgateway、Node_exporter |
192.168.56.154 | 无 | PD、TiDB、Node_exporter |
192.168.56.153 | 无 | PD、TiDB、Node_exporter |
192.168.56.152 | 无 | TiKV、Node_exporter |
192.168.56.151 | 无 | TiKV、Node_exporter |
192.168.56.150 | 无 | TiKV、Node_exporter |
标准 TiDB 集群需要 6 台机器:
用root用户分别登录到192.168.56.150-155
机器创建tidb用户并设置免密
# 创建tidb用户
$ useradd tidb
$ passwd tidb # 密码也设置为tidb
# 设置免密
$ visudo # 或者 vim /etc/sudoers
# 跳到最后新增一行
tidb ALL=(ALL) NOPASSWD: ALL
生成 ssh key: 执行 su 命令从 root 用户切换到 tidb 用户下。
#su tidb
创建 tidb 用户的 ssh key, 提示 Enter passphrase 时直接回车即可。执行成功后,ssh 私钥文件为 /home/tidb/.ssh/id_rsa, ssh 公钥文件为 /home/tidb/.ssh/id_rsa.pub。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tidb/.ssh/id_rsa):
Created directory '/home/tidb/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tidb/.ssh/id_rsa.
Your public key has been saved in /home/tidb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eIBykszR1KyECA/h0d7PRKz4fhAeli7IrVphhte7/So [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|=+o+.o. |
|o=o+o.oo |
| .O.=.= |
| . B.B + |
|o B * B S |
| * + * + |
| o + . |
| o E+ . |
|o ..+o. |
+----[SHA256]-----+
以tidb用户登录到下载机[192.168.56.156],执行以下命令,将中控机的pub key发送到其他需要互信的机器上
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.150
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.151
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.152
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.153
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.154
$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.155
验证ssh免密登录(互相通信)
$ ssh 192.168.56.154
在中控机上ssh到互信的机器,是不需要输入密码的
需把TiKV server三台机器的外挂SSD磁盘格式化为ext4格式
# 查看磁盘,找到需要格式化的磁盘号(假设磁盘号为/dev/vdb)
$ fdisk -l
# 对磁盘进行分区,此处我们只分一个区,按提示一步一步操作即可
# 可以参考:https://blog.csdn.net/panfelix/article/details/39701011
$ fdisk /dev/vdb
# 创建一个文件夹,用于刚格式化的分区mount到该文件夹
$ mkdir /u01
# 设置开机自动mount,编辑/etc/fstab文件,加入一行
$ vim /etc/fstab
/dev/vdb /u01 ext4 defaults,nodelalloc,noatime 0 2
# 确认是否生效
$ mount -a
$ mount -t ext4
/dev/vdb on /u01 type ext4 (rw,noatime,nodelalloc,data=ordered)
参考官方文档:https://pingcap.com/docs-cn/op-guide/offline-ansible-deployment/
由于中控机没有公网ip,不能连接外网,所以需要借助下载机(192.168.56.156)下载pip安装包,然后scp到中控机(192.168.56.155)
# 在下载机中下载pip安装包
$ wget https://download.pingcap.org/pip-rpms.el7.tar.gz
# scp 到中控机
$ scp pip-rpms.el7.tar.gz [email protected]:/home/tidb
# 中控机中安装pip
$ tar -zxvf pip-rpms.el7.tar.gz
$ cd pip-rpms.el7.tar.gz
$ sh install_pip.sh
# 验证pip是否安装成功
$ pip -V
下载机也需要安装pip,安装方式跟中控机一样,解压再执行shell安装脚本
# 下载机中下载Ansible2.5安装包
$ wget https://download.pingcap.org/ansible-2.5.0-pip.tar.gz
# scp 到中控机
scp ansible-2.5.0-pip.tar.gz [email protected]:/home/tidb
# 在中控机中安装Ansible2.5
$ tar -xzvf ansible-2.5.0-pip.tar.gz
$ cd ansible-2.5.0-pip/
$ sh install_ansible.sh
# 查看ansible版本
$ ansible --version
下载机中也需要安装ansible,安装方式跟中控机一样,解压再执行shell安装脚本
注: 如果中控机安装ansible过程中提示依赖没有安装,可以到下载机中下载相关依赖的rpm包,scp到中控机安装yum -y install xxx.rmp
,centos rmp包查找
以 tidb 用户登录中控机并进入 /home/tidb 目录。以下为 tidb-ansible 分支与 TiDB 版本对应关系,版本选择可以咨询官方。
tidb-ansible 分支 | TiDB版本 | 备注 |
---|---|---|
release-2.0 | 2.0版本 | 最新稳定版本,可用于生产环境。 |
master | master版本 | 包含最新特性,每日更新。 |
使用git命令从 Github TiDB-Ansible 项目上下载 TiDB-Ansible 相应分支,默认的文件夹名称为 tidb-ansible。
下载 2.0 版本:
$ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git
或下载 master 版本:
$ git clone https://github.com/pingcap/tidb-ansible.git
**注:**请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。
执行chown -R tidb:tidb /home/tidb/
给tidb-ansible授权
在下载机中执行 local_prepare.yml playbook,联网下载 TiDB binary 到下载机
$ cd tidb-ansible
$ ansible-playbook local_prepare.yml
将下载机中的tidb-ansible文件夹scp到中控机,接下来的操作就跟下载机无关了。
$ scp -r tidb-ansible [email protected]:/home/tidb
以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下。
$ cd /home/tidb/tidb-ansible
$ vim hosts.ini
[servers]
192.168.56.150
192.168.56.151
192.168.56.152
192.168.56.153
192.168.56.154
192.168.56.155
[all:vars]
username = tidb
ntp_server = pool.ntp.org
在中控机中配置集群节点的分布情况,以及安装路径
$ /home/tidb/tidb-ansible
$ vim inventory.ini
## TiDB Cluster Part
[tidb_servers]
192.168.56.153
192.168.56.154
[tikv_servers]
192.168.56.150
192.168.56.151
192.168.56.152
[pd_servers]
192.168.56.153
192.168.56.154
192.168.56.155
[spark_master]
[spark_slaves]
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
192.168.56.155
[grafana_servers]
192.168.56.155
# node_exporter and blackbox_exporter servers
[monitored_servers]
192.168.56.150
192.168.56.151
192.168.56.152
192.168.56.153
192.168.56.154
192.168.56.155
[alertmanager_servers]
## Binlog Part
[pump_servers:children]
tidb_servers
## Group variables
[pd_servers:vars]
# location_labels = ["zone","rack","host"]
## Global variables
[all:vars]
deploy_dir = /home/tidb/deploy
## Connection
# ssh via normal user
ansible_user = tidb
cluster_name = test-cluster
tidb_version = latest
# process supervision, [systemd, supervise]
process_supervision = systemd
# timezone of deployment region
timezone = Asia/Shanghai
set_timezone = True
enable_firewalld = False
# check NTP service
enable_ntpd = True
set_hostname = False
......
修改完配置文件后,在中控机中执行初始化
在 /home/tidb/tidb-ansible/下执行以下命令
$ 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
通过浏览器访问监控平台。
http://192.168.56.155:3000
默认帐号密码是:admin/admin
注: 中控机没有公网ip,我们可以通过下载机来访问
我们的TiDBs server运行在192.168.56.153和192.168.56.154,所以我们可以通过这两个ip进行访问
使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口
mysql -u root -h 192.168.56.153 -P 4000
详见博客
多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中的 block-cache-size 参数:
多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数:
readpool:
coprocessor:
# Notice: if CPU_NUM > 8, default thread pool size for coprocessors
# will be set to CPU_NUM * 0.8.
# high-concurrency: 8
# normal-concurrency: 8
# low-concurrency: 8
如果多个 TiKV 实例部署在同一块物理磁盘上,需要修改 conf/tikv.yml 中的 capacity 参数:
注: Grafana Dashboard 上的 Report 按钮可用来生成 PDF 文件,此功能依赖 fontconfig 包和英文字体。如需使用该功能,登录 grafana_servers 机器,用以下命令安装:
yum install -y fontconfig open-sans-fonts