Skip to content

TiDB 依赖安装

TiDB 集群的部署和运行需要依赖一些系统库和工具。本文将详细介绍 TiDB 集群的依赖安装方法,包括系统依赖、组件依赖和环境配置,帮助用户准备 TiDB 集群的运行环境。

系统环境要求

1. 操作系统

TiDB 支持以下操作系统:

  • CentOS:7.6 及以上版本
  • Red Hat Enterprise Linux (RHEL):7.6 及以上版本
  • Ubuntu:18.04 及以上版本
  • Debian:9.0 及以上版本
  • SUSE Linux Enterprise Server (SLES):12 SP2 及以上版本

2. 硬件要求

组件CPU内存磁盘网卡
TiDB16-32 核64-128 GBSSD 1-2 TB10 GbE 或更高
TiKV16-32 核64-256 GBNVMe SSD 2-8 TB25 GbE 或更高
PD8-16 核16-64 GBSSD 500 GB-1 TB10 GbE 或更高
TiFlash32-64 核128-512 GBNVMe SSD 4-16 TB25 GbE 或更高

系统依赖安装

1. CentOS/RHEL 系统

基本依赖

bash
# 更新系统
sudo yum update -y

# 安装基本依赖
sudo yum install -y epel-release

sudo yum install -y curl wget tar zip unzip rsync openssh-server openssh-clients sudo
sudo yum install -y git make gcc gcc-c++ libstdc++-devel
sudo yum install -y fuse fuse-devel libcurl-devel

# 安装 Python 相关依赖
sudo yum install -y python3 python3-pip python3-devel

# 安装其他依赖
sudo yum install -y numactl sysstat dstat iotop htop
sudo yum install -y nc nmap telnet
sudo yum install -y logrotate crontabs

关闭防火墙和 SELinux

bash
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 关闭 SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo setenforce 0

配置网络

bash
# 确保网卡配置正确
# 查看网卡信息
ipp addr

# 配置静态 IP(根据实际情况修改)
# sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

2. Ubuntu/Debian 系统

基本依赖

bash
# 更新系统
sudo apt-get update -y
sudo apt-get upgrade -y

# 安装基本依赖
sudo apt-get install -y curl wget tar zip unzip rsync openssh-server openssh-client sudo
sudo apt-get install -y git make gcc g++ libstdc++6
sudo apt-get install -y fuse libfuse-dev libcurl4-openssl-dev

# 安装 Python 相关依赖
sudo apt-get install -y python3 python3-pip python3-dev

# 安装其他依赖
sudo apt-get install -y numactl sysstat dstat iotop htop
sudo apt-get install -y netcat nmap telnet
sudo apt-get install -y logrotate cron

关闭防火墙

bash
# 关闭防火墙
sudo ufw disable

# 验证防火墙状态
sudo ufw status

配置网络

bash
# 确保网卡配置正确
# 查看网卡信息
ipp addr

# 配置静态 IP(根据实际情况修改)
# sudo vi /etc/netplan/00-installer-config.yaml

3. 通用系统优化

配置内核参数

bash
# 创建或修改 sysctl 配置文件
sudo vi /etc/sysctl.d/99-tidb.conf

添加以下内容:

# 网络优化
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_max_tw_buckets = 1048576
net.ipv4.tcp_max_orphans = 1048576

# 文件系统优化
fs.file-max = 1000000
fs.inotify.max_user_watches = 1048576

# 内存管理
vm.swappiness = 0
vm.overcommit_memory = 1
vm.max_map_count = 10485760

使配置生效:

bash
sudo sysctl -p /etc/sysctl.d/99-tidb.conf

配置资源限制

bash
# 创建或修改 limits 配置文件
sudo vi /etc/security/limits.d/99-tidb.conf

添加以下内容:

* soft nofile 1000000
* hard nofile 1000000
* soft stack 8192
* hard stack 8192
* soft nproc 1000000
* hard nproc 1000000

配置 SSH 服务

bash
# 确保 SSH 服务运行
sudo systemctl start sshd
sudo systemctl enable sshd

# 允许 root 登录(可选,根据安全策略调整)
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config

sudo systemctl restart sshd

关闭透明大页

bash
# 临时关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 永久关闭透明大页
sudo vi /etc/rc.d/rc.local

添加以下内容:

bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

赋予执行权限:

bash
sudo chmod +x /etc/rc.d/rc.local

TiUP 安装

TiUP 是 TiDB 官方提供的集群部署和管理工具,用于简化 TiDB 集群的部署、管理和维护。

1. 安装 TiUP

bash
# 安装 TiUP
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

# 设置环境变量
source ~/.bash_profile

# 验证 TiUP 安装
tiup --version

2. 更新 TiUP

bash
# 更新 TiUP 自身
tiup update --self

# 更新所有组件
tiup update --all

3. 安装 TiUP 扩展组件

bash
# 安装集群管理组件
tiup install cluster

# 安装备份恢复组件
tiup install br

# 安装数据迁移组件
tiup install dm dumpling lightning

# 安装 PD 控制组件
tiup install ctl:pd

# 安装 TiKV 控制组件
tiup install ctl:tikv

# 安装 TiDB 控制组件
tiup install ctl:tidb

# 安装 playground 组件(用于测试)
tiup install playground

组件依赖安装

1. TiDB 组件依赖

TiDB 是无状态组件,依赖较少,主要依赖:

  • Go 运行时:TiDB 是用 Go 语言开发的,运行时包含在二进制文件中
  • MySQL 客户端:用于连接和管理 TiDB 实例
bash
# 安装 MySQL 客户端(CentOS/RHEL)
sudo yum install -y mysql

# 安装 MySQL 客户端(Ubuntu/Debian)
sudo apt-get install -y mysql-client

2. TiKV 组件依赖

TiKV 是分布式存储组件,依赖以下系统库:

  • libfuse:用于挂载 TiKV 存储
  • libcurl:用于 HTTP 通信
  • libssl:用于加密通信
bash
# CentOS/RHEL 系统
sudo yum install -y fuse libcurl-devel openssl-devel

# Ubuntu/Debian 系统
sudo apt-get install -y libfuse-dev libcurl4-openssl-dev libssl-dev

3. PD 组件依赖

PD 是集群管理组件,依赖较少,主要依赖:

  • Go 运行时:PD 是用 Go 语言开发的,运行时包含在二进制文件中

4. TiFlash 组件依赖

TiFlash 是列式存储组件,依赖以下系统库:

  • libfuse:用于挂载 TiFlash 存储
  • libcurl:用于 HTTP 通信
  • libssl:用于加密通信
  • libzstd:用于数据压缩
  • liblz4:用于数据压缩
bash
# CentOS/RHEL 系统
sudo yum install -y fuse libcurl-devel openssl-devel zstd-devel lz4-devel

# Ubuntu/Debian 系统
sudo apt-get install -y libfuse-dev libcurl4-openssl-dev libssl-dev libzstd-dev liblz4-dev

监控组件依赖

1. Prometheus 依赖

Prometheus 是用于监控和告警的开源系统,依赖:

  • Go 运行时:Prometheus 是用 Go 语言开发的

2. Grafana 依赖

Grafana 是用于数据可视化的开源系统,依赖:

  • Node.js:用于前端开发和构建
  • npm:Node.js 包管理器
bash
# 安装 Node.js 和 npm(CentOS/RHEL)
sudo curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -
sudo yum install -y nodejs

# 安装 Node.js 和 npm(Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

# 验证安装
node -v
npm -v

3. Alertmanager 依赖

Alertmanager 是用于处理告警通知的开源系统,依赖:

  • Go 运行时:Alertmanager 是用 Go 语言开发的

环境配置

1. 配置时间同步

时间同步对于分布式系统非常重要,需要确保所有节点的时间一致:

bash
# 安装 NTP 服务(CentOS/RHEL)
sudo yum install -y chrony

# 安装 NTP 服务(Ubuntu/Debian)
sudo apt-get install -y chrony

# 启动并启用 NTP 服务
sudo systemctl start chronyd
sudo systemctl enable chronyd

# 验证时间同步状态
sudo chronyc sources

2. 配置用户

为了安全起见,建议使用普通用户部署和管理 TiDB 集群:

bash
# 创建 tidb 用户
sudo useradd -m -s /bin/bash tidb

# 设置密码
sudo passwd tidb

# 赋予 sudo 权限
sudo echo 'tidb ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

3. 配置 SSH 免密登录

TiUP 需要通过 SSH 免密登录到所有节点,进行部署和管理:

bash
# 切换到 tidb 用户
su - tidb

# 生成 SSH 密钥对
ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa

# 配置 SSH 免密登录到其他节点
# 替换 <node-ip> 为实际节点 IP
ssh-copy-id -i ~/.ssh/id_rsa.pub tidb@<node-ip>

# 测试 SSH 免密登录
ssh tidb@<node-ip> echo 'SSH connection successful!'

4. 配置存储

对于 TiKV 和 TiFlash 节点,需要准备足够的存储空间:

bash
# 查看磁盘信息
sudo fdisk -l

# 格式化磁盘(以 /dev/sdb 为例)
sudo mkfs.xfs /dev/sdb

# 创建挂载点
sudo mkdir -p /tidb-data

# 挂载磁盘
sudo mount /dev/sdb /tidb-data

# 配置开机自动挂载
sudo echo '/dev/sdb /tidb-data xfs defaults 0 0' >> /etc/fstab

# 验证挂载
df -h | grep /tidb-data

依赖检查

1. 系统依赖检查

bash
# 检查基本依赖
which curl wget tar ssh git python3 pip3

# 检查内核版本
uname -r

# 检查操作系统版本
cat /etc/os-release

# 检查内存大小
free -h

# 检查磁盘空间
df -h

2. TiUP 依赖检查

bash
# 检查 TiUP 版本
tiup --version

# 检查 TiUP 组件
tiup list

# 检查 SSH 免密登录
# 替换 <node-ip> 为实际节点 IP
ssh tidb@<node-ip> echo 'SSH check passed!'

3. 网络依赖检查

bash
# 检查端口可用性
nc -zv <node-ip> 22  # SSH 端口
nc -zv <node-ip> 4000  # TiDB 端口
nc -zv <node-ip> 2379  # PD 端口
nc -zv <node-ip> 20160  # TiKV 端口

# 检查网络延迟
ping -c 10 <node-ip>

# 检查网络带宽
iperf3 -s  # 在一个节点上启动服务
iperf3 -c <server-ip>  # 在另一个节点上测试

依赖安装最佳实践

1. 批量安装

对于大规模集群,可以使用批量安装工具,如 Ansible,自动化安装依赖:

yaml
# ansible-playbook.yml
- hosts: all
  become: yes
  tasks:
    - name: Update system packages
      yum:
        name: '*'
        state: latest
      when: ansible_os_family == "RedHat"

    - name: Install basic dependencies
      yum:
        name:
          - curl
          - wget
          - tar
          - zip
          - unzip
          - rsync
          - openssh-server
          - openssh-clients
          - sudo
        state: present
      when: ansible_os_family == "RedHat"

    # 更多任务...

2. 版本控制

  • 固定依赖版本:生产环境中,建议固定依赖版本,避免版本更新导致的兼容性问题
  • 测试环境验证:在测试环境中验证依赖版本,确保与 TiDB 版本兼容
  • 文档化:记录所有依赖的版本和安装方法,便于后续维护

3. 安全加固

  • 最小权限原则:只安装必要的依赖,避免安装不必要的软件
  • 定期更新:定期更新系统和依赖,修复安全漏洞
  • 安全配置:按照安全最佳实践配置系统和依赖
  • 监控依赖:监控依赖的运行状态,及时发现问题

常见问题(FAQ)

Q1: TiDB 支持哪些操作系统?

A1: TiDB 支持 CentOS 7.6+、RHEL 7.6+、Ubuntu 18.04+、Debian 9.0+ 和 SLES 12 SP2+ 等主流 Linux 发行版。

Q2: 如何验证 TiUP 安装成功?

A2: 可以通过以下命令验证 TiUP 安装成功:

bash
# 查看 TiUP 版本
tiup --version

# 查看已安装的组件
tiup list

# 测试 TiUP 功能
tiup playground --mode tikv-slim --version nightly

Q3: 安装依赖时遇到网络问题怎么办?

A3: 遇到网络问题的解决方法:

  • 使用国内镜像:CentOS/RHEL 可以使用阿里云、华为云等国内镜像;Ubuntu/Debian 可以使用国内源
  • 手动下载:对于无法通过包管理器安装的依赖,可以手动下载安装
  • 代理配置:如果网络环境需要代理,可以配置代理环境变量

Q4: 如何处理依赖版本冲突?

A4: 处理依赖版本冲突的方法:

  • 使用容器:考虑使用容器化部署,避免依赖冲突
  • 隔离环境:使用虚拟环境或隔离工具,如 Docker、Podman 等
  • 版本固定:固定依赖版本,避免自动更新导致的冲突
  • 测试验证:在测试环境中验证依赖版本,确保兼容性

Q5: 安装 TiUP 时提示权限不足怎么办?

A5: 安装 TiUP 时提示权限不足的解决方法:

  • 使用 sudo:使用 sudo 权限安装 TiUP
  • 修改安装目录:指定 TiUP 安装目录到有写权限的路径
  • 检查磁盘空间:确保安装目录有足够的磁盘空间

Q6: 如何确保所有节点的依赖版本一致?

A6: 确保所有节点依赖版本一致的方法:

  • 批量安装:使用自动化工具批量安装依赖
  • 镜像同步:使用相同的软件源镜像
  • 版本锁定:锁定依赖版本,避免自动更新
  • 定期检查:定期检查所有节点的依赖版本,确保一致性

通过正确安装和配置依赖,可以确保 TiDB 集群的稳定运行。在部署 TiDB 集群之前,建议仔细检查所有依赖,确保满足 TiDB 的运行要求。