一、环境说明
阿里云服务器六台,三台跑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