ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HDFS集群的高可用集群一遍过!!!

HDFS集群的高可用集群一遍过!!! 目录一.HDFS的高可用集群1.1简单介绍1.2部署zookeeper集群1.2.1简单介绍1.2.2准备工作1.2.3下载并解压软件包1.2.4编辑配置文件1.2.5启动zookeeper集群节点1.3启动HDFS高可用集群1.3.1编辑.xml文件1.3.2初始化集群1.3.3启动hdfs集群1.4Yarn高可用集群(RM节点)1.4.1简单介绍1.4.2编辑配置文件1.4.3启动集群1.4.4浏览器访问web页面1.4.5测试yarn故障切换1.5停止所有集群一.HDFS的高可用集群1.1简单介绍1.说明HDFS 高可用集群就是给 HDFS 的“文件总管NameNode”配备了一个时刻同步数据的“影子副手Standby”并借助 JournalNode 共享日志和 ZooKeeper 选举裁判实现了存储层元数据的自动容灾保证即使单台服务器宕机HDFS 依然能对外提供不间断的文件读写服务。2.作用在典型的HA集群中通常有两台不同的机器充当NN。在任何时间只有一台机器处于Active状态另一台机器是处于Standby状态。ActiveNN负责集群中所有客户端的操作而StandbyNN主要用于备用它主要维持足够的状态如果必要可以提供快速的故障恢复。如果同时出现两台ActiveNameSpace状态将会出现分歧这将会导致数据的丢失及其它不正确的结果。为了保证这种情况不会发生在任何时间JNs只允许一个NN充当writer。在故障恢复期间将要变成Active 状态的NN将取得writer的角色并阻止另外一个NN继续处于Active状态。3.工作机制为了让StandbyNN的状态和ActiveNN保持同步即元数据保持一致它们都将会和JournalNodes守护进程通信。当ActiveNN执行任何有关命名空间的修改它需要持久化到一半以上的JournalNodes上(通过edits log持久化存储)而StandbyNN负责观察edits log的变化它能够读取从JNs中读取edits信息并更新其内部的命名空间。StandbyNN读取全部的edits可确保发生故障转移之前是和ActiveNN拥有完全同步的命名空间状态。一旦ActiveNN出现故障StandbyNN将会保证从JNs中读出了全部的Edits然后切换成Active状态。4.工作原理图1.2部署zookeeper集群1.2.1简单介绍1.说明zookeeper集群是一个为分布式应用提供一致性服务的中央化系统。类似于分布式集群中的操作内核负责管理集群中的各个节点的沟通和共识。同时自身具有高可用架构当Leader节点宕机时会自动选举出新Leader。zookeeper集群本身不做数据存储。注意因为该集群采用投票方式决定新Leader所以ZK集群中的节点必须是奇数2.集群的角色划分角色名作用说明Leader(领导者)集群的唯一写入口所有数据的请求都必须经过Leader处理它负责发起投票并协调事务Follower(追求者)核心参与者主要负责处理客户端的请求同时参与投票并同步数据也可作为新Leader的竞选者Observer观察者观察员只读和 Follower 一样能处理读请求提高集群的吞吐量但它并不参与投票3.核心作用1.领导者选举:说明在 HDFS HA 架构中通常有两个 NameNode一个处于Active活跃/工作状态另一个处于Standby待命/备份状态.。原理当两个 NameNode 启动时都会在 ZooKeeper 的指定目录下尝试创建同一个临时节点。谁能成功创建这个节点谁就被选举为Active NameNode获得“主控权”另一个则成为 Standby随时待命。2.故障检测与自动切换说明在活跃的namenode上存在着一个组件——zkfczk集群的故障切换转移器。原理Active 节点的 ZKFC 会定期向 ZooKeeper 发送心跳并持续修改/刷新它持有的那个临时节点的数据。如果 Active NameNode 宕机、网络断连或 JVMJava虚拟机崩溃ZKFC 的心跳就会中断。ZooKeeper 检测到该临时节点超时被自动删除时会立刻触发新一轮选举自动将 Standby NameNode 提升为 Active。3.节点隔离防护说明ZooKeeper 不仅负责“选出来”还负责“按住老的”。当网络出现极端抖动时老 Active 可能还没彻底死掉只是与 ZK 网络不通但它仍认为自己是 Active脑裂问题原理ZK 在触发新选举并切换后会利用 ZK 中记录的事务日志版本号ACL 或 Epoch强制旧 Active 节点进行自毁例如强制旧 NameNode 进程退出或禁止其继续访问共享存储如 JournalNode确保只有一个活跃的 namenode。1.2.2准备工作1.完成域名解析IP地址主机名节点192.168.7.191server1namenode,ZK控制点,ResourceManager192.168.7.192server2datanode,Journalnode,QuorumPeerMain192.168.7.193server3datanode,Journalnode,QuorumPeerMain192.168.7.194server4datanode,Journalnode,QuorumPeerMain192.168.7.195server5namenode,ZK控制点,ResourceManager2.关闭防火墙和selinuxsystemctl disable --now firewalld #关闭防火墙 vim /etc/selinux/config #关闭selinux并重启系统 #修改以下内容 SELINUXDisabled3.确认时间同步timedatectl #查看时间同步1.2.3下载并解压软件包方式一官网下载Releases - Apache ZooKeeperhttps://zookeeper.apache.org/releases方式二wget下载wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.6/apache-zookeeper-3.8.6.tar.gz ls1.2.4编辑配置文件1.复制模板配置文件(server1)cd apache-zookeeper-3.8.6-bin/conf #进入zookeeper的配置目录下 cp zoo_sample.cfg zoo.cfg #生成配置文件说明默认情况下是没有zoo.cfg文件的需要你去手动复制模板生成一份2.编辑配置文件(sever1)vim zoo.cfg说明在配置文件的尾行根据你的数据节点(datanode)的个数添加相应的地址IP前面的server.1server.2等表示数据节点的ID号不要重复命名后面的IP加端口号表示你的数据节点ID对应的主机3.为数据节点添加ID(三个数据节点)mkdir /tmp/zookeeper #创建/tmp/zookeeper目录 echo ID /tmp/zookeeper #添加ID号说明这里的myid的值需要与上面的配置文件相对应。例如myid1 - server2(192.168.7.192)myid2 - server3(192.168.7.193)myid3 - server4(192.168.7.194)1.2.5启动zookeeper集群节点说明在三个数据节点datanode上启动zkServer.sh脚本cd apache-zookeeper-3.8.6-bin/bin #进入zookeeper的程序目录下 ./zkServer.sh start #启动服务 ./zkServer.sh status #查看当前节点的集群状态说明三个ZK节点中一个节点为leader其他两个节点均为follower1.3启动HDFS高可用集群1.3.1编辑.xml文件1.编辑core-site.xml文件cd hadoop vim etc/hadoop/core-site.xml2.编辑hdfs-site.xml文件cd hadoop vim etc/hadoop/hdfs-site.xml3.编辑工作节点cd hadoop vim etc/hadoop/worker说明在该文件下定义的节点会被作为数据节点添加进集群中。cd hadoop bin/hdfs --daemon start journalnode1.3.2初始化集群1.启动journalnode节点(server2server3server4)cd hadoop bin/hdfs --daemon start journalnode #启动节点 jps #查看当前的节点状态2.格式化HDFS集群仅在server1bin/hdfs namenode -format说明如果你之前有做过hdfs集群这个操作会清理掉你之前的数据会让你选择清理数据3.将初始化数据传送给另一个namenode节点scp /tmp/hadoop-hadoop server5:/tmp/ #将初始化的数据传送给另一个namenode节点说明hadoop-hadoop目录为初始化后产生的数据需要将他同步给另一个namenode,确保它存在该数据确保namenode切过去时能够正常运行4.初始化ZK集群仅在server1上bin/zkfc --formatZK1.3.3启动hdfs集群1.手动启动集群仅在server1cd hadoop sbin/start-dfs.sh #确保启动时无错误注意如果之前的文件配置有错误导致节点无法启动。切记一定要先去停止掉正在运行的集群接着去修改配置文件重新启动否则会造成数据冗余说明当发生数据冗余时即文件修改后存在错误的节点比如server1缺乏某些节点或者多了些节点这时需要你手动去修改它例如我的配置文件已正确现在存在数据冗余bin/hdfs --daemon stop datanode #停止该节点上的datanodebin/hdfs --daemon start namenode #停止该节点上的namenode2.查看集群各节点的状态(在所有节点上执行)说明确保主机上的节点正确jps3.启动hdfs集群仅在server1bin/zkCli.sh4.查看namenode的节点状态浏览器:主机server1或server5IP:98701.4Yarn高可用集群(RM节点)1.4.1简单介绍1.说明YARN 高可用集群是指为解决 Hadoop 集群中ResourceManager资源管理器单点故障问题而设计的高可靠运行模式。该集群中存在一个活跃的RM节点和一个standby状态的RM节点。注意RM节点并非是HDFS集群的必需品。如果你的HDFS集群只做冷数据存储则无需RM节点控制。但如果既存数据又需要计算分析那就需要RM节点分配计算资源。2.工作机制YARN HA 通过引入Active/Standby主/备双节点架构通常在一台物理机上部署一个 Active RM对外提供服务在另一台完全独立的物理机上部署一个 Standby RM热备时刻同步状态随时准备接管。整个集群同时只存在一个 Active RM由 Standby RM 作为“影子内阁”实时监控。3.核心作用1.自动选举与故障检测Active RM 会在 ZooKeeper 上创建一个临时节点锁。Standby RM 监控该节点。一旦 Active 心跳消失宕机临时节点被删除Standby 会立刻抢注并提升为新的 Active整个过程无需人工干预。2.运行状态持久化与 HDFS HA 依赖 JournalNode 存储元数据不同YARN HA 将当前集群正在运行的应用程序列表、已完成任务的计数器等轻量级状态信息直接存储在 ZooKeeper 的持久节点中。这使得 Standby 升主时无需加载庞大日志切换速度通常比 HDFS HA 更快1.4.2编辑配置文件1.编辑 etc/hadoop/mapred-site.xml 文件cd hadoop vim etc/hadoop/mapred-site.xml添加以下内容2.编辑 etc/hadoop/yarn-site.xml 文件cd hadoop vim etc/hadoop/yarn-site.xml添加以下内容1.4.3启动集群1.启动yarn集群仅在server1sbin/start-yarn.sh2.查看集群各节点的状态jps1.4.4浏览器访问web页面说明一般情况下在高可用架构中哪个RM节点先启动它就是activate另一个则是standby第一个Web页面server1IP:8088第二个Web页面说明第二个页面地址一定要输全否则会被解析成域名导致无法访问server5IP:8088/cluster第二个页面的访问地址没输全时会出现类似下面的情况1.4.5测试yarn故障切换说明server1standbyserver5active切换后server1activeserver5standby1.停止server5上的RM节点kill -9 RM节点PID2.查看RM节点状态说明节点已切换到server1上server5的web页面无法访问3.恢复server5上的RM节点bin/yarn --daemon start resourcemanager1.5停止所有集群1.停止yarn集群和dfs集群仅在server1cd hadoop sbin/stop-yarn.sh #停止yarn集群 sbin/stop-dfs.sh #停止dfs集群2.停止ZK集群server2server3server4cd apache-zookeeper-3.8.6-bin bin/zkServer.sh stop
返回列表