HDFS HA搭建

1.HA   high availability   高可用性,持续服务的能力,多台主机之间进行集群配置。

2.failover  容灾

3.namenode , 2nn      2nn解决的是可靠性问题

4.single point of failure (SPOF),单点故障

5.NFS(Network File System) + QJM

HA 架构

  1. 两台主机,一台 active,另一台 standby,active namenode 负责客户端所有操作,standby namenode 维护足够多的状态,随时提供容灾服务
  2. Journal Node 是单独的进程(三个,每个进程在一个节点之上),用于 active namenode 和 standby namenode 之间的同步信息。
  3. active namenode 的 namespace 修改动作写入到 Journal Nodes(写入到三个),standby namenode 从 Journal Node 读取 edit,需要不断观察 log 的变化,一旦 log 发生变化,standby namenode 就会同步到自己的 namespace。
  4. datanode 同时向两个 namenode 块列表信息以及心跳。
  5. 同一时刻只能有一个 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/

猜你喜欢

转载自blog.csdn.net/sp_ur/article/details/82502134