例如,
我这里须要将
地址A: http://www.veryok.com/hello/ ...
的所有的请求都转发到某一服务器上
地址B: http://192.168.1.xxx/forward/hello/ ...上
HA架构是共同为客户机提供网络资源的一组计算机系统。其中每一台提供服务的计算机称为节点。当一个节点不可用或者不能处理客户的请求时,该请求会及时转到另外的可用节点来处理,而这些对于客户端是透明的,客户不必关心要使用资源的具体位置,集群系统会自动完成。
基于共享磁盘的HA架构通过共享盘柜实现集群中各节点的数据共享,包含主服务器、从服务器、存储阵列三种主要设备,以及设备间的心跳连接线。而基于磁盘镜像的HA架构不包含存储阵列。集群中两种服务器的本地硬盘通过数据镜像技术,实现集群中各节点之间的数据同步,从而实现集群的功能。
拓展资料:HA架构软件是架构在操作系统之上的程序,其主要由守护进程、应用程序代理、管理工具、开发脚本等四部分构成,应用服务系统是为客户服务的应用系统程序,比如MS SQL Server,Oracle,Sybase,DB2 UDB,Exchange,Lotus Notes等应用系统软件。
从Hadoop2开始,可以允许有2个NameNode,一个是active(活跃状态),另一个是standby(待命状态),其中active状态的NameNode对外提供服务,Hadoop1没有此特性.
在Hadoop1里面只能有一个NameNode,带来的灾难就是单点故障( single point of failure (SPOF)),每个集群只有一个NameNode,如果计算机或者进程不可用,则整个集群不可用,直到NameNode重新启动或者在单独的计算机.
这从两个方面影响了HDFS集群的总体可用性:
在发生意外事件(如机器崩溃)的情况下,集群将不可用,直到技术人员把NameNode重新启动之后.
如果NameNode对应的计算机节点需要进行硬件或者软件的升级,就需要停止NameNode服务,这又会导致集群宕机.
Hadoop的HA就可以允许在计算机崩溃的情况下,快速切换到新的NameNode,或者允许处于计划维护NameNode有运维人员直接切换到standby服务器上面
-------以上取自 hadoop.apache.org 官网解答
HA的架构模式其实是有两种,HDFS High Availability Using the Quorum Journal Manager(企业级开发专用)和NFS for the shared storage 共享编辑日志模式(基本上不用)
共享编辑日志模式 -您将需要有一个共享目录,两台NameNode机器都可以对其进行读/写访问。通常,这是一个支持NFS的远程文件管理器,并安装在每个NameNode计算机上。当前仅支持一个共享的edits目录。因此,系统的可用性受到此共享编辑目录的可用性的限制,因此,为了消除所有单点故障,共享编辑目录需要冗余。具体来说,有到存储的多个网络路径,以及存储本身的冗余(磁盘,网络和电源)。 因此,建议共享存储服务器是高质量的专用NAS设备,而不是简单的Linux服务器。
-------以上取自 hadoop.apache.org 官网解答
所有企业开发里面目前还没遇到过使用这种模式的.下面详细介绍QJM模式
为了部署高可用性群集,您应该准备以下内容:
NameNode计算机 -运行活动NameNode和Standby NameNode的计算机应具有彼此等效的硬件,以及与非HA群集中将使用的硬件相同的硬件。
JournalNode计算机 -运行JournalNode的计算机。JournalNode守护程序相对较轻,因此可以合理地将这些守护程序与其他Hadoop守护程序(例如NameNode,JobTracker或YARN ResourceManager)并置在计算机上。 注意: 必须至少有3个JournalNode守护程序,因为必须将编辑日志修改写入大多数JN。这将允许系统容忍单个计算机的故障。您可能还会运行3个以上的JournalNode,但是为了实际增加系统可以容忍的故障数量,您应该运行奇数个JN(即3、5、7等)。请注意,当与N个JournalNode一起运行时,系统最多可以容忍(N-1)/ 2个故障,并继续正常运行。
-------以上取自 hadoop.apache.org 官网解答
这里解释一下,JournalNode上面之所以建议是奇数台,是因为HDFS底层算法他是(N-1)/2的故障,假如是偶数台,4台,(4-1)/2=1,也就是1台挂了,就会导致所有的JournalNode都不能正常运行,但是其实我只挂了一台而已,另外三台完全可以支撑完运行,如果是奇数3台的话,(3-1)/2=1台,挂了一台,还剩下两台,这时候就不能正常运行,但是,再挂一台是不是就超过了过半性原则,这个奇数过半性原理在整个Hadoop中使用很广泛
以三台服务器为例:
dachun001 :zookeeper nn(NameNode) zkfc(ZookeeperFailoverControl) JournalNode dn(DataNode)
dachun002 :zookeeper nn(NameNode) zkfc(ZookeeperFailoverControl) JournalNode dn(DataNode)
dachun003 :zookeeper zkfc(ZookeeperFailoverControl) JournalNode dn(DataNode)
active NameNode:
接收client的rpc请求,同时自己的editlog写一条日志记录,同时发送给JournalNode日志集群写一条记录,同时接收DataNode的心跳和块报告
standby NameNode:
同时接收JournalNode日志集群的的记录,在自己本身执行,使得自己的元数据和active NameNode是一致的,这步叫做重演
同时也接受DataNode的心跳报告(这个是为了在进行从standby演变到active状态时候更加平滑)
也随时等待从standby-->active状态,对外提供服务。
JournalNode:
JouralNode守护进程相当的轻量级,可以和Hadoop的其他进程部署在一起
active NameNode --> standby NameNode的同步数据进程.
datanode:
同时向两个nn发送 心跳 and 块报告
zkfc(ZookeeperFailoverControl)进程:
监控NameNode的健康状态,可以理解为NameNode和zookeeper的桥梁,standby-active或者active-standby是通过zkfc进程
NameNode通过zkfc向zookeeper集群定期发送心跳,使得自己被选举上,
当被zookeeperk集群选举为active时,
zkfc进程通过rpc调用NameNode状态变为active。
在典型的HA群集中,将两个单独的计算机配置为NameNode。在任何时间点,恰好其中一个NameNode处于 活动 状态,而另一个处于 Standby 状态。Active NameNode负责群集中的所有客户端操作,而Standby只是充当从属,并保持足够的状态以在必要时提供快速故障转移。
为了使Standby节点保持其状态与Active节点同步,两个节点都与称为“ JournalNodes”(JN)的一组单独的守护程序进行通信。当活动节点执行任何名称空间修改时,它会持久地将修改记录记录到这些JN的大多数中。Standby节点能够从JN读取编辑内容,并不断监视它们以查看编辑日志的更改。当“备用节点”看到编辑内容时,会将其应用到自己的名称空间。发生故障转移时,备用服务器将确保在将自身升级为活动状态之前,已从JournalNode读取所有编辑内容。这样可确保在发生故障转移之前,名称空间状态已完全同步。
为了提供快速故障转移,备用节点还必须具有有关集群中块位置的最新信息。为了实现这一点,DataNode被配置了两个NameNode的位置,并向两者发送块位置信息和心跳。
对于HA群集的正确操作至关重要,一次只能有一个NameNode处于活动状态。否则,名称空间状态将在两者之间迅速分散,从而有数据丢失或其他不正确结果的风险。为了确保此属性并防止所谓的“裂脑情况”,JournalNode将仅一次允许一个NameNode成为作者。在故障转移期间,将变为活动状态的NameNode将仅承担写入JournalNodes的角色,这将有效地防止另一个NameNode继续处于活动状态,从而使新的Active可以安全地进行故障转移。
yarn的HA相对于HDFS的HA就没有这么复杂,他的NM(NodeManager)只会向active的RM(ResourceManager)发送心跳信息,
zkfc是和ResourceManager在同一个进程中,即ZKFC是一个 线程 在 ResourceManager 进程中,如果这个ResourceManager进程挂了,这个ZKFC线程就挂了
RM(ReourceManager)进程:
a.启动时会向zk(zookeeper)集群的hadoop-ha目录写个lock文件,
写成功就标识为active,否则为standby。
standby rm(ResourceManager)会一直监控lock文件是否存在,如果不存在就尝试去创建,争取为active。
b.会接收client客户端的请求,接收和监控nm的资源汇报,
负责资源的分配和调度,启动和监控application master。
rmstore:
a.rm的作业信息是存储在zk(zookeeper)的/rmstore,
active rm会向这个目录写作业app信息。
b.当active rm挂了,另外一个standby rm成功转为active状态,
就会从这里读取对应的作业的信息,
重新构建作业的内存信息,启动内部服务,
开始接收NM(NodeManager)心跳,构建集群资源信息,且开始接收客户端提交的作业的请求。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)