架构师必备--高可用高性能分布式数据库Tidb安装部署实践

本文针对分布式、高可用的tidb数据库,从搭建实际生产环境的集群服务,介绍下tidb的安装流程、安装前的环境检测和系统优化、服务访问等方面介绍下具体的流程,希望对大家熟悉和了解tidb数据库有所帮助,减少不必要的弯路。

1.概述

Tidb是PingCAP公司自主设计、研发的开源分布式关系型数据库,同时支持在线事务处理与在线分析处理(HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

2.硬件要求

生产环境最低要求如下:
架构师必备--高可用高性能分布式数据库Tidb安装部署实践_第1张图片

开发及测试最低要求如下:
架构师必备--高可用高性能分布式数据库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创建分区

parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1

注意

使用 lsblk 命令查看分区的设备号:对于 nvme 磁盘,生成的分区设备号一般为 nvme0n1p1;对于普通磁盘(例如 /dev/sdb),生成的分区设备号一般为 sdb1。

3.1.3格式化文件系统

mkfs.ext4 /dev/nvme0n1p1

3.1.4查看数据盘分区 UUID

lsblk -f

架构师必备--高可用高性能分布式数据库Tidb安装部署实践_第3张图片

3.1.5编辑 /etc/fstab 文件

添加 nodelalloc 挂载参数。 执行如下命令进入fstab文件,然后将文本添加到最后一行并保存

vi /etc/fstab

文本内容如下:

UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2

上述的uuid要换成3.1.4步骤中机器实际的uuid,/data1换成服务器上实际被挂载的目录

3.1.6挂载数据盘

mount -a

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

mount -t ext4

3.2 关闭防火墙

关闭命令

systemctl stop firewalld.service

关闭防火墙自启动服务

systemctl disable firewalld.service

检查防火墙状态

systemctl status firewalld.service

3.3 检测及关闭系统swap

TiDB 运行需要有足够的内存。如果内存不足,不建议使用 swap 作为内存不足的缓冲,因为这会降低性能。建议永久关闭系统 swap。

执行如下命令关闭:

echo "vm.swappiness = 0">> /etc/sysctl.conf

swapoff -a && swapon -a

sysctl -p

3.4 检测及安装NTP服务

TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性

3.4.1执行以下命令,如果输出running表示 NTP 服务正在运行

sudo systemctl status ntpd.service

架构师必备--高可用高性能分布式数据库Tidb安装部署实践_第4张图片

若返回报错信息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服务并设置自启动:

systemctl start chronyd   启动服务
systemctl status chronyd  查看状态
systemctl enable chronyd  设置开机自启

3.5 操作系统检查及参数优化

在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:

  1. 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。
  2. 将存储介质的 I/O 调度器设置为 noop。
  3. 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。

检查流程:

3.5.1执行以下命令查看透明大页的开启状态

cat /sys/kernel/mm/transparent_hugepage/enabled

在这里插入图片描述

[always] madvise never表示透明大页处于启用状态,需要关闭。

3.5.2 执行以下命令查看数据目录所在磁盘的 I/O 调度器。

cat /sys/block/sda/queue/scheduler

架构师必备--高可用高性能分布式数据库Tidb安装部署实践_第5张图片

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

在文件中添加如下配置

[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 参数。

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文件

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

架构师必备--高可用高性能分布式数据库Tidb安装部署实践_第6张图片

4.2 声明全局环境变量

source ${your_shell_profile}
架构师必备--高可用高性能分布式数据库Tidb安装部署实践_第7张图片
TiUP 安装完成后会提示对应 Shell profile 文件的绝对路径。在执行以下 source 命令前,需要将 ${your_shell_profile} 修改为 Shell profile 文件的实际位置

4.3 安装 TiUP 的 cluster 组件

tiup cluster

4.4 创建并启动集群

安装集群前,需要先创建集群的拓扑文件,此处可以直接先在本地创建好,比如topo.yanl,复制以下内容,然后传到服务器即可。文件中路径和ip根据实际情况声明

# # 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: 1000
  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 数据库,密码为空,也可以使用数据库客户端连接

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,密码为空。
执行以下命令查看集群的拓扑结构和状态:

tiup cluster display <cluster-name>

到此,集群服务搭建完成,可以正常使用。
以下为集群操作的几个常用命令

停止组件
例如,下列命令只停止 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

你可能感兴趣的:(高并发高可用,技术分享,分布式,数据库,tidb,后端,数据库架构,spring,boot,java)