1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG125-TiDB高可用与灾备最佳实践生产实战

fgedu.net.cn

目录

一、基础概念

1.1 高可用定义

高可用(High Availability,HA)是指系统在面对各种故障时,仍能保持正常运行的能力。TiDB的高可用架构设计确保了系统在节点故障时能够自动恢复,保证服务的连续性。

1.2 灾备定义

灾备(Disaster Recovery,DR)是指在发生自然灾害、人为故障等重大事件时,能够快速恢复系统运行的能力。TiDB通过跨地域复制、备份恢复等机制实现灾备。

1.3 RTO和RPO

  • 恢复时间目标(RTO):从故障发生到系统恢复正常运行的时间
  • 恢复点目标(RPO):故障发生后,系统可以恢复到的最近数据点

1.4 TiDB高可用架构

  • PD集群:至少3个节点,通过Raft协议保证高可用
  • TiKV集群:至少3个节点,通过多副本机制保证数据安全
  • TiDB集群:多个节点,无状态设计,可水平扩展
  • TiCDC:用于跨集群数据复制,支持灾备和数据同步

二、规划建议

2.1 高可用规划

  • 节点部署:避免单点故障,将不同组件部署在不同的物理机器上
  • 网络规划:确保网络带宽充足,延迟低
  • 存储规划:使用高性能、可靠的存储设备
  • 监控规划:部署完善的监控系统,及时发现和处理故障
  • 容量规划:根据业务增长预测,合理规划集群容量

2.2 灾备规划

  • 灾备级别:根据业务重要性确定灾备级别
  • 灾备架构:选择合适的灾备架构,如主备模式、多活模式等
  • 复制策略:选择合适的数据复制策略,如异步复制、半同步复制等
  • 灾备演练:定期进行灾备演练,确保灾备系统的有效性
  • 恢复流程:制定详细的灾难恢复流程

2.3 RTO和RPO规划

  • 关键业务:RTO < 5分钟,RPO < 1分钟
  • 重要业务:RTO < 30分钟,RPO < 5分钟
  • 一般业务:RTO < 2小时,RPO < 30分钟

三、实施方案

3.1 高可用部署

多节点部署

# topology.yaml配置示例
global:
  user: tidb
  ssh_port: 22
  deploy_dir: /tidb-deploy
  data_dir: /tidb-data

pd_servers:
  - host: 192.168.1.10
  - host: 192.168.1.11
  - host: 192.168.1.12

tikv_servers:
  - host: 192.168.1.13
  - host: 192.168.1.14
  - host: 192.168.1.15

tidb_servers:
  - host: 192.168.1.16
  - host: 192.168.1.17
  - host: 192.168.1.18

monitoring_servers:
  - host: 192.168.1.19

grafana_servers:风哥提示:
  - host: 192.168.1.19

alertmanager_servers:
  - host: 192.168.1.19

部署集群

tiup cluster deploy fgedudb v7.5.0 topology.yaml --user root -p
tiup cluster start fgedudb
Starting cluster...
+ [Serial] - SSHKeySet: private key file=/root/.tiup/storage/cluster/clusters/fgedudb/ssh/id_rsa, public key file=/root/.tiup/storage/cluster/clusters/fgedudb/ssh/id_rsa.pub
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.10
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.11
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.12
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.13
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.14
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.15
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.16
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.17
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.18
+ [Parallel] - UserAdd: user=tidb, host=192.168.1.19
+ [Parallel] - DirPrepare: host=192.168.1.10, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.11, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.12, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.13, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.14, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.15, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.16, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.17, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.18, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - DirPrepare: host=192.168.1.19, deploy_dir=/tidb-deploy, data_dir=/tidb-data
+ [Parallel] - PD: host=192.168.1.10, port=2379
+ [Parallel] - PD: host=192.168.1.11, port=2379
+ [Parallel] - PD: host=192.168.1.12, port=2379
+ [Parallel] - TiKV: host=192.168.1.13, port=20160
+ [Parallel] - TiKV: host=192.168.1.14, port=20160
+ [Parallel] - TiKV: host=192.168.1.15, port=20160
+ [Parallel] - TiDB: host=192.168.1.16, port=4000
+ [Parallel] - TiDB: host=192.168.1.17, port=4000
+ [Parallel] - TiDB: host=192.168.1.18, port=4000
+ [Parallel] - Prometheus: host=192.168.1.19, port=9090
+ [Parallel] - Grafana: host=192.168.1.19, port=3000
+ [Parallel] - AlertManager: host=192.168.1.19, port=9093
Started cluster `fgedudb` successfully

3.2 灾备部署

跨地域复制

# 部署主集群
tiup cluster deploy primary v7.5.0 primary-topology.yaml --user root -p
tiup cluster start primary

# 部署从集群
tiup cluster deploy secondary v7.5.0 secondary-topology.yaml --user root -p
tiup cluster start secondary

配置TiCDC同步

# 创建TiCDC同步任务
tiup ctl:v7.5.0 cdc changefeed create --pd=http://192.168.1.10:2379 --sink-uri="tidb://root:root123@192.168.2.13:4000/fgedudb" --config=cdc-task.yaml

# cdc-task.yaml配置示例
[cdc]
sink-uri = "tidb://root:root123@192.168.2.13:4000/fgedudb"

[mounter]
enable = true
worker-num = 4

[cyclic-replication]
enable = false
id = ""
filter-replica-id = []

[scheduler]
type = "table"
polling-time = "100ms"
Create changefeed successfully, changefeed ID: cdc-task-1

监控同步状态

# 查看同步任务状态
tiup ctl:v7.5.0 cdc changefeed list --pd=http://192.168.1.10:2379

# 查看同步任务详情
tiup ctl:v7.5.0 cdc changefeed query --pd=http://192.168.1.10:2379 --changefeed-id=cdc-task-1
[{
  "id": "cdc-task-1",
  "summary": {
    "state": "running",
    "tso": 436578901234567890,
    "checkpoint": "2024-04-09 10:00:00",
    "error": null
  }
}]

学习交流加群风哥QQ113257174

3.3 故障处理

节点故障处理

# 查看集群状态
tiup cluster display fgedudb

# 重启故障节点
tiup cluster restart fgedudb -R tikv:192.168.1.13

# 替换故障节点
tiup cluster scale-out fgedudb scale-out.yaml
tiup cluster scale-in fgedudb --nodes 192.168.1.13:20160

灾难恢复

# 主集群故障,切换到从集群
# 1. 停止TiCDC同步
tiup ctl:v7.5.0 cdc changefeed pause --pd=http://192.168.1.10:2379 --changefeed-id=cdc-task-1

# 2. 验证从集群数据完整性
mysql -h 192.168.2.13 -P 4000 -u root -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;"

# 3. 切换应用连接到从集群
# 修改应用配置中的数据库连接地址为从集群地址

# 4. 启动从集群的写入功能
# 从集群现在成为主集群

# 5. 待主集群恢复后,配置反向同步
tiup ctl:v7.5.0 cdc changefeed create --pd=http://192.168.2.10:2379 --sink-uri="tidb://root:root123@192.168.1.13:4000/fgedudb" --config=cdc-task-reverse.yaml

四、实战案例

4.1 跨地域灾备部署

场景:企业需要在不同地域部署灾备集群,确保在发生区域性灾难时能够快速恢复服务。

步骤1:部署主集群(北京)

# primary-topology.yaml
global:
  user: tidb
  ssh_port: 22
  deploy_dir: /tidb-deploy
  data_dir: /tidb-data

pd_servers:
  - host: 10.0.1.10
  - host: 10.0.1.11
  - host: 10.0.1.12

tikv_servers:
  - host: 10.0.1.13
  - host: 10.0.1.14
  - host: 10.0.1.15

tidb_servers:
  - host: 10.0.1.16
  - host: 10.0.1.17

# 部署主集群
tiup cluster deploy primary v7.5.0 primary-topology.yaml --user root -p
tiup cluster start primary

步骤2:部署从集群(上海)

# secondary-topology.yaml
global:
  user: tidb
  ssh_port: 22
  deploy_dir: /tidb-deploy
  data_dir: /tidb-data

pd_servers:
  - host: 10.0.2.10
  - host: 10.0.2.11
  - host: 10.0.2.12

tikv_servers:
  - host: 10.0.2.13
  - host: 10.0.2.14
  - host: 10.0.2.15

tidb_servers:
  - host: 10.0.2.16
  - host: 10.0.2.17

# 部署从集群
tiup cluster deploy secondary v7.5.0 secondary-topology.yaml --user root -p
tiup cluster start secondary

步骤3:配置TiCDC跨地域同步

# 创建TiCDC同步任务
tiup ctl:v7.5.0 cdc changefeed create --pd=http://10.0.1.10:2379 --sink-uri="tidb://root:root123@10.0.2.16:4000/fgedudb" --config=cdc-task.yaml

# 查看同步状态
tiup ctl:v7.5.0 cdc changefeed query --pd=http://10.0.1.10:2379 --changefeed-id=cdc-beijing-shanghai
{
  "id": "cdc-beijing-shanghai",
  "summary": {
    "state": "running",
    "tso": 436578901234567890,
    "checkpoint": "2024-04-09 10:00:00",
    "error": null
  }
}

步骤4:灾难恢复演练

# 模拟主集群故障
# 停止主集群所有服务
tiup cluster stop primary

# 验证从集群数据
mysql -h 10.0.2.16 -P 4000 -u root -p -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;"

# 切换应用连接到从集群
# 修改应用配置中的数据库连接地址为从集群地址

# 启动从集群的写入功能
# 从集群现在成为主集群

# 恢复主集群
# 启动主集群服务
tiup cluster start primary

# 配置反向同步
tiup ctl:v7.5.0 cdc changefeed create --pd=http://10.0.2.10:2379 --sink-uri="tidb://root:root123@10.0.1.16:4000/fgedudb" --config=cdc-task-reverse.yaml

4.2 高可用测试

场景:测试TiDB集群的高可用能力,验证在节点故障时系统的自动恢复能力。

步骤1:部署高可用集群

# 部署3节点PD、3节点TiKV、2节点TiDB的集群
tiup cluster deploy ha-cluster v7.5.0 ha-topology.yaml --user root -p
tiup cluster start ha-cluster

步骤2:模拟TiKV节点故障

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

# 停止一个TiKV节点
tiup cluster stop ha-cluster -R tikv:192.168.1.13

# 查看集群状态,确认TiKV节点状态变为Down
tiup cluster display ha-cluster

# 验证服务可用性
mysql -h 192.168.1.16 -P 4000 -u root -p -e "SELECT * FROM fgedudb.fgedu_users LIMIT 1;"

# 启动故障节点
tiup cluster start ha-cluster -R tikv:192.168.1.13

# 查看集群状态,确认TiKV节点状态恢复为Up
tiup cluster display ha-cluster
# 停止TiKV节点后
Starting component `cluster`: /root/.tiup/components/cluster/v1.16.0/tiup-cluster display ha-cluster
Cluster type: tidb
Cluster name: ha-cluster
Cluster version: v7.5.0
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.1.10:2379/dashboard
ID                   Role  Host           Ports        Status  Data Dir                      Deploy Dir
--                   ----  ----           -----        ------  --------                      ----------
192.168.1.10:2379    pd    192.168.1.10   2379/2380   Up      /tidb-data/pd-2379           /tidb-deploy/pd-2379
192.168.1.11:2379    pd    192.168.1.11   2379/2380   Up      /tidb-data/pd-2379           /tidb-deploy/pd-2379
192.168.1.12:2379    pd    192.168.1.12   2379/2380   Up      /tidb-data/pd-2379           /tidb-deploy/pd-2379
192.168.1.13:20160   tikv  192.168.1.13   20160/20180 Down    /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
192.168.1.14:20160   tikv  192.168.1.14   20160/20180 Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
192.168.1.15:20160   tikv  192.168.1.15   20160/20180 Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
192.168.1.16:4000    tidb  192.168.1.16   4000/10080  Up      -                             /tidb-deploy/tidb-4000
192.168.1.17:4000    tidb  192.168.1.17   4000/10080  Up      -                             /tidb-deploy/tidb-4000

# 验证服务可用性
+----+----------+------------------+
| id | username | email            |
+----+----------+------------------+
|  1 | admin    | admin@example.com |
+----+----------+------------------+

# 启动故障节点后
Starting component `cluster`: /root/.tiup/components/cluster/v1.16.0/tiup-cluster display ha-cluster
Cluster type: tidb
Cluster name: ha-cluster
Cluster version: v7.5.0
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.1.10:2379/dashboard
ID                   Role  Host           Ports        Status  Data Dir                      Deploy Dir
--                   ----  ----           -----        ------  --------                      ----------
192.168.1.10:2379    pd    192.168.1.10   2379/2380   Up      /tidb-data/pd-2379           /tidb-deploy/pd-2379
192.168.1.11:2379    pd    192.168.1.11   2379/2380   Up      /tidb-data/pd-2379           /tidb-deploy/pd-2379
192.168.1.12:2379    pd    192.168.1.12   2379/2380   Up      /tidb-data/pd-2379           /tidb-deploy/pd-2379
192.168.1.13:20160   tikv  192.168.1.13   20160/20180 Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
192.168.1.14:20160   tikv  192.168.1.14   20160/20180 Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
192.168.1.15:20160   tikv  192.168.1.15   20160/20180 Up      /tidb-data/tikv-20160         /tidb-deploy/tikv-20160
192.168.1.16:4000    tidb  192.168.1.16   4000/10080  Up      -                             /tidb-deploy/tidb-4000
192.168.1.17:4000    tidb  192.168.1.17   4000/10080  Up      -                             /tidb-deploy/tidb-4000

五、经验总结

5.1 高可用最佳实践

  • 多节点部署:确保每个组件都有多个节点,避免单点故障
  • 负载均衡:使用负载均衡器分发TiDB节点的请求
  • 监控告警:部署完善的监控系统,及时发现和处理故障
  • 自动故障转移:利用TiDB的自动故障转移机制,确保服务连续性
  • 定期维护:定期进行集群维护,确保系统健康

5.2 灾备最佳实践

  • 跨地域部署:将灾备集群部署在不同的地域,避免区域性灾难
  • 实时同步:使用TiCDC实现实时数据同步,减少RPO
  • 定期演练:定期进行灾备演练,确保灾备系统的有效性
  • 自动化恢复:制定自动化的灾难恢复流程,减少RTO
  • 监控同步状态:监控数据同步状态,确保数据一致性

5.3 常见问题与解决方案

问题 原因 解决方案
节点故障 硬件故障、网络故障、软件故障 自动故障转移,手动重启或替换节点
数据同步延迟 网络带宽不足、同步配置不当 优化网络环境,调整同步配置
灾备切换失败 同步数据不一致、切换流程不当 定期验证同步数据,优化切换流程
集群扩容困难 资源规划不足 提前规划资源,使用TiUP进行在线扩容
性能下降 负载过高、配置不当 优化配置,增加节点,负载均衡

5.4 高可用与灾备检查清单

检查项 配置要求 状态
节点部署 每个组件至少部署3个节点 □
网络配置 网络带宽充足,延迟低 □
监控系统 部署完善的监控系统 □
灾备部署 部署跨地域灾备集群 □
数据同步 配置TiCDC实时同步 □
灾备演练 定期进行灾备演练 □
故障处理 制定详细的故障处理流程 □
文档更新 及时更新高可用与灾备文档 □

更多视频教程www.fgedu.net.cn

© 2024 TiDB数据库培训文档

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息