HDP2.6 Hadoop Namenode HA 设置。Ambari-Server 高可用解决方案。

standby NameNode 作为备节点在 active NameNode 宕机后变更状态为,向zookeeper创建临时节点(/ambari/ha/master-hostname)失败

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>

配置

  • ###### 使用技巧

    • apache
      Zookeeper
    • apache
      Curator

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重试一不成。