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

问题解决:

  1. 消除Fail错误
bash 复制代码
#三台节点(163、164、165)统一安装 numactl
[root@server3 ~]# dnf install -y numactl

#有正常输出即代表修复成功
[root@server3 ~]# numactl --show
  1. 消除 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
  1. 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';
相关推荐
2401_868534781 小时前
UNIX常用命令英文全称与中文解释整理
linux·运维
喜欢打篮球的普通人2 小时前
LLVM Backend Lowering 从入门到实战:把 IR 变成机器码的完整链路
android·java·数据库
阿祖zu2 小时前
开源项目-让本地 Codex 临时接管远程 Linux 服务,实现快速运维
linux·gpt·agent
SomeOtherTime4 小时前
Postgresql触发器实现对表的日志审计
数据库·postgresql
这个DBA有点耶4 小时前
Oracle 迁移金仓兼容性评估指南:5 大维度深度拆解
数据库·oracle·架构
wear工程师4 小时前
Redis 和 MySQL 缓存一致性,延迟双删为什么不是强一致
redis·mysql
Android系统攻城狮5 小时前
Linux PipeWire深度解析之pw_factory_create_object调用流程与实战(七十二)
linux·音频进阶·pipewire音频进阶
lsh曙光5 小时前
playbook剧本(2)--Ansible变量
linux·运维·网络
lengjingzju5 小时前
编译与调试完全指南—第14章 系统配置与调优
linux