阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop2.0 HA的主备自动切换

121次阅读
没有评论

共计 7252 个字符,预计需要花费 19 分钟才能阅读完成。

在《Hadoop2.0 QJM 方式的 HA 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101175.htm)一文中介绍了 HA 的配置,是通过手工进行主备切换的。本文在这基础上,继续介绍 HA 的主备自动切换(automatic failover)的配置。自动切换是通过配置 zookeeper 来实现的,关于 zookeeper 的安装和配置,在这里不做介绍了,大家可以参考网上的资料。

1 准备 

假定已经有一个 zookeeper 的集群,3 台机器如下:

  • zookeeper1
  • zookeeper2
  • zookeeper3

两个 namenode 节点如下:

namenode1

namenode2

2 配置 

只涉及到 core-site.xml 和 hdfs-site.xml 两个配置文件,其他配置可以文件参考《hadoop2.0 的安装和基本配置》一文。

2.1 core-site.xml 

需要增加 ha.zookeeper.quorum 参数,加上 zookeeper 的服务地址

完整配置如下:

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://mycluster</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>/home/tmp/hadoop2.0</value>

        </property>

        <property>

                <name>ha.zookeeper.quorum</name>

                <value>zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</value>

        </property>

</configuration>

2.2 hdfs-site.xml 

<configuration>

        <property>

                <name>dfs.replication</name>

                <value>1</value>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>/home/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>/home/dfs/data</value>

        </property>

        <property>

                <name>dfs.permissions</name>

                <value>false</value>

        </property>

        <property>

                <name>dfs.nameservices</name>

                <value>mycluster</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.mycluster</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn1</name>

                <value>namenode1:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn2</name>

                <value>namenode2:8020</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn1</name>

                <value>namenode1:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn2</name>

                <value>namenode2:50070</value>

        </property>

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>

        </property>

        <property>

                <name>dfs.journalnode.edits.dir</name>

                <value>/home/dfs/journal</value>

        </property>

        <property>

                <name>dfs.client.failover.proxy.provider.mycluster</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

        <property>

                <name>dfs.ha.fencing.methods</name>

                <value>shell(/bin/true)</value>

        </property>

        <property>

                <name>dfs.ha.automatic-failover.enabled</name>

                <value>true</value>

        </property>

</configuration>

dfs.ha.automatic-failover.enabled

需要设置为 true,启动自动切换。

dfs.ha.fencing.methods

这里我们把 fencing 方法设置为 shell,一是为了方便测试,二是采用 QJM 方式的 HA 本身就有 fencing 功能,不需要用这个参数中的 fencing 功能,详解请参考《hadoop2.0 QJM 方式的 HA 的配置》一文。你用 sshfence 的方法也是可以的,不过要注意 ssh 连接的问题和一些权限的问题。

3 在 zookeeper 中初始化 

$HADOOP_HOME/bin/hdfs zkfc -formatZK

运行这个命令后,会在 zookeeper 上创建一个 /hadoop-ha/mycluster/ 的 znode,用来存放 automatic failover 的数据。

4 启动 zkfc(zookeeper failover controller) 

需要在 namenode1 和 namenode2 上都启动 zkfc daemon 进程。

$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

5 启动 HDFS 

可以参考《Hadoop2.2.0 的安装和基本配置》(见 http://www.linuxidc.com/Linux/2014-05/101173.htm)和《Hadoop2.0 QJM 方式的 HA 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101175.htm)这两篇文章。

在两个 namenode 都启动之后,会发现,其中一个 namenode 会自动切换成 active 状态,不需要手工切换。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-05/101176p2.htm

6 测试 

现在可以享受我们的胜利成果了。我们把 active namenode 停掉后,会看到 standby namenode 自动切换成 active 状态了。

7 QJM 方式 HA automatic failover 的结构图

QJM 方式 HA 的结构涉及到 active namenode,standby namenode,journalnode,datanode,zookeeper,zkfc,client,这里通过一个图描述他们之间的关系。

 

8 实战 tips 

zookeeper 可以在 Hadoop 集群中选几台机器同时作为 zookeeper 节点,给 HA 私用。

在实践中建议采用手工切换的方式,这样更可靠,也方便查找问题。

参考资料 

http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

在《Hadoop2.0 QJM 方式的 HA 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101175.htm)一文中介绍了 HA 的配置,是通过手工进行主备切换的。本文在这基础上,继续介绍 HA 的主备自动切换(automatic failover)的配置。自动切换是通过配置 zookeeper 来实现的,关于 zookeeper 的安装和配置,在这里不做介绍了,大家可以参考网上的资料。

1 准备 

假定已经有一个 zookeeper 的集群,3 台机器如下:

  • zookeeper1
  • zookeeper2
  • zookeeper3

两个 namenode 节点如下:

namenode1

namenode2

2 配置 

只涉及到 core-site.xml 和 hdfs-site.xml 两个配置文件,其他配置可以文件参考《hadoop2.0 的安装和基本配置》一文。

2.1 core-site.xml 

需要增加 ha.zookeeper.quorum 参数,加上 zookeeper 的服务地址

完整配置如下:

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://mycluster</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>/home/tmp/hadoop2.0</value>

        </property>

        <property>

                <name>ha.zookeeper.quorum</name>

                <value>zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</value>

        </property>

</configuration>

2.2 hdfs-site.xml 

<configuration>

        <property>

                <name>dfs.replication</name>

                <value>1</value>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>/home/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>/home/dfs/data</value>

        </property>

        <property>

                <name>dfs.permissions</name>

                <value>false</value>

        </property>

        <property>

                <name>dfs.nameservices</name>

                <value>mycluster</value>

        </property>

        <property>

                <name>dfs.ha.namenodes.mycluster</name>

                <value>nn1,nn2</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn1</name>

                <value>namenode1:8020</value>

        </property>

        <property>

                <name>dfs.namenode.rpc-address.mycluster.nn2</name>

                <value>namenode2:8020</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn1</name>

                <value>namenode1:50070</value>

        </property>

        <property>

                <name>dfs.namenode.http-address.mycluster.nn2</name>

                <value>namenode2:50070</value>

        </property>

        <property>

                <name>dfs.namenode.shared.edits.dir</name>

                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>

        </property>

        <property>

                <name>dfs.journalnode.edits.dir</name>

                <value>/home/dfs/journal</value>

        </property>

        <property>

                <name>dfs.client.failover.proxy.provider.mycluster</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        </property>

        <property>

                <name>dfs.ha.fencing.methods</name>

                <value>shell(/bin/true)</value>

        </property>

        <property>

                <name>dfs.ha.automatic-failover.enabled</name>

                <value>true</value>

        </property>

</configuration>

dfs.ha.automatic-failover.enabled

需要设置为 true,启动自动切换。

dfs.ha.fencing.methods

这里我们把 fencing 方法设置为 shell,一是为了方便测试,二是采用 QJM 方式的 HA 本身就有 fencing 功能,不需要用这个参数中的 fencing 功能,详解请参考《hadoop2.0 QJM 方式的 HA 的配置》一文。你用 sshfence 的方法也是可以的,不过要注意 ssh 连接的问题和一些权限的问题。

3 在 zookeeper 中初始化 

$HADOOP_HOME/bin/hdfs zkfc -formatZK

运行这个命令后,会在 zookeeper 上创建一个 /hadoop-ha/mycluster/ 的 znode,用来存放 automatic failover 的数据。

4 启动 zkfc(zookeeper failover controller) 

需要在 namenode1 和 namenode2 上都启动 zkfc daemon 进程。

$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

5 启动 HDFS 

可以参考《Hadoop2.2.0 的安装和基本配置》(见 http://www.linuxidc.com/Linux/2014-05/101173.htm)和《Hadoop2.0 QJM 方式的 HA 的配置》(见 http://www.linuxidc.com/Linux/2014-05/101175.htm)这两篇文章。

在两个 namenode 都启动之后,会发现,其中一个 namenode 会自动切换成 active 状态,不需要手工切换。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-05/101176p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计7252字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中