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,节假日休息