【TiDB原理与实战详解】2、部署与节点的扩/缩容~学不会? 不存在的!

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: TiUP 是 TiDB 4.0 引入的集群运维工具,TiUP cluster 用于部署、管理 TiDB 集群,支持 TiDB、TiFlash、TiDB Binlog 等组件。本文介绍使用 TiUP 部署生产环境的具体步骤,包括节点规划、工具安装、配置文件修改及集群部署等。同时,提供了常用命令和安全优化方法,并详细说明了如何进行集群的扩缩容操作,以及时区设置等维护工作。

三、TiUP 部署生产环境

TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP cluster 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级 TiDB 集群,以及管理 TiDB 集群参数。

目前 TiUP 可以支持部署 TiDB、TiFlash、TiDB Binlog、TiCDC,以及监控系统。本文将介绍不同集群拓扑的具体部署步骤。

1、节点规划:

2、TiUP工具下载安装

wget https://tiup-mirrors.pingcap.com/install.sh 
sh install.sh 
source .bash_profile

# 安装cluster组件
tiup cluster 
tiup update --self && tiup update cluster

3、TiUP 配置文件修改

vim  test.yaml
# # Global variables are applied to all deployments and used as the default value of 
# # the deployments if a specific deployment value is missing.
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/data/tidb-deploy"
  data_dir: "/data/tidb-data"

# # Monitored variables are applied to all the machines.
monitored:
  node_exporter_port: 9100
  blackbox_exporter_port: 9115

server_configs:
  tidb:
    log.slow-threshold: 300
    binlog.enable: true
    binlog.ignore-error: true

  tikv:
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true

  pd:
    replication.enable-placement-rules: true
    replication.location-labels: ["host"]

  tiflash:
    logger.level: "info"

pd_servers:
  - host: 10.10.8.107

tidb_servers:
  - host: 10.10.8.107

tikv_servers:
  - host: 10.10.8.107
    port: 20160
    status_port: 20180
    config:
      server.labels: {
   
    host: "logic-host-1" }

  - host: 10.10.8.107
    port: 20161 
    status_port: 20181 
    config: 
      server.labels: {
   
    host: "logic-host-2" }

  - host: 10.10.8.107
    port: 20162
    status_port: 20182
    config:
      server.labels: {
   
    host: "logic-host-3" }

tiflash_servers:
  - host: 10.10.8.107

monitoring_servers:
  - host: 10.10.8.107

grafana_servers:
  - host: 10.10.8.107

alertmanager_servers:
  - host: 10.10.8.107

注解:

user: "tidb":表示通过 tidb 系统用户(部署会自动创 建)来做集群的内部管理,默认使用 22 端口通过 ssh 登录目标机器 replication.enable-placement-rules:设置这个 PD 参数来确保 TiFlash 正常运行
host:设置为本部署主机的 IP

4、部署TiDB 集群

注:单机测试调整ssh连接数限制

vim /etc/ssh/sshd_config
MaxSessions 20
systemctl restart sshd

1、执行集群部署

# 创建数据存储目录
mkdir  /data

# 创建集群
tiup cluster deploy test-cluster v5.2.1 ./test.yaml --user root -p  # root密码

2、常用命令

# 启动集群
tiup cluster start test-cluster

# 查看集群信息
tiup cluster list

# 查看集群详细状态
tiup cluster display test-cluster

# 访问 TiDB 数据库,密码为空
mysql -h 10.10.8.107 -P 4000 -u root -p # 直接回车

# 访问 grafana
http://grafana_servers_ip/域名:3000
默认账号密码:admin/admin

# 访问 Dashboard
http://pd_servers_ip/域名:2379/dashboard

# 访问 prometheus
http://10.10.8.107:9090/graph

# 重载单节点配置并在必要时重启
tiup cluster reload test-cluster  -N 10.10.8.107:2379

# 重启10.10.8.107:2379 节点
tiup cluster restart test-cluster  -N 10.10.8.107:2379

# 编辑总配置文件
tiup cluster edit-config test-cluster

# 查看配置模版
tiup cluster template topology

# 集群重命名
tiup cluster rename test-cluster test

3、安全优化

# 修改默认用户root的作用域
update mysql.user set host='127.0.0.1' where user='root';
# 修改密码
alter user root@'127.0.0.1' identified by 'tkamc.00';
# 创建dashboard界面访问用户密码
create user root@'本机IP' identified by 'tkamc.00'; # 不要使用%和127.0.0.1
grant all on *.* to  root@'本机IP'; 

# 创建dba用户
create user dba@'10.10.8.%' identified by 'tkamc.00';
# 授权用户
grant select on *.* to dba@'10.10.8.%' ;
# 刷新授权表
flush privileges;

四、扩容缩容

image.png

  • 节点扩容应避开业务繁忙时间段,防止意外事件的发生。

  • 不会编写配置文件直接复制生产的拿过来改改端口路径就可以了

1、扩容TiKV节点

# 编写配置文件 //放哪都行
vim tikv_20163.yaml
tikv_servers:
- host: 10.10.8.107
  ssh_port: 22
  port: 20163
  status_port: 20183
  deploy_dir: /data/tidb-deploy/tikv-20163
  data_dir: /data/tidb-data/tikv-20163
  log_dir: /data/tidb-deploy/tikv-20163/log
  config:
    server.labels:
      host: logic-host-4
  arch: amd64
  os: linux

# 执行扩容命令
tiup cluster scale-out test-cluster tikv_20163.yaml -uroot -p

# 查看集群状态
tiup  cluster  display test-cluster

2、扩容pd节点

# 编写配置文件 //放哪都行
vim pd_3379.yaml
pd_servers:
- host: 10.10.8.107
  ssh_port: 22
  name: pd-10.10.8.107-3379
  client_port: 3379
  peer_port: 3380
  deploy_dir: /data/tidb-deploy/pd-3379
  data_dir: /data/tidb-data/pd-3379
  log_dir: /data/tidb-deploy/pd-3379/log
  arch: amd64
  os: linux

# 执行扩容
tiup cluster scale-out test-cluster pd_2380.yaml -uroot -p

# 查看集群状态
tiup  cluster  display test-cluster

3、扩容tidb节点

# 编写配置文件 //放哪都行
vim tidb_4001.yaml
tidb_servers:
- host: 10.10.8.107
  ssh_port: 22
  port: 4001
  status_port: 10081
  deploy_dir: /data/tidb-deploy/tidb-4001
  log_dir: /data/tidb-deploy/tidb-4001/log
  arch: amd64
  os: linux

# 执行扩容
tiup cluster scale-out test-cluster tidb_4001.yaml -uroot -p

# 查看集群状态
tiup  cluster  display test-cluster

4、扩容tiflash节点

# 检查版本是否支持tiflash //V5.0以上版本支持 tiflash
# 老版本需要先开启 PD 的支持功能详解见官网 enable-placement-rules true 
tiup ctl:v5.2.1  pd -u http://10.10.8.107:2379  config set enable-placement-rules true  # 修改为自己的版本和pd节点信息,任意节点长执行即可

# 编写配置文件 //放哪都行
vim tiflash_9001.yaml
tiflash_servers:
- host: 10.10.8.107
  ssh_port: 22
  tcp_port: 9001
  http_port: 8124
  flash_service_port: 3931
  flash_proxy_port: 20171
  flash_proxy_status_port: 20293
  metrics_port: 8235
  deploy_dir: /data/tidb-deploy/tiflash-9001
  data_dir: /data/tidb-data/tiflash-9001
  log_dir: /data/tidb-deploy/tiflash-9001/log
  arch: amd64
  os: linux

# 执行扩容
tiup cluster scale-out test-cluster tiflash_9001.yaml -uroot -p

# 查看集群状态
tiup  cluster  display test-cluster

5、缩容tiflash节点

# tiflash注意!!!不同

# 在缩容tiflash节点前,必须保证使用tiflash的表的副本数不能大于删除N个节点后的副本数,否则需要修改表的副本数。 //例如有3个tiflash节点,要缩容两个节点,就需要将表的副本集修改为0。 //如果要缩容1个节点,就需要将表的副本集修改为1;因为副本集默认从 0 开始计数 0 1 2 3 表示四个副本数

# 查看使用tiflush的表的信息
MySQL [test]> select * from INFORMATION_SCHEMA.tiflash_replica; // 这里1表示有两个节点 0 1 
+--------------+------------+----------+---------------+-----------------+-----------+----------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
+--------------+------------+----------+---------------+-----------------+-----------+----------+
| test         | t1         |       53 |             1 |                 |         1 |        1 |
+--------------+------------+----------+---------------+-----------------+-----------+----------+
1 row in set (0.00 sec)
# 根据tiflash缩容数,调整使用tiflash的表的副本数 //这里演示为有两个tiflash节点,缩容为一个节点
alter table test.t1 set tiflash replica 0;  //如果有多个表需要全部修改为可用的副本数

# 修改完成后查询确认是否修改成功
MySQL [test]>  select * from INFORMATION_SCHEMA.tiflash_replica;
Empty set (0.01 sec)

# 查看要缩容节点的IP端口
tiup  cluster  display test-cluster 

# 执行缩容命令 //谨慎操作
tiup cluster scale-in test-cluster -N 10.10.8.107:9000

# 缩容后整理集群 //谨慎操作
tiup cluster prune test-cluster

# 查看集群状态信息
tiup  cluster  display test-cluster

6、缩容其他节点(通用操作)

# 查看要缩容节点的IP端口
tiup  cluster  display test-cluster 

# 执行缩容命令 //谨慎操作
tiup cluster scale-in test-cluster -N 10.10.8.107:20160

# 缩容后整理集群 //谨慎操作
tiup cluster prune test-cluster

# 查看集群状态信息
tiup  cluster  display test-cluster

7、数据清理

# 删除日志 //谨慎执行
tiup cluster clean test  --ignore-node 10.10.8.107:4001  --ignore-node 10.10.8.107:9001  --log   // --ignore-node 表示需要保留的节点信息,不加默认删除所有

# 删除数据 //禁止执行
tiup cluster clean test  --ignore-node 10.10.8.107:4001  --ignore-node 10.10.8.107:9001  --data   // --ignore-node 表示需要保留的节点信息,不加默认删除所有

# 删除日志和数据 //禁止执行
tiup cluster clean test  --ignore-node 10.10.8.107:4001  --ignore-node 10.10.8.107:9001  --all   // --ignore-node 表示需要保留的节点信息,不加默认删除所有

# 删除整个集群 //集群全部消失,机票已订好!
tiup cluster destroy test

五、时区设置

# 时区设置为 UTC 或者 +08:00' 为国内标准时间
 system_time_zone  Asia/Shanghai  # 时区
 time_zone         +08:00         # 时间

# 以下两种任选
set global time_zone='UTC'
set global time_zone='+08:00'
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
TiDB安装简介
TiDB安装简介
2794 0
|
固态存储 关系型数据库 MySQL
TiDB亿级数据亚秒响应查询集群部署
TiDB亿级数据亚秒响应查询集群部署
561 0
|
存储 SQL Java
数据库TiDB-01.数据库架构概述
TiDB兼容MySQL 5.7协议,支持水平扩容或者缩容的金融级高可用的云原生分布式数据库。
777 2
数据库TiDB-01.数据库架构概述
|
SQL Prometheus 监控
TiDB集群监控与性能分析
【2月更文挑战第28天】本章将深入探讨TiDB集群的监控与性能分析技术。我们将介绍TiDB集群监控的关键指标、监控工具的使用,以及如何进行性能分析和调优。通过本章节的学习,读者将能够掌握TiDB集群的监控与性能分析方法,提高数据库的运行效率和稳定性。
|
存储 SQL 数据库
在TiDB中创建表
【2月更文挑战第29天】在TiDB中创建表涉及定义字段名、数据类型和约束 。注意规划表结构、选择合适的数据类型和约束,以及谨慎使用索引,以平衡查询速度和写入性能。在实际操作前确保备份数据。
|
监控 Ubuntu 测试技术
Ubuntu 20.04 安装部署 TiDB DM v7.3.0 集群【全网独家】
在Ubuntu上搭建TiDB DM集群的详细步骤分享,作者因工作需求克服了部署难题。测试环境包括3台Ubuntu 20.04主机:1台master和2台worker。首先,确保所有主机安装TiDB单机环境,使用TiUP工具下载并部署。接着,设置主机间免密登录,安装必要组件如sudo、systemd、iproute2和DM组件。配置文件可通过在线或离线方式获取。部署时,根据需求编辑`topology.yaml`,然后使用`tiup dm deploy`命令安装。最后,启动集群并检查节点状态,确认DM集群正常运行。注意,解决内存不足和端口连通性问题以避免错误。
764 3
|
存储 SQL Prometheus
【TiDB原理与实战详解】1、原理与基础优化~学不会? 不存在的!
TiDB 是一款开源的分布式关系型数据库,具备水平扩展、高可用性和强一致性等特点,适用于高并发、低延迟的大规模数据处理场景。其架构设计灵感源自 Google 的 Spanner 和 F1,并兼容 MySQL。TiDB 集群由 TiDB Server(无状态 SQL 层)、PD(元数据管理模块)和 TiKV Server(分布式存储层)组成,还包含 TiFlash(列存储引擎)以加速分析型查询。TiDB 支持分布式事务和多种事务模式,适用于 OLTP 和 HTAP 场景,如电商平台和金融系统。此外,TiDB 的部署要求包括高性能硬件配置和特定网络设置,以确保系统的稳定性和高效运行。
|
存储 SQL 关系型数据库
技术好文:TiDB架构及设计实现
技术好文:TiDB架构及设计实现
1039 0
|
7月前
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
589 1
|
SQL 监控 关系型数据库
TiDB 分布式数据库快速入门详解
这些示例展示了TiDB的一些基本操作。实际使用时,你可能需要根据具体的业务需求和环境进行调整和优化。
1287 4