云顶娱乐官方入口-www.40081.com-云顶娱乐网址4118112
做最好的网站
您的位置:云顶娱乐官方入口 > www.40081.com > HDP2.6 Hadoop云顶娱乐官方入口 Namenode HA 设置

HDP2.6 Hadoop云顶娱乐官方入口 Namenode HA 设置

2019-12-03 06:18

Hadoop NameNode HA

Hadoop NameNode HA 模式下有两个 NameNode, 其中 active NameNode 提供 HDFS 服务, standby NameNode 作为备节点在 active NameNode 宕机后变更状态为 active, 从而避免 NameNode 的单点问题. 某次被误删 NameNode 文件系统之后, 决定配置 Hadoop HA, 让集群自动应对运维失误或恶意攻击,或者简单的宕机.

  <small>目前apache官方提供的ambari最新版为2.5.1,还未提供ambari-server 的HA方案,因工作需要实现了一版简易的Ambari-Server HA。</small>

配置

ambari

ambari 下注意所有服务关闭 maintenance 状态.

官方参考文档

  • ###### 架构设计

问题

因为ambari-server 与namenode 的作用不同,所以对于宕机的处理实时性的要求相对来讲没有那么高,只需要在active server宕机后,standby 的ambari-server 能够正常切换,顺利接管agent的心跳信息,能够处理用户的访问请求即可。
  此系统的HA解决方案使用hadoop集群内的zookeeper作为协调器,ambari-server 启动后,在zookeeper内创建一个临时节点(/ambari/ha/master-hostname),并与zookeeper保持一个长链接,再设置一个watcher监控这个节点的状态。此节点的值为该主机的hostname,所有的agent向ambari-server发送心跳之前,先来zookeeper中获取此时active的ambari-server的hostname,再向这个ambari-server 发送心跳。
  如果ambari-server 启动时,向zookeeper创建临时节点(/ambari/ha/master-hostname)失败,并且失败的原因是节点已存在(报 NodeExistsException异常),说明已经有一个ambari-server已成功启动,则将此ambari-server定义为standby 的角色,设置watcher监听/ambari/ha/master-hostname,并在zookeeper中创建一个另一个临时节点(/ambari/ha/standby-hostname),用来做ambari-server HA 管理。

Hue

设置完 HA 之后 hue 启动失败,报 [ERROR] "httpfs-site" not found in server response
貌似是 ambari 的 webhdfs 相关的配置没了.

云顶娱乐官方入口 1

解决方式

*** -ambari-server HA整体架构图- ***

安装 LesTR 的 ambari-httpfs-service 组件

  1. HTTPFS 放到 /var/lib/ambari-server/resources/stacks/HDP/2.6/services 下.
  2. ambari-server restart
  3. 添加 HTTPFS 服务, 参考 https://github.com/EsharEditor/ambari-hue-service/issues/23 配置 hue proxy
  4. 启动 HTTPFS.

云顶娱乐官方入口 2

ambari 中修改 hue 配置页, 设置

webhdfs_url=http://$HTTPFS_IP:$HTTPFS_PORT/webhdfs/v1

*** zookeeper 节点信息 ***

重启 hue


DONE

*** 具体细节,我们以Q&A的形式体现... ***

Q1: 因为原生ambari-server依赖内嵌的postgresql数据库,那么数据同步是如何实现的?

底层的数据同步使用postgersql 的主从结构进行同步

Q2: ambari-server 依赖的是8.4版本的postgresql 数据库,此版本不支持主从结构怎么办?

修改ambari-server依赖的postgresql版本,使其依赖9.2版本的postgersql数据库

Q3: ambari-server 启动时,需要连接zookeeper,并向zookeeper内创建节点,如果此时zookeeper不可用怎么办?

开发以stand-alone模式启动ambari-server的功能,在使用curator连接zookeeper之前,使用zookeeper原生的api试着连接一次zookeeper(创建或访问/ambari/check-connection),如果能够正常成功,说明zookeeper可用,则继续使用curator连接zookeeper。如果zookeeper不可用,则向外层抛出提示信息,提示用户zookeeper不可用,请执行 ambari-server start --stand-alone 。以stand-alone 模式启动ambari-server。

Q4: ambari-agent 连接zookeeper,需要使用python 工具包,这些工具包不易管理,如何方便维护?

使用kazoo(pipy官网可搜),将源码下载下来,打成ambari_kazoo.rpm包,然后让ambari-agent.rpm包依赖ambari_kazoo.rpm,在安装ambari-agent时,rpm的包依赖机制会自动帮助我们安装好Python操作zookeeper 的工具包。

Q5: 如何保证在同一时刻,只有active 的ambari-server 能够被访问?

standby ambari-server 启动时,如果在zookeeper内创建master节点失败,那么线程阻塞(object.wait()),不继续启动ambari-server内部的jetty容器,所以用户无法访问standby ambari-server 的web页面。

Q6: ambari-server 启动时向zookeeper注册master节点失败,则会被定义为standby 的角色,除了阻塞线程,还做了什么事?

执行shell脚本,将本机的postgresql 数据库设置为slave角色,以便active的ambari-server 的数据库能够正常同步到slave机器

Q7: 什么时候触发ambari-server 的切换?

active ambari-server 宕机时,在zookeeper内创建的临时节点(/ambari/ha/master-hostname)因为session失效而消失,standby ambari-server 的watcher会被触发,向zookeeper创建一个新的节点(/ambari/ha/master-hostname),ambari-agent 会向新的ambari-server 发送心跳。

Q8:ambari-server 是如何切换的?

standby ambari-server 中的watcher被触发后,向zookeeper内创建master-hostname节点,如果创建成功,则notify之前的object.wait() 继续启动ioc容器和jetty容器,更新zookeeper中/ambari/ha/history-hostname,执行shell脚本将当前的postgresql数据库设置为master角色。

Q9: agent识别到ambari-server发生变化时,除了向新的主机发送心跳,还会做什么?

更新本机内的/etc/hosts,将repo源,ntpd服务器信息更新

Q10:如果zookeeper宕机,ambari-agent 向哪个ambari-server 发送心跳?

在ambari-agent 内部会缓存一个变量:activeServerHostName,发生ambari-server切换时,会更新这个变量,如果zookeeper不可用时,将会向此变量对应的ambari-server发送心跳。

Q11: 在切换ambari-server时,涉及到了数据库的重启操作,如果数据库未完全启动,此时数据库不能访问,那么如何保证不出问题?

数据库内创建一张专门用来测试数据库是否可用的表,在每次重启数据库时,都先想这个表中写如一条数据,再将此数据读出来,完成一次操作才视为数据库完全启动,再执行原来的业务逻辑,否则每隔5S重试一次。

本文由云顶娱乐官方入口发布于www.40081.com,转载请注明出处:HDP2.6 Hadoop云顶娱乐官方入口 Namenode HA 设置

关键词:

  • 上一篇:没有了
  • 下一篇:没有了