文章目录
- [TiDB 集群部署与 MySQL](#TiDB 集群部署与 MySQL)
TiDB 集群部署与 MySQL
TiDB 是一款由 PingCAP 公司设计的开源分布式关系型数据库。它的定位很明确:解决传统单机数据库(如 MySQL)在海量数据和高并发场景下遇到的瓶颈。
可以把它看作一个为"大数据"时代而生的 MySQL 增强版,它不仅兼容 MySQL 的协议和生态,还具备了分布式系统的弹性伸缩和高可用能力。
它的核心特性可以总结为以下几点:
- 兼容 MySQL,迁移平滑:TiDB 完全兼容 MySQL 5.7 的协议和语法。这意味着你现有的 MySQL 应用程序基本可以无缝迁移到 TiDB,无需修改代码,原有的 MySQL 生态工具也都能继续使用。
- 水平弹性扩展,告别分库分表 :这是 TiDB 作为分布式数据库最核心的优势。传统的 MySQL 在数据量大到一定程度后,往往需要人工进行复杂的分库分表。而 TiDB 采用了存储与计算分离的架构,你可以通过简单地增加节点来实现计算能力或存储容量的在线扩容,整个过程对业务完全透明,无需停机。
- HTAP 能力,一份数据两种用途 :TiDB 是典型的HTAP(混合事务/分析处理) 数据库。它内置了两种存储引擎:面向在线交易(OLTP)的行存引擎 TiKV ,以及面向实时分析(OLAP)的列存引擎 TiFlash。这意味着你可以直接对最新的业务数据进行实时分析,无需像传统架构那样将数据通过 ETL 工具导入到另一个分析型数据库,大大降低了复杂度和延迟。
- 金融级高可用与强一致性 :数据通过 Multi-Raft 协议在多个节点间同步复制,保证了强一致性 和高可用性。当少数节点发生故障时,系统可以自动恢复,能做到 RPO = 0(数据零丢失)和 RTO ≤ 30s(恢复时间在30秒内),满足金融级场景的严苛要求。
初始化
| IP | 运行组件 |
|---|---|
| 192.168.117.163 | PD1、TiKV1、TiDB-Server1(对外访问入口 4000 端口) |
| 192.168.117.164 | PD2、TiKV2 |
| 192.168.117.165 | PD3、TiKV3 |
| 192.168.117.162 | 源 MySQL(只做数据来源,不部署 TiDB 组件) |
实验开始前所有主机需做好域名解析,关闭SELinux、防火墙、Swap分区。
内核参数优化
三台主机部署
bash
# vim /etc/sysctl.conf
fs.file-max = 1000000
vm.swappiness = 1
net.ipv4.tcp_syncookies = 0
# sysctl -p
文件句柄限制
三台主机部署
bash
#vim /etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
时间同步
三台主机部署,Rocky9系统时间同步一般会自动配置好,如果timedatectl命令发现没有就手动执行设置,注意时区选择Aisa/shanghai
bash
# dnf install -y chrony
# systemctl enable --now chronyd
# chronyc sources
# timedatectl set-timezone Asia/Shanghai
配置免密
bash
# 生成密钥,一路回车
[root@server3 ~]# ssh-keygen
# 推送公钥到所有节点(包含自己)
[root@server3 ~]# ssh-copy-id root@192.168.117.163
[root@server3 ~]# ssh-copy-id root@192.168.117.164
[root@server3 ~]# ssh-copy-id root@192.168.117.165
# 测试免密,不需要输入密码即成功
[root@server3 ~]# ssh root@192.168.117.164
中控机 163 安装 TiUP
bash
[root@server3 ~]# yum install -y tar #这个三台主机都要安装
# 在线安装TiUP
[root@server3 ~]# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# 加载环境变量
[root@server3 ~]# source ~/.bash_profile
# 验证安装
[root@server3 ~]# tiup cluster --version

这个错误 no trusted root in the local manifests 表示 TIUP 的本地元数据文件损坏或不完整,导致无法验证组件的签名。
解决方案:
bash
# 删除 TIUP 的元数据目录
[root@server3 ~]# rm -rf ~/.tiup/manifests
# 删除 TIUP 的缓存目录
[root@server3 ~]# rm -rf ~/.tiup/cache
# 更新 TIUP 本身
[root@server3 ~]# tiup update --self
# 强制重新安装 cluster 组件
[root@server3 ~]# tiup install cluster --force
#验证版本
[root@server3 ~]# tiup cluster --version
创建拓扑文件
bash
[root@server3 ~]# vim topo-mini.yaml
global:
user: tidb
group: tidb
ssh_port: 22
deploy_dir: /tidb-deploy
data_dir: /tidb-data
arch: amd64
pd_servers:
- host: 192.168.117.163
- host: 192.168.117.164
- host: 192.168.117.165
tikv_servers:
- host: 192.168.117.163
- host: 192.168.117.164
- host: 192.168.117.165
tidb_servers:
- host: 192.168.117.163
集群环境预检 + 自动修复
bash
# 环境检查,先看输出有没有ERROR,一般会有很多报错
[root@server3 ~]# tiup cluster check ./topo-mini.yaml --user root
# 执行以下命令,自动修复检测到的基础配置问题
[root@server3 ~]# tiup cluster check ./topo-mini.yaml --user root --apply
大概到这个程度

报错numactl: command not found(三台机器都缺少 numactl 工具 → Check Fail)
问题解决:
- 消除Fail错误
bash
#三台节点(163、164、165)统一安装 numactl
[root@server3 ~]# dnf install -y numactl
#有正常输出即代表修复成功
[root@server3 ~]# numactl --show
- 消除 disk 警告
bash
#修改
[root@server3 ~]# vim /etc/fstab
/dev/mapper/rl-root / xfs defaults,noatime 0 0
#生效挂载参数
[root@server3 ~]# mount -o remount /
[root@server3 ~]# systemctl daemon-reload
- cpu-governor 警告:虚拟机环境基本都会出现,云主机 / KVM 无法调节 CPU 调频,不用处理,不影响 TiDB 运行。
问题解决后重新检查环境,成功
bash
[root@server3 ~]# tiup cluster check ./topo-mini.yaml --user root

执行 TiDB 集群部署
集群名称:tidb-mini;稳定版本选择 v6.5.7(高度兼容 Zabbix)
bash
[root@server3 ~]# tiup cluster deploy tidb-mini v6.5.7 ./topo-mini.yaml --user root -y
等待下载组件、远程推送文件、创建 tidb 用户、创建目录。
关键信息: Cluster 'tidb-mini' deployed successfully 集群已经全部部署完成。

启动集群
执行初始化启动集群,--init 参数作用:初始化集群,生成 root 初始密码(控制台会打印出来,保存好)
bash
[root@server3 ~]# tiup cluster start tidb-mini --init
密码:8t7i-NG^+5s6*ac24E

查看集群状态
bash
[root@server3 ~]# tiup cluster display tidb-mini

连通性验证
bash
[root@server3 ~]# dnf install mysql -y
[root@server3 ~]# mysql -h 192.168.117.163 -P 4000 -uroot -p
mysql> SET PASSWORD = 'westos'; #修改密码
mysql> quit;
能进入 MySQL 交互界面 = TiDB 部署完成

访问:http://192.168.117.163:2379/dashboard/可以浏览器打开查看集群监控

TiDB 适配 Zabbix 参数
bash
#关闭快速在线 DDL,适配 Zabbix 导入表结构,避免创建索引时长时间后台回填、超时卡住
mysql> SET GLOBAL tidb_ddl_enable_fast_reorg = OFF;
#开启事务自动重试,缓解 Zabbix 高频短事务遇到写冲突报错
mysql> SET GLOBAL tidb_disable_txn_auto_retry = 0;
#sql_mode 对齐 MySQL5.7 标准,这条非常关键,不修改导入 zabbix.sql 大概率报语法错误
mysql> SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO';
mysql> quit;
全部执行成功后 退出 mysql 会话,重新登录 TiDB,全局参数才在新连接生效; 之后再执行:创建 zabbix 库、创建账号、导入 zabbix 初始化 SQL;
校验
bash
[root@server3 ~]# mysql -h 192.168.117.163 -P 4000 -uroot -p
mysql> SHOW VARIABLES LIKE 'tidb_ddl_enable_fast_reorg';
mysql> SHOW VARIABLES LIKE 'tidb_disable_txn_auto_retry';
mysql> SHOW VARIABLES LIKE 'sql_mode';
