Tidb分布式数据库安装部署实践

2023年 8月 13日 50.5k 0

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

1.概述

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

2.硬件要求

生产环境最低要求如下:

image.png

开发及测试最低要求如下:

image.png

以上是tidb数据库的常用组件,本文只安装tidb、pd、tikv和监控组件

3.安装前环境检查及系统优化

  • 3.1 磁盘挂载

生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。

使用root用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加nodelallocnoatime挂载参数。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

image.png

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

image.png

若返回报错信息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 中,建议对操作系统进行如下的配置优化:

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

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

    cat /sys/kernel/mm/transparent_hugepage/enabled
    

    Tidb--分布式数据库安装部署实践-1
    [always] madvise never表示透明大页处于启用状态,需要关闭。

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

    cat /sys/block/sda/queue/scheduler
    

    image.png
    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

    image.png

    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 >/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

    image.png

    • 4.2 声明全局环境变量

    source ${your_shell_profile}

    image.png

    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: 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 ./topo.yaml --user root -p

    • 4.7 启动集群

    tiup cluster start

    • 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 
    

    到此,集群服务搭建完成,可以正常使用。

    以下为集群操作的几个常用命令

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

    参考链接:环境与系统配置检查

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论