1.NFS
网络共享存储设备。
2.QJM
Quorum Journal Manager
3.两个名称节点
active //激活
standby //待命
active //激活
deactive //钝化
SPOF
----------------
single point of failure,单点故障。
事务是个特性
--------------
a //atomic 原子性
c //consistent一致性
i //isolate 隔离型
d //durable 永久性·
majority
------------
大部分.
HA高可用配置
-------------------
high availability,高可用.
/home/centos/hadoop/dfs/data/current/BP-2100834435-192.168.231.201-1489328949370/current/finalized/subdir0/subdir0
两个名称节点,一个active(激活态),一个是standby(slave待命),slave节点维护足够多状态以便于容灾。
和客户端交互的active节点,standby不交互.
两个节点都和JN守护进程构成组的进行通信。
数据节点配置两个名称节点,分别报告各自的信息。
同一时刻只能有一个激活态名称节点。
脑裂:两个节点都是激活态。
为防止脑裂,JNs只允许同一时刻只有一个节点向其写数据。容灾发生时,成为active节点的namenode接管
向jn的写入工作。
硬件资源
--------------
名称节点: 硬件配置相同。
JN节点 : 轻量级进程,至少3个节点,允许挂掉的节点数 (n - 1) / 2.
不需要再运行辅助名称节点。
部署
----------------
配置细节
---------------
0.s201和s206具有完全一致的配置,尤其是ssh.
1.配置nameservice
[hdfs-site.xml]
dfs.nameservices
mycluster
2.dfs.ha.namenodes.[nameservice ID]
[hdfs-site.xml]
dfs.ha.namenodes.mycluster
nn1,nn2
3.dfs.namenode.rpc-address.[nameservice ID].[name node ID]
[hdfs-site.xml]
配置每个nn的rpc地址。
dfs.namenode.rpc-address.mycluster.nn1
s201:8020
dfs.namenode.rpc-address.mycluster.nn2
s206:8020
4.dfs.namenode.http-address.[nameservice ID].[name node ID]
配置webui端口
[hdfs-site.xml]
dfs.namenode.http-address.mycluster.nn1
s201:50070
dfs.namenode.http-address.mycluster.nn2
s206:50070
5.dfs.namenode.shared.edits.dir
名称节点共享编辑目录.
[hdfs-site.xml]
dfs.namenode.shared.edits.dir
qjournal://s202:8485;s203:8485;s204:8485/mycluster
6.dfs.client.failover.proxy.provider.[nameservice ID]
java类,client使用它判断哪个节点是激活态。
[hdfs-site.xml]
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
7.dfs.ha.fencing.methods
脚本列表或者java类,在容灾保护激活态的nn.
[hdfs-site.xml]
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/home/centos/.ssh/id_rsa
8.fs.defaultFS
配置hdfs文件系统名称服务。
[core-site.xml]
fs.defaultFS
hdfs://mycluster
9.dfs.journalnode.edits.dir
配置JN存放edit的本地路径。
[hdfs-site.xml]
dfs.journalnode.edits.dir
/home/centos/hadoop/journal
部署细节
----------------
1.在jn节点分别启动jn进程
$>hadoop-daemon.sh start journalnode
2.启动jn之后,在两个NN之间进行disk元数据同步
a)如果是全新集群,先format文件系统,只需要在一个nn上执行。
[s201]
$>hadoop namenode -format
b)如果将非HA集群转换成HA集群,复制原NN的metadata到另一个nn.
1.步骤一
[s201]
$>scp -r /home/centos/hadoop/dfs centos@s206:/home/centos/hadoop/
2.步骤二
在新的nn(未格式化的nn)上运行一下命令,实现待命状态引导。
[s206]
$>hdfs namenode -bootstrapStandby //需要s201为启动状态,提示是否格式化,选择N.
3)在一个NN上执行以下命令,完成edit日志到jn节点的传输。
$>hdfs namenode -initializeSharedEdits
#查看s202,s203是否有edit数据.
4)启动所有节点.
[s201]
$>hadoop-daemon.sh start namenode //启动名称节点
$>hadoop-daemons.sh start datanode //启动所有数据节点
[s206]
$>hadoop-daemon.sh start namenode //启动名称节点
HA管理
-----------------
$>hdfs haadmin -transitionToActive nn1 //切成激活态
$>hdfs haadmin -transitionToStandby nn1 //切成待命态
$>hdfs haadmin -transitionToActive --forceactive nn2//强行激活
$>hdfs haadmin -failover nn1 nn2 //模拟容灾演示,从nn1切换到nn2