fgedu.net.cn
目录
一、基础概念
1.1 高可用定义
高可用(High Availability,HA)是指系统在面对各种故障时能够保持正常运行的能力。TiDB通过多副本存储、自动故障转移等机制实现高可用。
1.2 灾备定义
灾备(Disaster Recovery,DR)是指在发生自然灾害、人为失误等灾难时,能够快速恢复系统运行的能力。TiDB通过跨区域复制、定期备份等机制实现灾备。
1.3 关键指标
- 可用性:系统正常运行的时间比例,通常用几个9表示(如99.99%)
- RTO(恢复时间目标):从故障发生到系统恢复正常运行的时间
- RPO(恢复点目标):故障发生后,系统能够恢复到的最近数据点
- 数据一致性:主备系统之间的数据一致性程度
二、规划建议
2.1 高可用架构规划
- 多副本部署:TiKV默认3副本,确保数据安全
- 跨可用区部署:将节点分布在不同的可用区,提高容灾能力
- 负载均衡:使用负载均衡器分发请求
- 自动故障转移:当节点故障时,自动切换到健康节点
2.2 灾备架构规划
- 跨区域复制:使用TiCDC实现跨区域数据同步
- 定期备份:使用BR工具定期备份数据
- 灾备演练:定期进行灾备演练,确保灾备系统可用
- RTO和RPO规划:根据业务需求设定合理的RTO和RPO目标
2.3 网络规划
- 内部网络:集群内部使用高速网络
- 跨区域网络:确保跨区域网络带宽和延迟满足需求
- 网络安全:配置防火墙,确保网络安全
三、实施方案
3.1 高可用部署
多副本部署
# 部署TiDB集群
# 编辑拓扑文件
tiup cluster template > topology.yaml
# 配置多副本
# 在拓扑文件中配置3个TiKV节点
# 部署集群
tiup cluster deploy tidb-cluster v7.5.0 topology.yaml --user root -p
# 启动集群
tiup cluster start tidb-cluster
# 查看集群状态
tiup cluster status tidb-cluster
Cluster type: tidb Cluster name: tidb-cluster Cluster version: v7.5.0 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 /tidb/deploy/pd-2379 192.168.1.11:2379 pd 192.168.1.11 2379/2380 Up /tidb/data/pd /tidb/deploy/pd-2379 192.168.1.12:2379 pd 192.168.1.12 2379/2380 Up /tidb/data/pd /tidb/deploy/pd-2379 192.168.1.13:4000 tidb 192.168.1.13 4000/10080 Up - /tidb/deploy/tidb-4000 192.168.1.14:4000 tidb 192.168.1.14 4000/10080 Up - /tidb/deploy/tidb-4000 192.168.1.15:20160 tikv 192.168.1.15 20160/20180 Up /tidb/data/tikv /tidb/deploy/tikv-20160 192.168.1.16:20160 tikv 192.168.1.16 20160/20180 Up /tidb/data/tikv /tidb/deploy/tikv-20160 192.168.1.17:20160 tikv 192.168.1.17 20160/20180 Up /tidb/data/tikv /tidb/deploy/tikv-20160
跨可用区部署
风哥提示:
# 编辑拓扑文件,配置跨可用区部署
# topology.yaml示例
global:
user: "root"
ssh_port: 22
deploy_dir: "/tidb/deploy"
data_dir: "/tidb/data"
server_configs:
pd:
replication:
location-labels: ["zone", "rack", "host"]
pd_servers:
- host: 192.168.1.10
ssh_port: 22
port: 2379
status_port: 2380
deploy_dir: "/tidb/deploy/pd-2379"
data_dir: "/tidb/data/pd"
labels:
zone: "zone1"
rack: "rack1"
host: "host1"
- host: 192.168.1.11
ssh_port: 22
port: 2379
status_port: 2380
deploy_dir: "/tidb/deploy/pd-2379"
data_dir: "/tidb/data/pd"
labels:
zone: "zone2"
rack: "rack2"
host: "host2"
- host: 192.168.1.12
ssh_port: 22
port: 2379
status_port: 2380
deploy_dir: "/tidb/deploy/pd-2379"
data_dir: "/tidb/data/pd"
labels:
zone: "zone3"
rack: "rack3"
host: "host3"
tidb_servers:
- host: 192.168.1.13
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: "/tidb/deploy/tidb-4000"
labels:
zone: "zone1"
rack: "rack1"
host: "host1"
- host: 192.168.1.14
ssh_port: 22
port: 4000
status_port: 10080
deploy_dir: "/tidb/deploy/tidb-4000"
labels:
zone: "zone2"
rack: "rack2"
host: "host2"
tikv_servers:
- host: 192.168.1.15
ssh_port: 22
port: 20160
status_port: 20180
deploy_dir: "/tidb/deploy/tikv-20160"
data_dir: "/tidb/data/tikv"
labels:
zone: "zone1"
rack: "rack1"
host: "host1"
- host: 192.168.1.16
ssh_port: 22
port: 20160
status_port: 20180
deploy_dir: "/tidb/deploy/tikv-20160"
data_dir: "/tidb/data/tikv"
labels:
zone: "zone2"
rack: "rack2"
host: "host2"
- host: 192.168.1.17
ssh_port: 22
port: 20160
status_port: 20180
deploy_dir: "/tidb/deploy/tikv-20160"
data_dir: "/tidb/data/tikv"
labels:
zone: "zone3"
rack: "rack3"
host: "host3"
# 部署集群
tiup cluster deploy tidb-cluster v7.5.0 topology.yaml --user root -p
学习交流加群风哥QQ113257174
# 启动集群
tiup cluster start tidb-cluster
3.2 灾备方案
使用TiCDC实现跨区域复制
# 部署TiCDC
# 在拓扑文件中添加TiCDC配置
# 启动TiCDC
tiup cluster start tidb-cluster
# 创建跨区域同步任务
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"
# 查看同步任务状态
tiup ctl:v7.5.0 cdc changefeed query --pd=http://192.168.1.10:2379 --changefeed-id=cdc-cross-region
{
"id": "cdc-cross-region",
"summary": {
"state": "running",
"tso": 436578901234567890,
"checkpoint": "2024-04-09 10:00:00",
"error": null
}
}
定期备份
# 执行全量备份
tiup br backup full --pd "192.168.1.10:2379" --storage "s3://tidb-backup/full/$(date +%Y%m%d)"
# 执行增量备份
tiup br backup incremental --pd "192.168.1.10:2379" --storage "s3://tidb-backup/incremental/$(date +%Y%m%d%H)" --last-backup "s3://tidb-backup/full/$(date +%Y%m%d)"
# 验证备份
tiup br validate --storage "s3://tidb-backup/full/$(date +%Y%m%d)"
# 清理过期备份
aws s3 rm --recursive "s3://tidb-backup/full/$(date -d '30 days ago' +%Y%m%d)"
aws s3 rm --recursive "s3://tidb-backup/incremental/$(date -d '7 days ago' +%Y%m%d)"
# 设置定时任务
# 编辑crontab
crontab -e
# 添加定时任务
# 每日凌晨2:00执行全量备份
0 2 * * * /path/to/full_backup.sh >> /var/log/tidb_backup.log 2>&1
# 每小时执行增量备份
0 * * * * /path/to/incremental_backup.sh >> /var/log/tidb_backup.log 2>&1
3.3 故障转移与恢复
TiDB节点故障转移
# 模拟TiDB节点故障
# 停止TiDB节点
tiup cluster stop tidb-cluster --node 192.168.1.13:4000
# 查看集群状态
tiup cluster status tidb-cluster
# 客户端连接测试
# 客户端会自动连接到健康的TiDB节点
mysql -h 192.168.1.13 -P 4000 -u root -p root123 -e "SELECT 1;"
# 启动故障节点
tiup cluster start tidb-cluster --node 192.168.1.13:4000
# 查看集群状态
tiup cluster status tidb-cluster
TiKV节点故障转移
# 模拟TiKV节点故障
# 停止TiKV节点
tiup cluster stop tidb-cluster --node 192.168.1.15:20160
# 查看集群状态
tiup cluster status tidb-cluster
# 查看PD状态,确认数据重新平衡
curl http://192.168.1.10:2379/pd/api/v1/status
# 启动故障节点
tiup cluster start tidb-cluster --node 192.168.1.15:20160
# 查看集群状态
tiup cluster status tidb-cluster
PD节点故障转移
# 模拟PD节点故障
# 停止PD节点
tiup cluster stop tidb-cluster --node 192.168.1.10:2379
# 查看集群状态
tiup cluster status tidb-cluster
# 查看PD leader
curl http://192.168.1.11:2379/pd/api/v1/leader
# 启动故障节点
tiup cluster start tidb-cluster --node 192.168.1.10:2379
# 查看集群状态
tiup cluster status tidb-cluster
四、实战案例
4.1 跨区域灾备部署
场景:企业需要部署跨区域灾备系统,确保在主区域发生灾难时能够快速切换到灾备区域。
步骤1:部署主集群
# 部署主集群
tiup cluster deploy primary-cluster v7.5.0 primary-topology.yaml --user root -p
tiup cluster start primary-cluster
步骤2:部署灾备集群
# 部署灾备集群
tiup cluster deploy dr-cluster v7.5.0 dr-topology.yaml --user root -p
tiup cluster start dr-cluster
步骤3:配置TiCDC跨区域同步
# 创建跨区域同步任务
tiup ctl:v7.5.0 cdc changefeed create --pd=http://primary-pd:2379 --sink-uri="tidb://root:root123@dr-tidb:4000/fgedudb" --config=cdc-dr.yaml
# 查看同步任务状态
tiup ctl:v7.5.0 cdc changefeed query --pd=http://primary-pd:2379 --changefeed-id=cdc-dr
{
"id": "cdc-dr",
"summary": {
"state": "running",
"tso": 436578901234567890,
"checkpoint": "2024-04-09 10:00:00",
"error": null
}
}
步骤4:灾备演练
# 模拟主区域故障
# 停止主集群
tiup cluster stop primary-cluster
# 验证灾备集群数据
mysql -h dr-tidb -P 4000 -u root -p root123 -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;"
# 切换应用到灾备集群
# 修改应用配置,指向灾备集群
# 恢复主集群
tiup cluster start primary-cluster
# 重新配置TiCDC同步(反向同步)
tiup ctl:v7.5.0 cdc changefeed create --pd=http://dr-pd:2379 --sink-uri="tidb://root:root123@primary-tidb:4000/fgedudb" --config=cdc-primary.yaml
# 验证数据同步
tiup ctl:v7.5.0 cdc changefeed query --pd=http://dr-pd:2379 --changefeed-id=cdc-primary
4.2 故障恢复演练
场景:企业需要定期进行故障恢复演练,确保在发生故障时能够快速恢复。
步骤1:准备演练环境
# 部署测试集群
tiup cluster deploy test-cluster v7.5.0 test-topology.yaml --user root -p
tiup cluster start test-cluster
# 导入测试数据
mysql -h test-tidb -P 4000 -u root -p root123 < test-data.sql
步骤2:执行全量备份
# 执行全量备份
tiup br backup full --pd "test-pd:2379" --storage "local:///tidb/backup/full/test"
# 验证备份
tiup br validate --storage "local:///tidb/backup/full/test"
# 模拟数据损坏
mysql -h test-tidb -P 4000 -u root -p root123 -e "DROP DATABASE fgedudb;"
# 验证数据损坏
mysql -h test-tidb -P 4000 -u root -p root123 -e "SHOW DATABASES;"
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
步骤3:执行恢复
# 执行全量恢复
tiup br restore full --pd "test-pd:2379" --storage "local:///tidb/backup/full/test"
# 验证数据恢复
mysql -h test-tidb -P 4000 -u root -p root123 -e "SHOW DATABASES;"
mysql -h test-tidb -P 4000 -u root -p root123 -e "SELECT COUNT(*) FROM fgedudb.fgedu_users;"
+--------------------+ | Database | +--------------------+ | information_schema | | fgedudb | | mysql | | performance_schema | | sys | +--------------------+ +----------+ | COUNT(*) | +----------+ | 100000 | +----------+
五、经验总结
5.1 高可用与灾备最佳实践
- 多副本部署:部署足够的副本数,确保数据安全
- 跨可用区部署:将节点分布在不同的可用区,提高容灾能力
- 定期备份:制定完善的备份策略,确保数据可恢复
- 跨区域复制:使用TiCDC实现跨区域数据同步
- 灾备演练:定期进行灾备演练,确保灾备系统可用
- 监控与告警:建立完善的监控和告警机制,及时发现和处理问题
- 文档更新:保持高可用和灾备文档的更新
5.2 故障处理最佳实践
- 快速定位故障:使用监控系统快速定位故障原因
- 自动故障转移:配置自动故障转移,减少人工干预
- 优先级处理:优先处理影响业务的故障
- 记录故障处理过程:记录故障处理过程,总结经验教训
- 持续改进:根据故障处理经验,持续改进系统架构
5.3 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| TiKV节点故障 | 硬件故障、网络问题 | 重启节点,等待数据重新平衡 |
| PD节点故障 | 网络问题、内存不足 | 重启节点,等待leader选举 |
| TiDB节点故障 | CPU使用率高、内存不足 | 重启节点,优化SQL语句 |
| 跨区域同步延迟 | 网络延迟、数据量过大 | 优化网络环境,增加TiCDC资源 |
| 备份失败 | 网络中断、存储故障 | 检查网络连接,确保存储可用 |
5.4 高可用与灾备检查清单
| 检查项 | 配置要求 | 状态 |
|---|---|---|
| 多副本部署 | TiKV至少3副本 | □ |
| 跨可用区部署 | 节点分布在不同可用区 | □ |
| 备份策略 | 定期执行全量和增量备份 | □ |
| 跨区域复制 | 配置TiCDC跨区域同步 | □ |
| 灾备演练 | 定期进行灾备演练 | □ |
| 监控告警 | 配置完善的监控和告警 | □ |
| 故障处理流程 | 制定完善的故障处理流程 | □ |
| 文档更新 | 及时更新高可用和灾备文档 | □ |
更多视频教程www.fgedu.net.cn
© 2024 TiDB数据库培训文档
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
