本文详细介绍了 TiDB 集群从环境准备、参数调优、部署配置到功能验证的完整安装流程,适用TiDB高可用分布式数据库搭建。
一、安装前准备工作
1.1 关闭主机防火墙
#检查防火墙状态
sudo systemctl status firewalld.service
#关闭防火墙服务
sudo systemctl stop firewalld.service
#关闭防火墙自动启动服务
sudo systemctl disable firewalld.service
#检查防火墙状态
sudo systemctl status firewalld.service
1.2 关闭系统swap
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && sysctl -p
1.3 操作系统参数优化
#执行以下命令查看透明大页的开启状态,[always] madvise never 表示透明大页处于启用状态,需要关闭。
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
#执行以下命令查看数据目录所在磁盘的 I/O 调度器。假设在 sdb、sdc 两个磁盘上创建了数据目录。noop [deadline] cfq 表示磁盘的 I/O 调度器使用 deadline,需要进行修改。
cat /sys/block/sd[bc]/queue/scheduler
#执行以下命令查看 cpufreq 模块选用的节能策略。The governor "powersave"表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy。
cpupower frequency-info --policy
执行以下命令修改 sysctl 参数。
echo "fs.file-max = 1000000">> /etc/sysctl.conf
echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
sysctl -p
执行以下命令配置用户的 limits.conf 文件。
cat << EOF >> /etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF
1.4 创建部署用户
#创建 tidb 用户,用于集群部署和维护
useradd -m -d /home/tidb tidb
#配置 sudo
su - root
visudo
tidb ALL=(ALL) NOPASSWD: ALL
1.5 上传软件安装包
TiDB社区版安装包下载地址:https://cn.pingcap.com/product-community/
| 软件包名称 |
版本 |
用途 |
| tidb-community-server-v8.5.1-linux-amd64.tar |
v8.5.1 |
TiDB集群相关组件 |
| tidb-community-toolkit-v8.5.1-linux-amd64.tar |
v8.5.1 |
TiDB生态工具 |
1.6 安装TiUP组件
- 将离线安装包放到配置相对较低的服务器上,作为中控机使用
#执行如下命令安装 TiUP 工具:
su - tidb
tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz && \
sh tidb-community-server-${version}-linux-amd64/local_install.sh && \
source /home/tidb/.bash_profile
#确认 TiUP 工具是否安装:
which tiup
二、集群拓扑文件
2.1 制定部署架构
| 环境 |
IP |
组件 |
| 生产 |
xx.xx.xx.xx |
tidb,tikv,pd |
| 生产 |
xx.xx.xx.xx |
tidb,tikv,pd |
| 生产 |
xx.xx.xx.xx |
tidb,tikv,pd |
2.2 参数配置
global:
user: tidb
ssh_port: 22
deploy_dir: "/data/tidb/tidb-deploy"
data_dir: "/data/tidb/tidb-data"
os: linux
arch: amd64
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
deploy_dir: "/data/tidb/tidb-deploy/monitored-9100"
data_dir: "/data/tidb/tidb-data/monitored-9100"
log_dir: "/data/tidb/tidb-deploy/monitored-9100/log"
server_configs:
tidb: {}
tikv:
# block cache 越大,能够缓存的热点数据越多,读取数据越容易,
# 建议设为 block size = memory / 2 / 实例数
storage.block-cache.capacity: 128GB --按照是需求评估
pd: {}
tidb_servers:
- host: xx.xx.xx
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: "/data/tidb-deploy/tidb-4000"
log_dir: "/data/tidb-deploy/tidb-4000/log"
numa_node: "0" --根据实际numa数量进行评估绑定
- host: xx.xx.xx
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: "/data/tidb-deploy/tidb-4000"
log_dir: "/data/tidb-deploy/tidb-4000/log"
numa_node: "0" --根据实际numa数量进行评估绑定
- host: xx.xx.xx
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: "/data/tidb-deploy/tidb-4000"
log_dir: "/data/tidb-deploy/tidb-4000/log"
numa_node: "0" --根据实际numa数量进行评估绑定
tikv_servers:
- host: xx.xx.xx
ssh_port: 22
port: 20160
status_port: 20180
deploy_dir: "/data/tidb-deploy/tikv-20160"
data_dir: "/data/tidb-data/tikv-20160"
log_dir: "/data/tidb-deploy/tikv-20160/log"
numa_node: "1" --根据实际numa数量进行评估绑定
- host: xx.xx.xx
ssh_port: 22
port: 20161
status_port: 20181
deploy_dir: "/data/tidb-deploy/tikv-20160"
data_dir: "/data/tidb-data/tikv-20160"
log_dir: "/data/tidb-deploy/tikv-20160/log"
numa_node: "1" --根据实际numa数量进行评估绑定
- host: xx.xx.xx
ssh_port: 22
port: 20160
status_port: 20180
deploy_dir: "/data/tidb-deploy/tikv-20160"
data_dir: "/data/tidb-data/tikv-20160"
log_dir: "/data/tidb-deploy/tikv-20160/log"
numa_node: "1" --根据实际numa数量进行评估绑定
pd_servers:
- host: xx.xx.xx
ssh_port: 22
name: pd-xx.xx.xx
client_port: 2379
peer_port: 2380
deploy_dir: "/data/tidb-deploy/pd-2379"
data_dir: "/data/tidb-data/pd_data"
log_dir: "/data/tidb-deploy/pd-2379/log"
numa_node: "0" --根据实际numa数量进行评估绑定
- host: xx.xx.xx
ssh_port: 22
name: pd-xx.xx.xx
client_port: 2379
peer_port: 2380
deploy_dir: "/data/tidb-deploy/pd-2379"
data_dir: "/data/tidb-data/pd_data"
log_dir: "/data/tidb-deploy/pd-2379/log"
numa_node: "0" --根据实际numa数量进行评估绑定
- host: xx.xx.xx
ssh_port: 22
name: pd-xx.xx.xx
client_port: 2379
peer_port: 2380
deploy_dir: "/data/tidb-deploy/pd-2379"
data_dir: "/data/tidb-data/pd_data"
log_dir: "/data/tidb-deploy/pd-2379/log"
numa_node: "0" --根据实际numa数量进行评估绑定
monitoring_servers:
- host: xx.xx.xx
ssh_port: 22
port: 9090
deploy_dir: "/data/tidb-deploy/prometheus-9090"
data_dir: "/data/tidb-data/prometheus_data"
log_dir: "/data/tidb-deploy/prometheus-9090/log"
grafana_servers:
- host: xx.xx.xx
ssh_port: 22
port: 3000
deploy_dir: "/data/tidb-deploy/grafana-3000"
alertmanager_servers:
- host: xx.xx.xx
web_port: 9093
cluster_port: 9094
deploy_dir: "/data/tidb-deploy/alertmanager-9093"
data_dir: "/data/tidb/tidb-data/alertmanager-9093"
log_dir: "/data/tidb-deploy/alertmanager-9093/log"
三、集群部署
3.1 部署前 check & apply 集群环境
- 执行 deploy 命令前,先使用 check 及 check --apply 命令,检查和自动修复集群存在的潜在风险:
#检查主机参数是否合标准
tiup cluster check ./topology.yaml --user tidb
#对异常参数提供修复方式,权限不足的项请手动修复,确保所有项 pass
tiup cluster check ./topology.yaml --apply --user tidb
#PS:
#如果是密钥方式,可以通过 -i 或者 --identity_file 来指定密钥的路径;
#如果是密码方式,可以通过 -p 进入密码交互窗口;
3.2 部署前 check 磁盘性能
tiup cluster check ./topology.yaml --user tidb --enable-disk
3.3 执行部署命令
#部署集群
tiup cluster deploy tidb-prod v8.5.1 ./topology.yaml --user tidb
3.4 启动集群
#启动集群
tiup cluster start tidb-prod
3.5 通过 TiUP 检查集群状态
#检查集群状态
tiup cluster display tidb-prod
3.6 设置服务启自动
#配置组件服务随主机自启
tiup cluster enable tidb-prod
四、集群功能验证
4.1 验证数据库基本功能
#创建数据表
use test
create table inttable( id int, value int );
#测试插入语句
INSERT INTO inttable (id, value) VALUES ( 1, 43 );
#测试查询语句
SELECT * FROM inttable;
#测试 drop ddl
drop table inttable;
4.2 验证集群运行状态
#预期结果输出:各节点 Status 状态信息为 Up 说明集群状态正常。
tiup cluster display tidb-prod
- 通过 TiDB Dashboard 和 Grafana 检查集群状态
- 查看 Grafana 监控 Overview 页面检查 TiDB 集群状态