TiDB 单机部署

TiDB 是 PingCAP(平凯星辰)公司设计的开源分布式数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB高度兼容MySQL协议,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP 和 OLAP 场景提供一站式的解决方案。TiDB 适合大数据量接近单机处理的极限、不希望做Sharding、访问模式上没有明显的热点等场景。

准备工作

  • [必做] 系统优化
#.创建专用用户
cat /etc/group | grep tidb || groupadd tidb
cat /etc/passwd | grep tidb || useradd -g tidb -s /bin/bash -m -d /home/tidb tidb
cat /etc/sudoers | grep "^tidb" || echo "tidb ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
echo "Admin_147" | passwd tidb --stdin > /dev/null

#.创建数据目录
global_tidb_port=4000
mkdir -p /data/tidb_${global_tidb_port}/{deploy,data}
chown -R tidb:tidb /data/tidb_${global_tidb_port}

#.配置时区
timedatectl set-timezone Asia/Shanghai

#.配置时间同步
# yum install -y -q ntp ntpdate && /usr/sbin/ntpdate -u ntp.aliyun.com
timedatectl set-ntp true

#.安装基础依赖,其中执行 tiup cluster check 会检查 numactl 是否安装
yum install -y wget net-tools numactl

#.临时关闭iptables
iptables -F

#.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#.优化ulimit
ulimit -n 1000000
sed -i '/^tidb/d' /etc/security/limits.conf
echo "tidb soft nofile 1000000" >> /etc/security/limits.conf
echo "tidb hard nofile 1000000" >> /etc/security/limits.conf
echo "tidb soft stack 655350" >> /etc/security/limits.conf
echo "tidb hard stack 655350" >> /etc/security/limits.conf
echo "tidb soft core unlimited" >> /etc/security/limits.conf
echo "tidb hard core unlimited" >> /etc/security/limits.conf
cat /etc/security/limits.conf | grep "^tidb"

#.关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0

#.临时关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
sed -i '/transparent_hugepage/d' /etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local

#.永久关闭透明大页
cp /etc/default/grub /etc/default/grub.$(date +%Y%m%d%H%M%S)
cat /etc/default/grub | grep transparent_hugepage || sed -i 's/rhgb quiet/rhgb quiet transparent_hugepage=never/g' /etc/default/grub 
grub2-mkconfig -o /etc/grub2.cfg 

#.关闭系统swap
sed -i '/^vm.swappiness/d' /etc/sysctl.conf
echo "vm.swappiness = 0" >> /etc/sysctl.conf
/sbin/sysctl -p /etc/sysctl.conf > /dev/null 2>&1
swapoff -a

#.优化内核参数
sed -i '/^fs.file-max/d' /etc/sysctl.conf
sed -i '/^net.core.somaxconn/d' /etc/sysctl.conf
sed -i '/^net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
sed -i '/^vm.overcommit_memory/d' /etc/sysctl.conf
sed -i '/^vm.min_free_kbytes/d' /etc/sysctl.conf
echo "fs.file-max = 6815744" >> /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
echo "vm.min_free_kbytes = 1048576" >> /etc/sysctl.conf
/sbin/sysctl -p /etc/sysctl.conf > /dev/null 2>&1

安装社区版 5.0.1

  • 利用安装包离线安装 TiDB 社区版 5.0.1
#.下载文件
cd /opt/
wget -c http://download.pingcap.org/tidb-v5.0.1-linux-amd64.tar.gz
tar zxf tidb-v5.0.1-linux-amd64.tar.gz --directory=/opt/
mv /opt/tidb-v5.0.1-linux-amd64 /opt/tidb
chmod -R 755 /opt/tidb

#.依次启动 pd tikv tidb-server
mkdir -p /data/tidb_4000/{pd,tikv}
/opt/tidb/bin/pd-server --data-dir=/data/tidb_4000/pd --log-file=/data/tidb_4000/pd.log &
/opt/tidb/bin/tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tidb_4000/tikv --log-file=/data/tidb_4000/tikv.log &
/opt/tidb/bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=/data/tidb_4000/tidb.log &

#.安装mysql客户端
sudo yum install -y -q mysql

#.登录测试,默认root密码为空
mysql -h 127.0.0.1 -P 4000 -u root -p

mysql> show databases;
mysql> select tidb_version();
mysql> select user,host from mysql.user;
mysql> alter user 'root'@'%' identified by 'Admin_147';
mysql> flush privileges;
mysql> exit;

#.使用root密码登录
mysql -h 127.0.0.1 -P 4000 -u root -pAdmin_147 -e "select version();"
  • tidb 的停止与启动
#.停止服务
ps -ef | grep -v grep | grep tidb | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1

#.启动服务
/opt/tidb/bin/pd-server --data-dir=/data/tidb_4000/pd --log-file=/data/tidb_4000/pd.log &
/opt/tidb/bin/tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tidb_4000/tikv --log-file=/data/tidb_4000/tikv.log &
/opt/tidb/bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=/data/tidb_4000/tidb.log &

利用 tiup cluster 部署单机集群 8.5.2

  • 利用 TiUP 工具快速部署 TiDB 单机集群 8.5.2
#.切换到tidb用户
su - tidb

#.在线安装TiUP工具
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
echo 'export PATH=$HOME/.tiup/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
tiup list

#.创建配置文件, 示例本机ip为 192.168.31.101
curl http://iso.sqlfans.cn/tidb/config/topology_single.yaml > /home/tidb/topology.yaml
sed -i "s/node_ip_1/192.168.31.101/" /home/tidb/topology.yaml
sed -i "s/global_tidb_port/4000/" /home/tidb/topology.yaml
sed -i "s/my_ssh_port/22/" /home/tidb/topology.yaml
cat /home/tidb/topology.yaml | grep "host"

#.检查主机参数是否合标准, 密码输入 Admin_147
tiup cluster check /home/tidb/topology.yaml --user tidb -p

#.对异常参数提供修复方式, 权限不足的项请手动修复, 确保所有项 pass
tiup cluster check /home/tidb/topology.yaml --apply --user tidb -p

#.部署集群, 是否继续输入 y
tiup cluster deploy tidb_test v8.5.2 /home/tidb/topology.yaml --user tidb -p

#.启动集群, 保存一下 tidb 服务 root 初始密码
tiup cluster start tidb_test --init

#.检查集群状态
tiup cluster list
tiup cluster display tidb_test

#.设置组件服务随主机自启动
tiup cluster enable tidb_test

#.安装mysql客户端
sudo yum install -y -q mysql

#.登录测试,密码请参考初始化过程的输出内容
mysql -h 127.0.0.1 -P 4000 -u root -p

mysql> select tidb_version();
mysql> select user,host from mysql.user;
mysql> alter user 'root'@'%' identified by 'Admin_147';
mysql> flush privileges;
mysql> exit;

#.使用root密码登录
mysql -h 127.0.0.1 -P 4000 -u root -pAdmin_147 -e "select version();"

利用 tiup playground 部署社区版 8.5.2

  • 利用 TiUP 工具快速部署 TiDB 社区版 8.5.2
#.切换到tidb用户
su - tidb

#.在线安装TiUP工具
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
echo 'export PATH=$HOME/.tiup/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
tiup list

#.升级tiup版本,可能需要升级glibc版本
# tiup update --all
tiup update playground

#.启动tidb集群(若不添加 tag 则命令行退出后会清空所有的集群数据)
#.TiDB集群是由多个组件构成的分布式系统,通常至少3个PD节点、3个TiKV节点、2个TiDB节点
#.TiFlash是PingCAP开发的一种分布式列存储引擎,它对聚合计算(带group by的语句)的加速特别明显,能轻松比TiKV+索引的方式快2-10倍
tiup playground v8.5.2 --db 1 --pd 1 --kv 1 --tiflash 1 --host 0.0.0.0 --db.port 4000 --pd.port 2379 --kv.port 20160 --tag mytidb &

#.自动寻找并连接playground在本地启动的TiDB集群
tiup client

#.安装mysql客户端
sudo yum install -y -q mysql

#.登录测试,默认root密码为空
mysql -h 127.0.0.1 -P 4000 -u root -p

mysql> show databases;
mysql> select tidb_version();
mysql> select user,host from mysql.user;
mysql> alter user 'root'@'%' identified by 'Admin_147';
mysql> flush privileges;
mysql> exit;

#.使用root密码登录
mysql -h 127.0.0.1 -P 4000 -u root -pAdmin_147 -e "select version();"
  • 集群的停止与启动
#.杀掉tiup进程
ps -ef | grep -v grep | grep tiup | grep tag | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1

#.启动集群
tiup playground v8.5.2 --db 1 --pd 1 --kv 1 --tiflash 1 --host 0.0.0.0 --db.port 4000 --pd.port 2379 --kv.port 20160 --tag mytidb &
  • 集群的扩容与缩容
#.扩容集群,示例新增2个TiDB节点(扩容2个到n+2个TiDB节点)
tiup playground scale-out --db 2

#.查看集群状态,获取所有节点的进程ID
tiup playground display

#.缩容节点,删除 display 返回中特定 PID 的节点
tiup playground scale-in --pid <PID>

提升安全配置

修改控制台默认密码

  • 登录如下控制台,修改初始密码, 示例本机ip为 192.168.31.101
web控制台 url地址 初始账密 建议账密
Grafana http://192.168.31.101:3000 admin/admin admin/Admin_147
Prometheus http://192.168.31.101:9090 -/- -/-
TiDB 控制台 http://192.168.31.101:2379/dashboard root/空 root/Admin_147

保护内部端口

  • TiDB 的默认安装中存在许多用于组件间通信的特权接口,建议只公开数据库的 4000 和 Grafana 的 9000 端口。
组件 默认监听端口 协议 组件 默认监听端口 协议
TiDB 4000 MySQL TiDB Binlog 8249 HTTP
TiDB 10080 HTTP TMS 8082 HTTP
TiKV 20160 Protocol TEM 8080 HTTP
TiKV 20180 HTTP TEM 8000 HTTP
PD 2379 HTTP/Protocol TEM 4110 HTTP
PD 2380 Protocol TEM 4111 HTTP
TiFlash 3930 Protocol TEM 4112 HTTP
TiFlash 20170 Protocol TEM 4113 HTTP
TiFlash 20292 HTTP TEM 4124 HTTP
TiFlash 8234 HTTP Prometheus 9090 HTTP
TiFlow 8261/8291 HTTP Grafana 3000 HTTP
TiFlow 8262 HTTP AlertManager 9093 HTTP
TiFlow 8300 HTTP AlertManager 9094 Protocol
TiDB Lightning 8289 HTTP Node Exporter 9100 HTTP
TiDB Operator 6060 HTTP Blackbox Exporter 9115 HTTP
TiDB Dashboard 2379 HTTP NG Monitoring 12020 HTTP
TiDB Binlog 8250 HTTP - - -

附录

Copyright © www.sqlfans.cn 2021 - 2026 All Right Reserved更新时间: 2026-07-27 12:22:16

results matching ""

    No results matching ""