一、环境说明

阿里云服务器六台,三台跑TiKV server,三台跑PD server, 两台跑TiDB server

注: 这六台服务器需在同一区域(如:华东 1 可用区 E)机器之间内网互通

这边是使用 Ansible 方式部署,TiKV 及 PD 节点数据目录所在磁盘请使用 SSD 磁盘,否则无法通过检测

注:建议SSD云盘硬盘大一点后期需要进行IOps检测 要求比较高,开始预算较小后期更改尝试还是稍微有点麻烦的 
Host Ip 软硬件环境 Services
172.16.246.100 CentOS 7.4 ---------------------- 8核32+ 40GSSD系统盘+数据盘256GSSD Tikv_1
172.16.246.101 CentOS 7.4 ---------------------- 8核32+ 40GSSD系统盘+数据盘256GSSD Tikv_2
172.16.246.102 CentOS 7.4 ---------------------- 8核32+ 40GSSD系统盘+数据盘256GSSD Tikv_3
172.16.246.103 CentOS 7.4 8核32+ 40GSSD系统盘 Pd_1-tidb_1 中控机
172.16.246.104 CentOS 7.4 8核32+ 40GSSD系统盘 Pd_2-tidb_2
172.16.246.105 CentOS 7.4 8核16+ 40GSSD系统盘 Pd_3

在中控机上安装系统依赖包

[root@pd_1-tidb_1 ~]# yum -y install epel-release git curl sshpass
[root@pd_1-tidb_1 ~]# yum -y install python-pip

在中控机上创建tidb用户,并生成ssh key

root用户登录中控机,执行以下命令
创建 tidb 用户

[root@pd_1-tidb_1 ~]#  useradd -m -d /home/tidb tidb

设置 tidb 用户密码

[root@pd_1-tidb_1 ~]# passwd tidb

配置 tidb 用户 sudo 免密码,将 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾即可。

[root@pd_1-tidb_1 ~]# visudo
tidb ALL=(ALL) NOPASSWD: ALL

生成 ssh key: 执行 su 命令从 root 用户切换到 tidb 用户下,创建 tidb 用户 ssh key
ssh 私钥文件为/home/tidb/.ssh/id_rsa, ssh 公钥文件为/home/tidb/.ssh/id_rsa.pub

[root@pd_1-tidb_1 ~]# su - tidb
[tidb@pd_1-tidb_1 ~]$ 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-Ansible

以 tidb 用户登录中控机并进入 /home/tidb 目录

[tidb@pd_1-tidb_1 ~]$ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git

在中控机器上安装 Ansible 及其依赖

以 tidb 用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。安装完成后,可通过 ansible --version 查看 Ansible 版本。

[tidb@pd_1-tidb_1 ~] $ cd /home/tidb/tidb-ansible
[tidb@pd_1-tidb_1 ~] $ sudo pip install -r ./requirements.txt
[tidb@pd_1-tidb_1 ~] $ ansible --version
                                    ansible 2.5.0

在中控机上配置部署机器 ssh 互信及 sudo 规则

以 tidb 用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini 文件 [servers] 区块下

[tidb@pd_1-tidb_1 ~]$ cd /home/tidb/tidb-ansible
[tidb@pd_1-tidb_1 ~]$ vi hosts.ini
[servers]
172.16.246.100
172.16.246.101
172.16.246.102
172.16.246.103
172.16.246.104
172.16.246.105

[all:vars]
username = tidb
ntp_server = pool.ntp.org

执行以下命令,按提示输入部署目标机器 root 用户密码。该步骤将在部署目标机器上创建 tidb 用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信

[tidb@pd_1-tidb_1 ~]$ cd /home/tidb/tidb-ansible
[tidb@pd_1-tidb_1 ~]$ ansible-playbook -i hosts.ini create_users.yml -u root -k

在部署目标机器上安装 NTP 服务

注:部署目标机器时间、时区设置一致,已开启 NTP 服务且在正常同步时间,此步骤可忽略(我这边是阿里云服务器时间是同步的,就直接忽略了)
[tidb@pd_1-tidb_1 ~]$ cd /home/tidb/tidb-ansible
[tidb@pd_1-tidb_1 ~]$ ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b

在部署目标机器上配置 CPUfreq 调节器模式

注:我这边阿里云测试是不支持的 所以是直接略过
[root@pd_1-tidb_1 ~]# cpupower frequency-info --governors

在部署目标机器上添加数据盘 ext4 文件系统挂载参数

注:部署目标机器数据盘请格式化成 ext4 文件系统,我这边是三台TiKV server都要做

查看数据盘

[root@tikv_1 ~]# fdisk -l
Disk /dev/vdb: 256 GB

创建分区表

[root@tikv_1 ~]# parted -s -a optimal /dev/vdb mklabel gpt -- mkpart primary ext4 1 -1

格式化文件系统

[root@tikv_1 ~]# mkfs.ext4 /dev/vdb

查看数据盘分区 UUID,本例中 vdb 的 UUID 为 c51eb23b-195c-4061-92a9-3fad812cc12f

# lsblk -f
NAME    FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1  ext4         237b634b-a565-477b-8371-6dff0c41f5ab /boot
├─sda2  swap         f414c5c0-f823-4bb1-8fdf-e531173a72ed
└─sda3  ext4         547909c1-398d-4696-94c6-03e43e317b60 /
sr0
vdb  ext4         c51eb23b-195c-4061-92a9-3fad812cc12f

编辑/etc/fstab 文件,添加 nodelalloc 挂载参数

[root@tikv_1 ~]# vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data ext4 defaults,nodelalloc,noatime 0 2

挂载数据盘

[root@tikv_1 ~]# mkdir /data
[root@tikv_1 ~]# mount -a

执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc 表示生效:

[root@tikv_1 ~]# mount -t ext4
/dev/nvme0n1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)

分配机器资源,编辑 inventory.ini 文件

以 tidb 用户登录中控机,inventory.ini 文件路径为 /home/tidb/tidb-ansible/inventory.ini (还有其他设置默认就可以)

[tidb_servers]
172.16.246.103
172.16.246.104 

[pd_servers]
172.16.246.103
172.16.246.104
172.16.246.105

[tikv_servers]
172.16.246.100
172.16.246.101
172.16.246.102

[monitoring_servers]
172.16.246.103

[grafana_servers]
172.16.246.103

[monitored_servers]
172.16.246.100
172.16.246.101
172.16.246.102
172.16.246.103
172.16.246.104
172.16.246.105

inventory.ini 变量调整

部署目录通过deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效(我这边是挂载到/data1,所以需要以下设置)

## Global variables
[all:vars]
deploy_dir = /data1/deploy

部署任务

确认 tidb-ansible/inventory.ini文件中ansible_user = tidb,本例使用 tidb 用户作为服务运行用户,配置如下:

[tidb@pd_1-tidb_1 ~]$ vi /home/tidb/tidb-ansible/inventory.ini 
## Connection
# ssh via normal user
ansible_user = tidb

执行以下命令如果所有 server 返回 tidb 表示 ssh 互信配置成功。

[tidb@pd_1-tidb_1 tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami'

执行以下命令如果所有 server 返回 root 表示 tidb 用户 sudo 免密码配置成功。

[tidb@pd_1-tidb_1 tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami' -b

执行 local_prepare.yml playbook,帮部署机器下载环境

[tidb@pd_1-tidb_1 tidb-ansible]$ ansible-playbook local_prepare.yml

初始化系统环境,修改内核参数(时间稍微有点长需要检测机器性能,以及磁盘IOPs)

[tidb@pd_1-tidb_1 tidb-ansible]$ ansible-playbook bootstrap.yml

部署 TiDB 集群软件

[tidb@pd_1-tidb_1 tidb-ansible]$ ansible-playbook deploy.yml

启动 TiDB 集群

[tidb@pd_1-tidb_1 tidb-ansible]$ ansible-playbook start.yml

测试集群

注:测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口(我这边是购买阿里云的负载内网,因为有两台TiDB server)。

使用 MySQL 客户端连接测试,TCP 4000 端口是 TiDB 服务默认端口。

    [root@mysql ~]# mysql -u root -h 172.16.100.129 -P 4000

通过浏览器访问监控平台(购买阿里云负载公网对外开放)

地址:http://公网IP:3000 默认帐号密码是:admin/admin