高可用消除方案

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重试贰回。