TiDB 集群部署
在单机上模拟部署生产环境集群
- 适用场景:希望用单台 Linux 服务器,体验 TiDB 最小的完整拓扑的集群,并模拟生产环境下的部署步骤。
1. 准备环境
准备一台部署主机,确保其软件满足需求:
-
Linux 类机器:这里采用的是华为
Kylin V10 SP1
操作系统,HUAWEI,Kunpeng 920
CPU(4Cores)
-
Linux 操作系统开放外网访问,用于下载 TiDB 及相关软件安装包
1.1 最小规模的 TiDB 集群拓扑规划
实例 | 个数 | IP | 配置 |
---|---|---|---|
PD | 1 | 192.168.0.131 | 默认端口 |
TiKV | 3 | 192.168.0.131 192.168.0.131 192.168.0.131 | 避免端口和目录冲突 |
TiDB | 1 | 192.168.0.131 | 默认端口 |
TiFlash | 1 | 192.168.0.131 | 默认端口 (这里不配置 TiFlash实例) |
Monitor | 1 | 192.168.0.131 | Grafana:3003 (默认3000)、 Prometheus:9099(默认9090),默认端口Ambari已占用 |
-
拓扑文件配置模板:(
topo.yaml
)global: user: "tidb" ssh_port: 22 ssh_type: builtin deploy_dir: "/data/tidb/tidb-deploy" data_dir: "/data/tidb/tidb-data" os: linux # # Monitored variables are applied to all the machines. monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 deploy_dir: /data/tidb/tidb-deploy/monitor-9100 data_dir: /data/tidb/tidb-data/monitor-9100 log_dir: /data/tidb/tidb-deploy/monitor-9100/log server_configs: tidb: log.slow-threshold: 3000 tikv: readpool.storage.use-unified-pool: false readpool.coprocessor.use-unified-pool: true pd: replication.enable-placement-rules: true replication.location-labels: ["host"] pd_servers: - host: 192.168.0.131 ssh_port: 22 name: pd-192.168.0.131-2379 client_port: 2379 peer_port: 2380 deploy_dir: /data/tidb/tidb-deploy/pd-2379 data_dir: /data/tidb/tidb-data/pd-2379 log_dir: /data/tidb/tidb-deploy/pd-2379/log arch: arm64 os: linux tidb_servers: - host: 192.168.0.131 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /data/tidb/tidb-deploy/tidb-4000 log_dir: /data/tidb/tidb-deploy/tidb-4000/log arch: arm64 os: linux tikv_servers: - host: 192.168.0.131 ssh_port: 22 port: 20160 status_port: 20180 deploy_dir: /data/tidb/tidb-deploy/tikv-20160 data_dir: /data/tidb/tidb-data/tikv-20160 log_dir: /data/tidb/tidb-deploy/tikv-20160/log config: server.labels: host: logic-host-1 arch: arm64 os: linux - host: 192.168.0.131 ssh_port: 22 port: 20161 status_port: 20181 deploy_dir: /data/tidb/tidb-deploy/tikv-20161 data_dir: /data/tidb/tidb-data/tikv-20161 log_dir: /data/tidb/tidb-deploy/tikv-20161/log config: server.labels: host: logic-host-2 arch: arm64 os: linux - host: 192.168.0.131 ssh_port: 22 port: 20162 status_port: 20182 deploy_dir: /data/tidb/tidb-deploy/tikv-20162 data_dir: /data/tidb/tidb-data/tikv-20162 log_dir: /data/tidb/tidb-deploy/tikv-20162/log config: server.labels: host: logic-host-3 arch: arm64 os: linux monitoring_servers: - host: 192.168.0.131 ssh_port: 22 port: 9099 deploy_dir: /data/tidb/tidb-deploy/prometheus-9099 data_dir: /data/tidb/tidb-data/prometheus-9099 log_dir: /data/tidb/tidb-deploy/prometheus-9099/log external_alertmanagers: [] arch: arm64 os: linux grafana_servers: - host: 192.168.0.131 ssh_port: 22 port: 3003 deploy_dir: /data/tidb/tidb-deploy/grafana-3003 arch: arm64 os: linux username: admin password: admin anonymous_enable: false root_url: "" domain: ""
1.2 部署主机软件和环境要求配置
根据 TiDB 软硬件环境配置建议优化系统配置,可直接执行脚本进行初始化硬件环境:
$ cat initTiDB.sh
#!/bin/bash
close_swap() {
echo "检测及关闭系统 swap"
sudo echo "vm.swappiness = 0" >> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
echo "系统 swap 已关闭"
}
close_firewall() {
echo "关闭及检测目标部署机器的防火墙"
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo systemctl status firewalld.service
echo "目标部署机器的防火墙已关闭"
}
ntp_service() {
#read -p "Please input a ntp_server_ip:" ntp_server_ip
#sudo systemctl stop ntpd.service
#sudo ntpdate ${ntp_server_ip}
sudo systemctl restart ntpd.service
sudo systemctl enable ntpd.service
echo "检查ntp服务器的连通性"
ntpq -p
}
csop() {
echo "配置系统优化参数..."
echo "查看当前操作系统的 tuned 策略"
tuned-adm list
echo "创建新的 tuned 策略"
mkdir /etc/tuned/balanced-tidb-optimal/
touch /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "[main]" > /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "include=balanced" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "[cpu]" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "governor=performance" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "[vm]" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "transparent_hugepages=never" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "[disk]" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "elevator=noop" >> /etc/tuned/balanced-tidb-optimal/tuned.conf
echo "新的 tuned 策略创建完成. 查看请执行 cat /etc/tuned/balanced-tidb-optimal/tuned.conf"
echo "应用新的 tuned 策略"
tuned-adm profile balanced-tidb-optimal
echo "验证透明大页的状态: 是否为never"
cat /sys/kernel/mm/transparent_hugepage/enabled
echo "验证数据目录所在磁盘的 I/O 调度器:是否为noop "
cat /sys/block/sd[bc]/queue/scheduler
echo "查看 cpufreq 模块选用的节能策略: performance模式"
cpupower frequency-info --policy
echo "如果是虚拟机或者云主机,则不需要调整,命令输出通常为 Unable to determine current policy"
echo "配置系统参数优化完成..."
}
modify_sysctl() {
echo "修改 sysctl 参数..."
echo "fs.file-max = 1000000">> /etc/sysctl.conf
echo "net.core.somaxconn = 32768">> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf
echo "vm.overcommit_memory = 1">> /etc/sysctl.conf
echo "执行 sysctl -p 命令在不重启的情况下使配置生效"
sysctl -p
echo "修改 sysctl 参数完成..."
}
limits_conf() {
echo "配置用户的 limits.conf 文件"
echo "tidb soft nofile 1000000" >>/etc/security/limits.conf
echo "tidb hard nofile 1000000" >>/etc/security/limits.conf
echo "tidb soft stack 32768" >>/etc/security/limits.conf
echo "tidb hard stack 32768" >>/etc/security/limits.conf
echo "limits.conf 文件配置完成"
}
useradd_tidb() {
echo "增加tidb用户"
sudo useradd tidb
sudo sh -c 'echo "tidb ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers'
echo "password"
sleep 6
sudo passwd tidb
}
echo "TiDB 环境与系统配置检查开始..."
echo "1.close_swap Start"
close_swap
echo "close_swap End"
echo " "
echo "2.close_firewall Start"
close_firewall
echo "close_firewall End"
echo " "
echo "3.ntp_service Start"
ntp_service
echo "ntp_service End"
echo " "
echo "4.csop Start"
csop
echo "csop End"
echo " "
echo "5.modify_sysctl Start"
modify_sysctl
echo "modify_sysctl End"
echo " "
echo "6.limits_conf Start"
limits_conf
echo "limits_conf End"
echo " "
echo "7.useradd_tidb Start"
useradd_tidb
echo "useradd_tidb End"
echo " "
echo "TiDB 环境与系统配置检查完成......"
2. 实施部署
2.1 部署管理工具 TiUP
-
下载并安装 (在线):
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
-
声明全局环境变量:
source /home/tidb/.bash_profile
-
安装 TiUP 的 cluster 组件:
tiup cluster tiup update --self && tiup update cluster
-
注:由于模拟多机部署,需要通过
root
用户调大 sshd 服务的连接数限制:修改
/etc/ssh/sshd_config
将MaxSessions
调至 20。cat /etc/ssh/sshd_config | grep MaxSessions sudo vim /etc/ssh/sshd_config # 查找 MaxSessions 并修改数量 ,默认是10 ,我个人修改为 30 了 :/MaxSessions # vim ESC模式下查找关键词
2.2 创建并启动集群
-
提前规划:
-
集群名称:
tidbsingle
-
TiDB 版本:
v5.0.0
,可以通过tiup list tidb
命令来查看当前支持部署的 TiDB 版本 -
TiDB 部署空间:该规模集群初始化时会占用
21.1G
左右磁盘空间,需要有基础保障。 -
按照拓扑文件配置模板创建
topo.yaml
配置文件:su tidb touch topo.yaml
-
执行部署前检查 (check)集群存在的潜在风险:
tiup cluster check ./topo.yaml --user tidb
-
执行部署前自动修复 (check --apply)集群存在的潜在风险:
tiup cluster check ./topo.yaml --apply --user tidb
-
上边两个步骤出现的一些潜在风险,在测试集群中可以不处理!
-
值得一提的是:上面的检查会出现不支持麒麟系统的提示,可以不用管,官方人员说可以支持麒麟和鲲鹏系统,实验也是支持的。
-
执行集群部署命令:
tiup cluster deploy tidbsingle v5.0.0 ./topo.yaml --user tidb -p
按照引导来完成部署。
-
这种模式的集群部署第一次需要执行以下方式进行初始化启动:
tiup cluster start tidbsingle --init # 服务启动超时情况出现的话,先按照提示查看日志文件,根据 welcome 和 error 关键词定位异常;如果是单纯的超时可以多试几次
第一次初始化启动会提示数据库
root
用户的初始密码;之后每次集群启动就不需要指定--init
。# 集群启动 tiup cluster start tidbsingle
2.3 访问集群
-
MySQL 客户端(黑屏模式)连接,因为
TiDB
兼容MySQL
,这种模式当下流行且方便:mysql -h 192.168.0.131 -P 4000 -u root -p Enter password: 这里输入第一次初始化启动生成的密码!
-
这里引入 数据库
root
用户的修改:# 使用 mysql 库 use mysql; # select User,Host,authentication_string from mysql.user; # 修改密码为xxxxxxxxxx alter user 'root'@'%' identified by 'password'; # 刷新 flush privileges; # 退出连接 exit
-
数据库连接应用连接,按照
MySQL
模式进行连接配置:
-
因为这里采用的是云服务器,所以IP不一样是正常情况!
-
访问 TiDB 的 Grafana 监控:
-
通过 http://{ip}:3003/login访问集群 Grafana 监控页面,默认用户名和密码在拓扑文件中设置均为 admin(默认)。
-
访问 TiDB 的 Dashboard:
-
通过http://{IP}:2379/dashboard/#/signin访问集群
TiDB Dashboard
监控页面,默认用户名为root
,密码为数据库密码。
2.4 管理集群
-
执行以下命令确认当前已经部署的集群列表:
tiup cluster list
-
执行以下命令查看集群的拓扑结构和状态:
tiup cluster display tidbsingle
-
执行以下命令停止集群:
tiup cluster stop tidbsingle
-
执行以下命令销毁集群(数据全丢,注意执行条件):
tiup cluster destroy tidbsingle