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
