1.HA high availability 高可用性,持续服务的能力,多台主机之间进行集群配置。
2.failover 容灾
3.namenode , 2nn 2nn解决的是可靠性问题
4.single point of failure (SPOF),单点故障
5.NFS(Network File System) + QJM
HA 架构
- 两台主机,一台 active,另一台 standby,active namenode 负责客户端所有操作,standby namenode 维护足够多的状态,随时提供容灾服务
- Journal Node 是单独的进程(三个,每个进程在一个节点之上),用于 active namenode 和 standby namenode 之间的同步信息。
- active namenode 的 namespace 修改动作写入到 Journal Nodes(写入到三个),standby namenode 从 Journal Node 读取 edit,需要不断观察 log 的变化,一旦 log 发生变化,standby namenode 就会同步到自己的 namespace。
- datanode 同时向两个 namenode 块列表信息以及心跳。
- 同一时刻只能有一个 active namenode,如果两个都是 active namenode,叫做“脑裂”。
部署 HA
-------------------------------------------------------------------------------------------------------------------------------------------------
1.配置过程:
[hdfs-site.xml]
1.配置名称服务:dfs.nameservices
名称服务的逻辑名
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
2.配置 nameservice 中每个 namenode :dfs.ha.namenodes.[nameservice ID]
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
3.配置每个 namenode 的 rpc 地址:dfs.namenode.rpc-address.[nameservice ID].[name node ID]
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>ubuntucp:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>ubuntu5:8020</value>
</property>
4.配置每个 namenode 的 web ui 地址:dfs.namenode.http-address.[nameservice ID].[name node ID]
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>ubuntucp:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>ubuntu5:50070</value>
</property>
5.配置 namenode 的共享编辑目录(edit log):dfs.namenode.shared.edits.dir
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://ubuntucp:8485;ubuntu5:8485;ubuntu4:8485/mycluster</value>
</property>
这三个目录可以配置到任何三个主机上,在这里配置到两个 namenode 和一个 secondarynamenode 上。
6.配置客户端容灾代理供应商类:dfs.client.failover.proxy.provider.[nameservice ID]
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
供客户端用来检测哪个 namenode 是活跃点
7.配置HDFS的文件系统:fs.defaultFS(这个在core-site.xml中配置)
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
8.配置 journalnode 的本地存放数据(edit log)的目录:dfs.journalnode.edits.dir
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/ubuntu/hadoop/journal</value>
</property>
2.部署过程
1.在 journalnode 节点之上启动 journalnode 进程(ubuntucp,ubuntu4,ubuntu5)
hadoop-daemon.sh start journalnode
2.启动完 journalnode 之后,需要在 disk 上完成两个 namenode 的元数据同步工作。
a.如果正在构建新的 hdfs 集群,需要在一台 namenode 上执行:
hdfs namenode -format
b.若已经格式化文件系统或者在非 HA 的集群上启用 HA 功能,需要复制现有的 namenode 目录(~/hadoop/dfs/name)到另一 台 namenode 的相同目录下。在未格式化的 namenode 上执行:
hdfs namenode -bootstrapStandby
该命令保证 journal node 有足够多的 edit 来启动两个 namenode。
c.如果正在将非HA namenode 转化为 HA,执行命令:
hdfs namenode -initializeSharedEdits
会从 local 的 namenode 编辑日志目录数据初始化到 jns 中。
d.启动两个 namenode
e.通过 webiui 查看每个 namenode 的状态:
http://ubuntucp:50070/ http://ubuntuct:50070/