本文针对分布式、高可用的tidb数据库,从搭建实际生产环境的集群服务,介绍下tidb的安装流程、安装前的环境检测和系统优化、服务访问等方面介绍下具体的流程,希望对大家熟悉和了解tidb数据库有所帮助,减少不必要的弯路。
1.概述
Tidb是PingCAP公司自主设计、研发的开源分布式关系型数据库,同时支持在线事务处理与在线分析处理(HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
2.硬件要求
生产环境最低要求如下:
开发及测试最低要求如下:
以上是tidb数据库的常用组件,本文只安装tidb、pd、tikv和监控组件
3.安装前环境检查及系统优化
- 3.1 磁盘挂载
生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。
使用root
用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加nodelalloc
和noatime
挂载参数。nodelalloc
是必选参数,否则 TiUP 安装时检测无法通过;noatime
是可选建议参数。
注意
如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。
3.1.1查看数据盘。
fdisk -l
3.1.2 创建分区
bash
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
注意
使用 lsblk 命令查看分区的设备号:对于 nvme 磁盘,生成的分区设备号一般为 nvme0n1p1;对于普通磁盘(例如 /dev/sdb),生成的分区设备号一般为 sdb1。
3.1.3 格式化文件系统
bash
mkfs.ext4 /dev/nvme0n1p1
3.1.4查看数据盘分区 UUID。
lsblk -f
3.1.5 编辑 /etc/fstab
文件,添加 nodelalloc
挂载参数。 执行如下命令进入fstab文件,然后将文本添加到最后一行并保存
bash
vi /etc/fstab
文本:
ini
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
上述的uuid要换成3.1.4步骤中机器实际的uuid,/data1换成服务器上实际被挂载的目录
3.1.6 挂载数据盘
css
mount -a
3.1.7 执行以下命令
,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc
,则表示已生效。
mount -t ext4
- 3.2 关闭防火墙
关闭命令
arduino
systemctl stop firewalld.service
关闭防火墙自启动服务
bash
systemctl disable firewalld.service
检查防火墙状态
lua
systemctl status firewalld.service
- 3.3 检测及关闭系统swap
TiDB 运行需要有足够的内存。如果内存不足,不建议使用 swap 作为内存不足的缓冲,因为这会降低性能。建议永久关闭系统 swap。
执行如下命令关闭:
bash
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
- 3.4 检测及安装NTP服务
TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性
3.4.1执行以下命令,如果输出running表示 NTP 服务正在运行
lua
sudo systemctl status ntpd.service
若返回报错信息Unit ntpd.service could not be found.,请尝试执行以下命令,以查看与NTP进行时钟同步所使用的系统配置是chronyd还是ntpd:
sudo systemctl status chronyd.service
3.4.2 执行 ntpstat 命令检测是否与 NTP 服务器同步
ntpstat
如果输出synchronised to NTP server,表示正在与 NTP 服务器正常同步 如果系统使用的是ntpd时间同步服务,可忽略3.4.3步骤
3.4.3执行chronyc tracking命令查看 Chrony 服务是否与 NTP 服务器同步。
chronyc tracking
注意
:该操作仅适用于使用 Chrony 的系统,不适用于使用 NTPd 的系统。 如果该命令返回结果如下,则表示 Chrony 服务未正常运行:需要手动启动该服务 启动chronyd服务并设置自启动:
bash
systemctl start chronyd 启动服务
systemctl status chronyd 查看状态
systemctl enable chronyd 设置开机自启
- 3.5 操作系统检查及参数优化
在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
- 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。
- 将存储介质的 I/O 调度器设置为 noop。
- 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。
检查流程:
3.5.1执行以下命令查看透明大页的开启状态
bash
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never表示透明大页处于启用状态,需要关闭。
3.5.2 执行以下命令查看数据目录所在磁盘的 I/O 调度器。
bash
cat /sys/block/sda/queue/scheduler
noop [deadline] cfq 表示磁盘的I/O 调度器使用deadline,需要进行修改。
3.5.3 执行以下命令查看磁盘的唯一标识 ID_SERIAL。
udevadm info --name=/dev/sda | grep ID_SERIAL
如果多个磁盘都分配了数据目录,需要多次执行以上命令,记录所有磁盘各自的唯一标识。
3.5.4 执行以下命令查看 cpufreq 模块选用的节能策略。
cpupower frequency-info --policy
The governor "powersave" 表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。
优化流程:
a、执行 tuned-adm list 命令查看当前操作系统的 tuned 策略。
tuned-adm list
Current active profile: balanced 表示当前操作系统的 tuned 策略使用 balanced,建议在当前策略的基础上添加操作系统优化配置。
b、创建新的 tuned 策略。(ID_SERIAL要换成检查流程第3步中实际的磁盘唯一标识符)
mkdir /etc/tuned/balanced-tidb-optimal/
vi /etc/tuned/balanced-tidb-optimal/tuned.conf
在文件中添加如下配置
ini
[main]
include=balanced
[cpu]
governor=performance
[vm]
transparent_hugepages=never
[disk]
devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)
elevator=noop
c、应用新的 tuned 策略。
tuned-adm profile balanced-tidb-optimal
d、执行以下命令验证透明大页的状态
cat /sys/kernel/mm/transparent_hugepage/enabled
e、执行以下命令命令验证数据目录所在磁盘的 I/O 调度器。
cat /sys/block/sda/queue/scheduler
f、执行以下命令查看查看 cpufreq 模块选用的节能策略。
cpupower frequency-info --policy
g、执行以下命令修改 sysctl 参数。
bash
echo "fs.file-max = 1000000">> /etc/sysctl.conf
echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
sysctl -p
h、执行以下命令查配置用户的limits.conf文件
bash
cat << EOF >>/etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF
此外,由于集群服务是安装在多台服务器上,所以需要设置机器之间ssh互信和sudo免密访问,但是如果使用tiup组件管理器,可以不用进行此操作,因为tiup可以自动设置互信和免密。至此,安装前的准备工作已完成,接下来就行实际安装流程。
4.搭建集群服务
- 4.1 下载并安装TiUP
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
- 4.2 声明全局环境变量
source ${your_shell_profile}
TiUP 安装完成后会提示对应 Shell profile 文件的绝对路径。在执行以下 source 命令前,需要将 ${your_shell_profile} 修改为 Shell profile 文件的实际位置
- 4.3 安装 TiUP 的 cluster 组件
tiup cluster
- 4.4 创建并启动集群
安装集群前,需要先创建集群的拓扑文件,此处可以直接先在本地创建好,比如topo.yanl,复制以下内容,然后传到服务器即可。文件中路径和ip根据实际情况声明
yaml
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy" #该路径最好换成磁盘上实际挂载的目录下,比如/xxx/tidb-deploy
data_dir: "/tidb-data" #该路径最好换成磁盘上实际挂载的目录下,比如/xxx/tidb-data
# # Monitored variables are applied to all the machines.
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
server_configs:
tidb:
log.slow-threshold: 3000
tikv:
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
pd:
schedule.leader-schedule-limit: 4
schedule.region-schedule-limit: 2048
schedule.replica-schedule-limit: 64
pd_servers:
- host: 10.0.0.1
- host: 10.0.0.1
- host: 10.0.0.1
tidb_servers:
- host: 10.0.0.1
- host: 10.0.0.1
tikv_servers:
- host: 10.0.0.1
- host: 10.0.0.1
- host: 10.0.0.1
monitoring_servers:
- host: 10.0.0.1
grafana_servers:
- host: 10.0.0.1
alertmanager_servers:
- host: 10.0.0.1
- 4.5执行部署命令前,先检查环境是否满足要求
tiup cluster check ./topo.yaml
如果报错:Error:none of ssh password,identity file ,SSH_AUTH_SOCK specified,改成如下命令,
tiup cluster check ./topo.yaml --user root -p
然后输入密码即可检查环境。如果环境检查不通过,使用如下命令自行修复
tiup cluster check ./topo.yaml --apply --user root -p
尽量保证检查的结果result栏为pass状态,如果没有绑核,numa绑核对应的那栏失败可以不用太关心,但是其他栏尽量都通过,最不济是warning状态
- 4.6 部署
命令如下:
tiup cluster deploy <cluster-name> <version> ./topo.yaml --user root -p
- 4.7 启动集群
tiup cluster start <cluster-name>
- 4.8 访问集群
安装 MySQL 客户端。如果已安装 MySQL 客户端则可跳过这一步骤。
yum -y install mysql
访问 TiDB 数据库,密码为空,也可以使用数据库客户端连接
css
mysql -h 10.0.1.1 -P 4000 -u root
访问 TiDB 的 Grafana 监控:
通过 http://{grafana-ip}:3000 访问集群 Grafana 监控页面,默认用户名和密码均为 admin。
访问 TiDB 的 Dashboard:
通过 http://{pd-ip}:2379/dashboard 访问集群 TiDB Dashboard 监控页面,默认用户名为 root,密码为空。
执行以下命令查看集群的拓扑结构和状态:
arduino
tiup cluster display <cluster-name>
到此,集群服务搭建完成,可以正常使用。
以下为集群操作的几个常用命令
bash
停止组件
例如,下列命令只停止 TiDB 组件:
tiup cluster stop ${cluster-name} -R tidb
停止组件中的某一个节点
tiup cluster stop ${cluster-name} -N 10.0.6.194:9090
启动组件中的某一个节点
tiup cluster start ${cluster-name} -N 10.0.6.194:9090
更改组件的配置后,重启组件
tiup cluster reload ${cluster-name} -R 组件名,比如tiup cluster reload tidb-pro -R tidb
参考链接:环境与系统配置检查