外观
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 | 内存 | 磁盘 | 网卡 |
|---|---|---|---|---|
| TiDB | 16-32 核 | 64-128 GB | SSD 1-2 TB | 10 GbE 或更高 |
| TiKV | 16-32 核 | 64-256 GB | NVMe SSD 2-8 TB | 25 GbE 或更高 |
| PD | 8-16 核 | 16-64 GB | SSD 500 GB-1 TB | 10 GbE 或更高 |
| TiFlash | 32-64 核 | 128-512 GB | NVMe SSD 4-16 TB | 25 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-eth02. 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.yaml3. 通用系统优化
配置内核参数
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.localTiUP 安装
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 --version2. 更新 TiUP
bash
# 更新 TiUP 自身
tiup update --self
# 更新所有组件
tiup update --all3. 安装 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-client2. 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-dev3. 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 -v3. 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 sources2. 配置用户
为了安全起见,建议使用普通用户部署和管理 TiDB 集群:
bash
# 创建 tidb 用户
sudo useradd -m -s /bin/bash tidb
# 设置密码
sudo passwd tidb
# 赋予 sudo 权限
sudo echo 'tidb ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers3. 配置 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 -h2. 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 nightlyQ3: 安装依赖时遇到网络问题怎么办?
A3: 遇到网络问题的解决方法:
- 使用国内镜像:CentOS/RHEL 可以使用阿里云、华为云等国内镜像;Ubuntu/Debian 可以使用国内源
- 手动下载:对于无法通过包管理器安装的依赖,可以手动下载安装
- 代理配置:如果网络环境需要代理,可以配置代理环境变量
Q4: 如何处理依赖版本冲突?
A4: 处理依赖版本冲突的方法:
- 使用容器:考虑使用容器化部署,避免依赖冲突
- 隔离环境:使用虚拟环境或隔离工具,如 Docker、Podman 等
- 版本固定:固定依赖版本,避免自动更新导致的冲突
- 测试验证:在测试环境中验证依赖版本,确保兼容性
Q5: 安装 TiUP 时提示权限不足怎么办?
A5: 安装 TiUP 时提示权限不足的解决方法:
- 使用 sudo:使用 sudo 权限安装 TiUP
- 修改安装目录:指定 TiUP 安装目录到有写权限的路径
- 检查磁盘空间:确保安装目录有足够的磁盘空间
Q6: 如何确保所有节点的依赖版本一致?
A6: 确保所有节点依赖版本一致的方法:
- 批量安装:使用自动化工具批量安装依赖
- 镜像同步:使用相同的软件源镜像
- 版本锁定:锁定依赖版本,避免自动更新
- 定期检查:定期检查所有节点的依赖版本,确保一致性
通过正确安装和配置依赖,可以确保 TiDB 集群的稳定运行。在部署 TiDB 集群之前,建议仔细检查所有依赖,确保满足 TiDB 的运行要求。
