TiDB 作为一款开源分布式 NewSQL 数据库,可以很好的部署和运行在 Intel 架构服务器环境及主流虚拟化环境,并支持绝大多数的主流硬件网络。作为一款高性能数据库系统,TiDB 支持主流的 Linux 操作系统环境
组件 | CPU | 内存 | 硬盘类型 | 实例数量 |
---|---|---|---|---|
TIDB | 16核+ | 32GB+ | SAS | 2 |
PD | 4核+ | 8 GB+ | SSD | 3 |
TIKV | 16核+ | 32GB+ | SSD | 3 |
监控 | 8核+ | 16GB+ | SSD | 1 |
中控机 | - | - | - | 1 |
上述,是我们所需要准备安装的实例分布,如果仅学习尚且没有这样实例体系的时候,TIDB、PD、监控、中控机可以部署在同一台比较高配的实例机器中。下面是我接下来的安装步骤演示实例机器分布。
组件 | 实例IP | 组件描述 |
---|---|---|
TIDB(节点1) | PD (节点1)| 中控机 | 172.26.106.34 | 中控机需要有网络用于下载软件包 |
TIDB (节点2)| PD(节点2) | 172.26.106.35 | 同TIDB|PD|中控机器配置相同,只是带宽降低 |
PD(节点2) | 172.26.106.36 | 4核+16G |
TIKV(节点1) | 172.26.106.37 | 12核心+32(官方建议16,资源有限用12代替)多增加额外50G数据云盘 |
TIKV(节点2) | 172.26.106.38 | 同TIKV(节点1) |
TIKV(节点3) | 172.26.106.39 | 同TIKV(节点1) |
监控(节点1) | 172.26.106.40 | 8核+16G |
现在通过172.26.106.34机器上(CentOS 7),root用户执行以下命令:
yum -y install epel-release git curl sshpass
yum -y install python2-pip
如果是(Ubuntu),执行以下命令:
apt-get -y install git curl sshpass python2-pip
在中控机上创建tidb用户(tidb用户用于控制tidb集群),并生成ssh key.
创建tidb用户并设置密码,root用户执行以下命令:
[root@ansiable ~]# useradd -m -d /home/tidb tidb
[root@ansiable ~]# passwd tidb
配置 tidb
用户 sudo 免密码
[root@ansiable ~]# visudo
将 tidb ALL=(ALL) NOPASSWD: ALL
添加到文件末尾即可
生成 ssh key: 执行 su
命令从 root
用户切换到 tidb
用户下。
[root@ansiable ~]# su - tidb
创建 tidb
用户 ssh key, 提示 Enter passphrase
时直接回车即可。执行成功后,ssh 私钥文件为 /home/tidb/.ssh/id_rsa
, ssh 公钥文件为 /home/tidb/.ssh/id_rsa.pub
[tidb@ansiable ~]$ 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:SMgAwGv235kzsHVOigXU7RWgsO4B1lYD+z9/JZITpp8 tidb@ansiable
The key's randomart image is:
+---[RSA 2048]----+
|=.. ooo..... |
| . o.o=.o. . |
| .o+=... . |
| +. +o.. . o |
|o . oo.S o o |
| ....o.+ + . . |
| ..B Bo. + o |
| + B .oE . |
| o .. |
+----[SHA256]-----+
以 tidb
用户登录中控机并进入 /home/tidb
目录。以下为 tidb-ansible 与 TiDB 的版本对应关系,版本选择可以咨询官方。
TiDB 版本 | tidb-ansible tag | 备注 |
---|---|---|
2.0 版本 | v2.0.10、v2.0.11 | 最新 2.0 稳定版本,可用于生产环境。 |
2.1 版本 | v2.1.1 ~ v2.1.8 等 | 最新 2.1 稳定版本,可用于生产环境(建议)。 |
3.0 版本 | v3.0.0-beta、v3.0.0-beta.1 等 | 目前是 beta 版本,不建议用于生产环境。 |
latest 版本 | None | 包含最新特性,每日更新,不建议用于生产环境。 |
下载指定 tag 的 tidb-ansible:
git clone https://github.com/pingcap/tidb-ansible.git
ps: 请务必按文档操作,将 tidb-ansible
下载到 /home/tidb
目录下,权限为 tidb
用户,不要下载到 /root
下,否则会遇到权限问题。
以 tidb
用户登录中控机,请务必按以下方式通过 pip 安装 Ansible 及其相关依赖的指定版本,否则会有兼容问题。安装完成后,可通过 ansible --version
查看 Ansible 版本。目前 release-2.0、release-2.1 及 master 版本兼容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相关依赖版本记录在 tidb-ansible/requirements.txt
文件中。
[tidb@ansiable tidb-ansible]$ cd /home/tidb/tidb-ansible
[tidb@ansiable tidb-ansible]$ sudo pip install -r ./requirements.txt
[tidb@ansiable tidb-ansible]$ ansible --version
以 tidb
用户登录中控机,将你的部署目标机器 IP 添加到 hosts.ini
文件 [servers]
区块下。
[tidb@ansiable tidb-ansible]$ cd /home/tidb/tidb-ansible
[tidb@ansiable tidb-ansible]$ vi hosts.ini
#修改vim host.ini的文件如下
[servers]
172.26.106.34
172.26.106.35
172.26.106.36
172.26.106.37
172.26.106.38
172.26.106.39
172.26.106.40
[all:vars]
username = tidb
ntp_server = pool.ntp.org
执行以下命令,按提示输入部署目标机器 root
用户密码。该步骤将在部署目标机器上创建 tidb
用户,并配置 sudo 规则,配置中控机与部署目标机器之间的 ssh 互信。
[tidb@ansiable tidb-ansible]$ ansible-playbook -i hosts.ini create_users.yml -u root -k
如果你的部署目标机器时间、时区设置一致,已开启 NTP 服务且在正常同步时间,此步骤可忽略。可参考如何检测 NTP 服务是否正常。
该步骤将在部署目标机器上使用系统自带软件源联网安装并启动 NTP 服务,服务使用安装包默认的 NTP server 列表,见配置文件
/etc/ntp.conf
中 server 参数,如果使用默认的 NTP server,你的机器需要连接外网。 为了让 NTP 尽快开始同步,启动 NTP 服务前,系统会 ntpdatehosts.ini
文件中的ntp_server
一次,默认为pool.ntp.org
,也可替换为你的 NTP server。
[tidb@ansiable tidb-ansible]$ cd /home/tidb/tidb-ansible
[tidb@ansiable tidb-ansible]$ ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
ps:tidb官方在这一步有CPUFreq调节模式,为让cpu发挥好性能,此步骤略过,因为我用的虚拟机测试(虚拟机调试会遇到很多问题,偷个懒_)。有需要的话,可以参考官网进行,没有必要的话,可以忽略
ps: 这一步所有操作,我仅演示tikv的节点一,所有tikv节点同这个步骤
如果你的数据盘已经格式化成 ext4 并挂载,可先执行
umount
命令卸载,从编辑/etc/fstab
文件步骤开始执行,添加挂载参数重新挂载即可。(此步骤为配置tikv数据存储的磁盘,分配机器的时候,我特意给tikv三个节点都增加了50个G的磁盘,用于存储数据,当然只是测试用,生产上磁盘大小看自家数据量吧)
[root@iZ8vbe0foda664humkdou3Z ~]# umount /dev/nvme0n1
下面以 /dev/nvme0n1 数据盘为例:
查看数据盘
[root@iZ8vbe0foda664humkdou3Z ~]# fdisk -l
Disk /dev/nvme0n1: 53.7 GB, 53687091200 bytes, 104857600 sectors
创建分区表
# parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
格式化文件系统
# mkfs.ext4 /dev/nvme0n1
查看数据盘分区 UUID,本例中 nvme0n1 的 UUID 为8b79a29f-2bdc-4f0c-b028-a845aaad7016
[root@iZ8vbe0foda664humkdou3Z ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
└─vda1 ext4 105fa8ff-bacd-491f-a6d0-f99865afc3d6 /
nvme0n1 ext4 8b79a29f-2bdc-4f0c-b028-a845aaad7016
编辑 /etc/fstab
文件,添加 nodelalloc
挂载参数
[root@iZ8vbe0foda664humkdou3Z ~]# vi /etc/fstab
# 修改之后的fstab文件如下
# /etc/fstab
# Created by anaconda on Wed Jun 19 06:43:05 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=105fa8ff-bacd-491f-a6d0-f99865afc3d6 / ext4 defaults 1 1
UUID=8b79a29f-2bdc-4f0c-b028-a845aaad7016 /data ext4 defaults,nodelalloc,noatime 0 2
挂载数据盘
[root@iZ8vbe0foda664humkdou3Z ~]# mkdir /data
[root@iZ8vbe0foda664humkdou3Z ~]# mount -a
执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc 表示生效:
[root@iZ8vbe0foda664humkdou3Z ~]# mount -t ext4
/dev/vda1 on / type ext4 (rw,relatime,data=ordered)
/dev/vdb on /data type ext4 (rw,noatime,nodelalloc,data=ordered)
通过 tidb
用户登录中控机,inventory.ini
文件路径为 /home/tidb/tidb-ansible/inventory.ini
请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认 22 端口,需添加
ansible_port
变量,如TiDB1 ansible_host=172.16.10.1 ansible_port=5555
tidb
用户执行以下命令:
[tidb@ansiable ~]$ cd /home/tidb/tidb-ansible/
[tidb@ansiable tidb-ansible]$ vi inventory.ini
##编辑后的inventory.ini如下
## TiDB Cluster Part
[tidb_servers]
172.26.106.34
172.26.106.35
[tikv_servers]
172.26.106.37
172.26.106.38
172.26.106.39
[pd_servers]
172.26.106.34
172.26.106.35
172.26.106.36
## Monitoring Part
## prometheus and pushgateway servers
[monitoring_servers]
172.26.106.40
[grafana_servers]
172.26.106.40
## node_exporter and blackbox_exporter servers
[monitored_servers]
172.26.106.34
172.26.106.35
172.26.106.36
172.26.106.37
172.26.106.38
172.26.106.39
172.26.106.40
[alertmanager_servers]
172.26.106.40
部署目录通过 deploy_dir
变量控制,默认全局变量已设置为 /home/tidb/deploy
,对所有服务生效。如数据盘挂载目录为 /data1
,可设置为 /data1/deploy
,样例如下:
## Global variables
[all:vars]
deploy_dir = /data/deploy
如为某一服务单独设置部署目录,可在配置服务主机列表时配置主机变量,以 TiKV 节点为例,其他服务类推,请务必添加第一列别名,以免服务混布时混淆。
TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy
ansible-playbook 执行 Playbook 时默认并发为 5,部署目标机器较多时可添加 -f 参数指定并发,如
ansible-playbook deploy.yml -f 10
确认 tidb-ansible/inventory.ini
文件中 ansible_user = tidb
,本例使用 tidb
用户作为服务运行用户,配置如下:
执行以下命令如果所有 server 返回 tidb
表示 ssh 互信配置成功。
[tidb@ansiable tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami'
[tidb@ansiable tidb-ansible]$ ansible -i inventory.ini all -m shell -a 'whoami' -b
执行 local_prepare.yml
playbook,联网下载 TiDB binary 到中控机:
[tidb@ansiable tidb-ansible]$ ansible-playbook local_prepare.yml
初始化系统环境,修改内核参数
[tidb@ansiable tidb-ansible]$ ansible-playbook bootstrap.yml
部署 TiDB 集群软件
[tidb@ansiable tidb-ansible]$ ansible-playbook deploy.yml
ps: 监控服务器上,Report用来生成监控的pdf,此功能依赖了fontconfig的字体,如果使用此功能,需要在监控机器上下载依赖包,安装命令如下:
sudo yum install fontconfig open-sans-fonts
启动 TiDB 集群
[tidb@ansiable tidb-ansible]$ ansible-playbook start.yml
测试连接 TiDB 集群,推荐在 TiDB 前配置负载均衡来对外统一提供 SQL 接口。
通过浏览器测试监控平台
访问地址:http://172.26.106.40:3000 默认帐号密码是:admin
/admin
整体搭建过程,除了对机器要求比较高,遇到的安装问题,基本都是和硬件有关或者是机器配置上的问题,其次学习难度上并没有太复杂,希望你也可以顺利搭建完成,这里还有一篇文章是关于tidb安装常见问题总结。
博主博客:https://blog.ituac.com