目录大纲
Part01-基础概念与理论知识
1.1 QJM架构原理
1.2 JournalNode角色说明
1.3 EditLog同步机制
Part02-生产环境规划与建议
2.1 QJM集群规划
2.2 JournalNode硬件配置
2.3 QJM网络规划
Part03-生产环境项目实施方案
3.1 JournalNode集群部署
3.2 QJM配置详解
3.3 QJM集群验证
3.4 QJM运维管理
Part04-生产案例与实战讲解
4.1 QJM故障恢复案例
4.2 QJM性能优化案例
4.3 QJM监控告警案例
Part05-风哥经验总结与分享
5.1 QJM最佳实践
5.2 QJM常见问题解决
Part01-基础概念与理论知识
1.1 QJM架构原理
QJM(Quorum Journal Manager)是HDFS HA的核心组件,负责管理NameNode的EditLog共享存储。更多视频教程www.fgedu.net.cn QJM通过JournalNode集群实现EditLog的分布式存储,保证数据的一致性和可靠性。
1.2 JournalNode角色说明
JournalNode是QJM的核心服务进程,每个JournalNode存储一份EditLog副本。学习交流加群风哥微信: itpux-com Active NameNode写入EditLog时,需要获得多数JournalNode的确认。
– 接收并存储Active NameNode的EditLog
– 提供EditLog读取服务给Standby NameNode
– 参与EditLog写入的多数派确认
– 支持EditLog的恢复和同步
1.3 EditLog同步机制
EditLog是HDFS元数据的修改日志,记录了所有文件系统操作。from bigdata视频:www.itpux.com QJM通过以下机制保证EditLog的同步:
ls -la /bigdata/fgdata/journalnode/fgeduns/current/
-rw-r–r– 1 hdfs hdfs 1048576 Jan 15 16:00 edits_0000000000000000001-0000000000000001000
-rw-r–r– 1 hdfs hdfs 1048576 Jan 15 16:05 edits_0000000000000001001-0000000000000002000
-rw-r–r– 1 hdfs hdfs 1048576 Jan 15 16:10 edits_0000000000000002001-0000000000000003000
-rw-r–r– 1 hdfs hdfs 32 Jan 15 16:10 seen_txid
Part02-生产环境规划与建议
2.1 QJM集群规划
QJM集群规划需要考虑可用性、性能和成本。更多学习教程公众号风哥教程itpux_com 生产环境建议部署3个或5个JournalNode。
– 3节点集群:允许1个节点故障,适合中小规模集群
– 5节点集群:允许2个节点故障,适合大规模生产集群
– 7节点集群:允许3个节点故障,适合超大规模集群
2.2 JournalNode硬件配置
JournalNode对硬件要求相对较低,但需要保证磁盘IO性能。学习交流加群风哥QQ113257174
cat /proc/meminfo | grep MemTotal
df -h /bigdata/fgdata/journalnode
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 500G 50G 450G 10% /bigdata/fgdata
2.3 QJM网络规划
QJM网络规划需要保证JournalNode之间的低延迟通信。风哥提示:建议JournalNode部署在同一网络交换机下。
ping -c 3 fgedu03.net.cn
64 bytes from fgedu03.net.cn (192.168.1.102): icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from fgedu03.net.cn (192.168.1.102): icmp_seq=2 ttl=64 time=0.098 ms
64 bytes from fgedu03.net.cn (192.168.1.102): icmp_seq=3 ttl=64 time=0.105 ms
— fgedu03.net.cn ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.098/0.108/0.123/0.015 ms
Part03-生产环境项目实施方案
3.1 JournalNode集群部署
3.1.1 创建JournalNode数据目录
mkdir -p /bigdata/fgdata/journalnode
chown -R hdfs:hdfs /bigdata/fgdata/journalnode
chmod 755 /bigdata/fgdata/journalnode
ls -la /bigdata/fgdata/ | grep journalnode
drwxr-xr-x 2 hdfs hdfs 4096 Jan 15 16:20 journalnode
3.1.2 配置hdfs-site.xml
vi /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://fgedu03.net.cn:8485;fgedu04.net.cn:8485;fgedu05.net.cn:8485/fgeduns</value>
</property>
<!– JournalNode数据目录 –>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/bigdata/fgdata/journalnode</value>
</property>
<!– JournalNode RPC端口 –>
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<!– JournalNode HTTP端口 –>
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<!– JournalNode HTTPS端口 –>
<property>
<name>dfs.journalnode.https-address</name>
<value>0.0.0.0:8481</value>
</property>
3.1.3 启动JournalNode服务
hdfs –daemon start journalnode
# 验证服务状态
jps | grep JournalNode
netstat -tlnp | grep 8485
29500 JournalNode
# 端口监听正常
tcp6 0 0 :::8485 :::* LISTEN 29500/java
tcp6 0 0 :::8480 :::* LISTEN 29500/java
3.2 QJM配置详解
3.2.1 核心配置参数
hdfs getconf -confKey dfs.namenode.shared.edits.dir
– dfs.namenode.shared.edits.dir:JournalNode集群地址
– dfs.journalnode.edits.dir:JournalNode本地存储目录
– dfs.journalnode.rpc-address:JournalNode RPC服务地址
– dfs.journalnode.http-address:JournalNode Web UI地址
3.2.2 性能优化配置
cat /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml | grep -A3 “journalnode”
<property>
<name>dfs.journalnode.sync.interval</name>
<value>5</value>
</property>
<!– EditLog写入超时 –>
<property>
<name>dfs.qjournal.write-txns.timeout</name>
<value>60000</value>
</property>
<!– JournalNode请求超时 –>
<property>
<name>dfs.qjournal.rpc-timeout.ms</name>
<value>30000</value>
</property>
3.3 QJM集群验证
3.3.1 验证JournalNode状态
curl http://fgedu03.net.cn:8480/journalstatus
# 查看JournalNode日志
tail -50 /bigdata/app/hadoop/logs/hadoop-hdfs-journalnode-fgedu03.log
{“state”:”running”,”lastWrittenTxId”:3000,”formatted”:true}
# 日志输出
2024-01-15 16:30:00,000 INFO journal.JournalNode: JournalNode started
2024-01-15 16:30:05,123 INFO journal.Journal: Formatting journal fgeduns
2024-01-15 16:30:10,456 INFO server.JournalNodeHttpServer: JournalNode Web server started
3.3.2 验证EditLog同步
hdfs dfs -mkdir /bigdata/test_qjm
hdfs dfs -ls /bigdata/ | grep test_qjm
# 检查EditLog同步
hdfs dfsadmin -printTopology
drwxr-xr-x – hdfs hdfs 0 2024-01-15 16:35 /bigdata/test_qjm
# 拓扑信息正常
Rack: /default-rack
192.168.1.101:9866 (fgedu01.net.cn)
192.168.1.102:9866 (fgedu02.net.cn)
192.168.1.103:9866 (fgedu03.net.cn)
3.4 QJM运维管理
3.4.1 JournalNode启停管理
hdfs –daemon stop journalnode
# 启动JournalNode
hdfs –daemon start journalnode
# 重启JournalNode
hdfs –daemon restart journalnode
no JournalNode to stop
# 启动成功
starting journalnode, logging to /bigdata/app/hadoop/logs/hadoop-hdfs-journalnode-fgedu03.out
# 进程验证
jps | grep JournalNode
30100 JournalNode
3.4.2 JournalNode数据恢复
# 首先停止目标JournalNode
hdfs –daemon stop journalnode
# 清理损坏的数据
rm -rf /bigdata/fgdata/journalnode/fgeduns/*
# 从正常JournalNode复制数据
scp -r fgedu04.net.cn:/bigdata/fgdata/journalnode/fgeduns /bigdata/fgdata/journalnode/
# 启动JournalNode
hdfs –daemon start journalnode
fgeduns/ 100% 1024MB 50.0MB/s 00:20
# JournalNode启动成功
starting journalnode, logging to /bigdata/app/hadoop/logs/hadoop-hdfs-journalnode-fgedu03.out
# 验证数据同步
ls /bigdata/fgdata/journalnode/fgeduns/current/
edits_0000000000000000001-0000000000000003000 seen_txid
Part04-生产案例与实战讲解
4.1 QJM故障恢复案例
JournalNode故障是生产环境常见问题。更多视频教程www.fgedu.net.cn 以下是JournalNode故障恢复的实战案例。
hdfs haadmin -getServiceState nn1
# 查看JournalNode集群状态
hdfs getconf -journalNodes
active
# JournalNode列表
fgedu03.net.cn:8485
fgedu04.net.cn:8485
fgedu05.net.cn:8485
# 测试JournalNode连接
nc -zv fgedu03.net.cn 8485
Connection to fgedu03.net.cn 8485 port [tcp/*] succeeded!
4.1.1 单节点故障恢复
# 1. 检查故障节点
ssh fgedu03.net.cn “jps | grep JournalNode”
# 2. 查看故障日志
tail -100 /bigdata/app/hadoop/logs/hadoop-hdfs-journalnode-fgedu03.log
# 3. 重启服务
hdfs –daemon start journalnode
# 无JournalNode进程
# 日志分析
2024-01-15 17:00:00,000 ERROR journal.JournalNode: JournalNode crashed due to disk full
# 清理磁盘空间后重启
starting journalnode, logging to /bigdata/app/hadoop/logs/hadoop-hdfs-journalnode-fgedu03.out
# 恢复成功
jps | grep JournalNode
30500 JournalNode
4.2 QJM性能优化案例
QJM性能优化主要关注磁盘IO和网络传输。学习交流加群风哥微信: itpux-com
# 使用独立磁盘存储EditLog
cat /etc/fstab | grep journalnode
# 调整磁盘调度算法
echo deadline > /sys/block/sdb/queue/scheduler
/dev/sdb1 /bigdata/fgdata/journalnode ext4 defaults,noatime 0 0
# 调度算法设置成功
cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq
4.3 QJM监控告警案例
4.3.1 JournalNode监控脚本
# jn_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
JN_NODES=”fgedu03.net.cn fgedu04.net.cn fgedu05.net.cn”
PORT=8485
for node in ${JN_NODES}; do
if nc -zv ${node} ${PORT} &>/dev/null; then
echo “$(date) – ${node}:${PORT} is UP”
else
echo “$(date) – ${node}:${PORT} is DOWN – ALERT!”
# 发送告警
echo “JournalNode ${node} is down!” | mail -s “JN Alert” admin@fgedu.net.cn
fi
done
./jn_monitor.sh
Mon Jan 15 17:30:00 CST 2024 – fgedu03.net.cn:8485 is UP
Mon Jan 15 17:30:00 CST 2024 – fgedu04.net.cn:8485 is UP
Mon Jan 15 17:30:00 CST 2024 – fgedu05.net.cn:8485 is UP
Part05-风哥经验总结与分享
5.1 QJM最佳实践
在实际生产环境中,QJM部署需要注意以下几点:from bigdata视频:www.itpux.com
1. JournalNode数量必须是奇数,推荐3或5个
2. JournalNode应分布在不同机架,提高可用性
3. 使用独立磁盘存储EditLog,避免IO竞争
4. 定期检查EditLog文件大小,及时清理历史日志
5. 配置监控告警,及时发现JournalNode故障
5.2 QJM常见问题解决
5.2.1 EditLog文件过大
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
hdfs dfsadmin -safemode leave
# 检查EditLog文件
ls -lh /bigdata/fgdata/journalnode/fgeduns/current/
Safe mode is ON
Save namespace successful
Safe mode is OFF
# EditLog文件已合并
total 100M
-rw-r–r– 1 hdfs hdfs 100M Jan 15 17:45 edits_0000000000000003001-0000000000000005000
-rw-r–r– 1 hdfs hdfs 32 Jan 15 17:45 seen_txid
5.2.2 JournalNode时钟不同步
– JournalNode之间时钟必须同步,否则会导致EditLog写入失败
– 建议配置NTP服务,保持时钟一致
– 时钟偏差超过阈值会导致HA切换失败
ntpstat
# 手动同步时间
ntpdate -u pool.ntp.org
synchronised to NTP server (192.168.1.1) at stratum 3
time correct to within 50 ms
polling server every 1024 s
# 手动同步成功
15 Jan 18:00:00 ntpdate[31000]: adjust time server 192.168.1.1 offset 0.001234 sec
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
