本文详细介绍Hadoop业务连续性保障实战,包括高可用架构、灾备方案、故障转移、灾难恢复、应急流程等内容,适合大数据架构师和运维工程师使用。学习交流加群风哥微信: itpux-com
Part01-基础概念与理论知识
1.1 业务连续性概述
业务连续性是指组织在面临各种风险时,能够持续提供关键业务服务的能力。更多视频教程www.fgedu.net.cn
- 减少业务中断时间
- 降低业务损失
- 快速恢复服务
- 保障数据安全
- 符合法规要求
1.2 RTO与RPO
RTO与RPO是业务连续性的两个关键指标:
1. RTO(Recovery Time Objective)
– 恢复时间目标
– 灾难发生后,业务恢复可接受的最长时间
– 例如:4小时
– 越短,成本越高
2. RPO(Recovery Point Objective)
– 恢复点目标
– 灾难发生后,可接受的数据丢失量
– 例如:1小时
– 越短,成本越高
# 常见组合
– 关键业务:RTO<1h, RPO<15min
- 重要业务:RTO<4h, RPO<1h
- 一般业务:RTO<24h, RPO<4h
1.3 业务连续性框架
业务连续性框架:
Part02-生产环境规划与建议
2.1 高可用架构
高可用架构:
1. NameNode HA
– 主备NameNode
– ZKFC自动故障转移
– QJM共享编辑日志
2. ResourceManager HA
– 主备ResourceManager
– ZK自动故障转移
– 状态存储在ZK
3. DataNode多副本
– 默认3副本
– 跨机架分布
– 自动恢复
4. HBase RegionServer HA
– Master主备
– Region多副本
– WAL保证
5. Kafka Broker HA
– 多Broker部署
– Partition多副本
– ISR机制
2.2 灾备方案
灾备方案:
- 本地备份:数据备份到本地
- 异地备份:数据备份到异地
- 双活:两地同时运行
- 多活:多地同时运行
from bigdata视频:www.itpux.com
2.3 监控告警
监控告警:
1. 基础设施
– CPU使用率
– 内存使用率
– 磁盘使用率
– 网络流量
– 电源状态
– 温度
2. Hadoop
– NameNode状态
– DataNode数量
– HDFS可用空间
– ResourceManager状态
– NodeManager数量
– 运行任务数
3. 应用
– 任务成功率
– 任务延迟
– 数据处理量
– API响应时间
– 用户活跃度
Part03-生产环境项目实施方案
3.1 高可用实施
3.1.1 NameNode HA配置
# hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>fgedu-cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.fgedu-cluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.fgedu-cluster.nn1</name>
<value>fgedu-nn01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.fgedu-cluster.nn2</name>
<value>fgedu-nn02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.fgedu-cluster.nn1</name>
<value>fgedu-nn01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.fgedu-cluster.nn2</name>
<value>fgedu-nn02:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://fgedu-jn01:8485;fgedu-jn02:8485;fgedu-jn03:8485/fgedu-cluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.fgedu-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>fgedu-zk01:2181,fgedu-zk02:2181,fgedu-zk03:2181</value>
</property>
# 启动ZKFC
hdfs –daemon start zkfc
# 检查HA状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
3.2 灾备实施
3.2.1 数据备份
# 1. HDFS备份
# 本地备份
hdfs dfs -cp /bigdata/fgdata /backup/fgdata_$(date +%Y%m%d)
# 异地备份
hadoop distcp \
hdfs://fgedu-cluster:8020/bigdata/fgdata \
hdfs://fgedu-dr:8020/backup/fgdata
# 2. Hive备份
# 元数据备份
mysqldump -u root -p hive > /backup/hive_metastore_$(date +%Y%m%d).sql
# 数据备份
hive -e “EXPORT TABLE fgedu_db.fgedu_user TO ‘/backup/hive/fgedu_user_$(date +%Y%m%d)'”
# 3. HBase备份
# 快照
hbase snapshot create_snapshot ‘fgedu_table’, ‘fgedu_table_snapshot_$(date +%Y%m%d)’
# 复制快照到灾备
hbase snapshot export_snapshot -snapshot fgedu_table_snapshot_20240408 -copy-to hdfs://fgedu-dr:8020/backup/hbase
# 4. 自动化备份脚本
#!/bin/bash
# backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DATE=$(date +%Y%m%d)
BACKUP_PATH=/backup/hadoop_$DATE
mkdir -p $BACKUP_PATH
# HDFS备份
hdfs dfs -cp /bigdata/fgdata /backup/fgdata_$DATE
# Hive元数据备份
mysqldump -u root -p’fgedu123′ hive > $BACKUP_PATH/hive_metastore_$DATE.sql
# HBase快照
echo “create_snapshot ‘fgedu_table’, ‘fgedu_table_snapshot_$DATE'” | hbase shell
echo “Backup completed: $DATE”
3.3 自动化运维
3.3.1 自动故障恢复
# 1. 监控脚本
#!/bin/bash
# monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 检查NameNode状态
NN1_STATUS=$(hdfs haadmin -getServiceState nn1)
NN2_STATUS=$(hdfs haadmin -getServiceState nn2)
if [ “$NN1_STATUS” != “active” ] && [ “$NN2_STATUS” != “active” ]; then
echo “CRITICAL: No active NameNode!”
# 发送告警
# 尝试故障转移
hdfs haadmin -failover nn1 nn2
fi
# 检查DataNode
DATANODE_COUNT=$(hdfs dfsadmin -report | grep “Live datanodes” | awk ‘{print $3}’)
if [ “$DATANODE_COUNT” -lt 3 ]; then
echo “CRITICAL: Too few DataNodes: $DATANODE_COUNT”
fi
# 2. 服务自动重启
#!/bin/bash
# auto_restart.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 检查DataNode
if ! jps | grep -q DataNode; then
echo “DataNode is down, restarting…”
hdfs –daemon start datanode
fi
# 检查NodeManager
if ! jps | grep -q NodeManager; then
echo “NodeManager is down, restarting…”
yarn –daemon start nodemanager
fi
Part04-生产案例与实战讲解
4.1 故障转移实战
4.1.1 NameNode故障转移
# 1. 检查当前状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
# 输出示例:
# nn1: active
# nn2: standby
# 2. 模拟故障
# 停止Active NameNode
ssh fgedu-nn01 “hdfs –daemon stop namenode”
# 3. 观察故障转移
sleep 60
# 4. 检查新状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
# 输出示例:
# nn1: standby
# nn2: active
# 5. 验证服务
hdfs dfs -ls /
jps
# 6. 恢复原Active NameNode
ssh fgedu-nn01 “hdfs –daemon start namenode”
sleep 30
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
4.2 灾难恢复实战
4.2.1 从灾备恢复
# 假设生产集群故障,从灾备集群恢复
# 1. 停止生产集群(如果还在运行)
stop-all.sh
# 2. 切换到灾备集群
# 修改客户端配置,指向灾备集群
# core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://fgedu-dr:8020</value>
</property>
# 3. 恢复数据
# 如果需要从备份恢复
hdfs dfs -cp /backup/fgdata_20240408 /bigdata/fgdata
# 恢复Hive
mysql -u root -p hive < /backup/hive_metastore_20240408.sql
hive -e "IMPORT TABLE fgedu_db.fgedu_user FROM '/backup/hive/fgedu_user_20240408'"
# 恢复HBase
echo "restore_snapshot 'fgedu_table_snapshot_20240408', 'fgedu_table'" | hbase shell
# 4. 启动灾备集群
start-all.sh
# 5. 验证服务
jps
hdfs dfsadmin -report
hive -e "SELECT * FROM fgedu_db.fgedu_user LIMIT 10"
4.3 灾备演练
4.3.1 演练计划
# 1. 演练准备
– 制定演练计划
– 通知相关人员
– 准备回滚方案
– 备份当前数据
# 2. 演练执行
– 停止生产集群部分服务
– 切换到灾备
– 验证灾备服务
– 执行业务测试
# 3. 演练总结
– 记录演练过程
– 评估演练结果
– 识别问题
– 制定改进计划
# 4. 演练脚本
#!/bin/bash
# dr_drill.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== Starting DR Drill ===”
# 备份
hdfs dfs -cp /bigdata/fgdata /backup/fgdata_drill_$(date +%Y%m%d)
# 停止部分DataNode
echo “Stopping 1 DataNode…”
ssh fgedu-dn01 “hdfs –daemon stop datanode”
sleep 30
# 检查HDFS状态
hdfs dfsadmin -report
# 执行测试
echo “Running tests…”
hadoop jar /bigdata/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 10 100
# 恢复DataNode
echo “Recovering DataNode…”
ssh fgedu-dn01 “hdfs –daemon start datanode”
echo “=== DR Drill Completed ===”
Part05-风哥经验总结与分享
5.1 最佳实践
最佳实践:
- 高可用:所有关键组件都要配置HA
- 多副本:数据至少3副本,跨机架
- 定期备份:制定备份策略,定期备份
- 监控告警:全面监控,及时告警
- 应急演练:定期演练,验证方案
5.2 应急流程
1. 故障发现
– 监控告警
– 用户反馈
– 巡检发现
2. 故障评估
– 影响范围
– 严重程度
– 业务影响
3. 故障通知
– 通知相关人员
– 启动应急响应
4. 故障处理
– 快速定位
– 制定方案
– 执行恢复
– 验证结果
5. 故障总结
– 记录过程
– 分析原因
– 制定改进
– 知识分享
5.3 培训与演练
1. 培训
– 团队培训
– 技术培训
– 流程培训
– 应急培训
2. 演练
– 桌面演练
– 模拟演练
– 实战演练
– 定期演练
3. 文档
– 应急预案
– 操作手册
– 故障案例
– 知识库
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
