Hadoop-2.4.1学习之使用Quorum Journal Manager的HDFS的高可用性(三)

       在学习了如何配置HA后,接下来是启动和管理HA。要启动HA集群,首先要在所有运行JournalNode的主机上启动JournalNodes守护进程,可以在每台主机上执行命令hdfs journalnode启动journalnode守护进程。在journalnode守护进程启动完成之后,必须首先同步两个 NameNode硬盘上的元数据,具体如下:

  • 如果正在搭建全新的HDFS集群,应该首先在其中一个NameNode上执行format命令:hdfs namenode –format。
  • 如果有已经格式化了的NameNode,或者将一个非HA集群转换为HA集群,需要将已格式化的NameNode的元数据目录中的内容拷贝到未格式化的另一个NameNode上,这一点可以在未格式化的NameNode上使用命令hdfs namenode –bootstrapStandby实现。运行该命令之前需要确保JournalNodes(由dfs.namenode.shared.edits.dir配置)包含足够的edits事务能够启动两个NameNode。
  • 如果将一个非HANameNode转换为HA,应该运行hdfs namenode –initializeSharedEdits,该命令将使用本地NameNode edits目录中的edits数据初始化JournalNodes。

       完成上述步骤后,可以像通常启动NameNode那样启动HA的NameNodes。可以使用配置的http地址分别访问每个NameNode的web页面,在该页面可以看到NameNode的HA状态(active或者standby),无论何时启动HA的NameNode,最初都处于standby状态。

       使用hdfs haadmin命令管理HA集群,直接在命令行输入该命令会输出该命令的使用方法:

Usage: DFSHAAdmin [-ns <nameserviceId>]
    [-transitionToActive <serviceId>]
    [-transitionToStandby <serviceId>]
    [-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
    [-getServiceState <serviceId>]
    [-checkHealth <serviceId>]
    [-help <command>]

       要想查看每个子命令的具体使用方法可以使用hdfs haadmin –help <command>,下面是每个命令的功能:

  • transitionToActive和transitionToStandby:将给定的NameNode转换为Active或者Standby。由于这两个命令不会尝试执行任何保护措施,所以几乎不使用它们,做为替代者,建议使用hdfs haadmin –failover。
  • failover:在两个NameNode间开始故障切换。该命令从第一个NameNode切换到第二个NameNode,如果第一个NameNode处于standby状态,该命令简单地将第二个NameNode转换为active状态。如果第一个NameNode处于active状态,将会尝试平滑地转换该NameNode为standby状态,如果失败,由dfs.ha.fencing.methods指定的保护方法按顺序尝试直到其中之一成功,紧接着,第二个NameNode将转换为active状态。如果所有的保护方法都失败,第二个NameNode将不会被转换为active状态,并返回错误信息。
  • getServiceState:确定指定的NameNode是active或者standby状态,并在标准输出中输出active或者standby。当计划任务或监控脚本需要根据NameNode处于active或者standby状态执行不同功能时可以使用该命令。
  • checkHealth:检查给定NameNode的健康状态。NameNode本身可以对自己执行一些诊断,包括检查内部服务是否按照预期运行。如果NameNode是健康的,该命令返回0,否则返回非0。可以使用该命令用于监控目的。注意的是,该命令还未完全实现,除非NameNode完全宕机,否则总是返回0。

       下面学习一下如何升级HA。当不同版本的HDFS互相替换时,新版本可以容易地安装,然后重启即可,但是升级正在运行的HDFS可能会改变硬盘上的数据,这时必须在安装完新版本后使用HDFS的Upgrade/Finalize/Rollback工具。该过程在HA架构更加复杂,因为NameNode依赖的硬盘上的元数据是分布式的,既存在于两个NN上,也存在于JournalNodes上(QJM用于edits共享存储的情况)。按照下面的步骤对HA升级:

  1. 正常关闭NNs,然后安装新版本Hadoop。
  2. 启动所有的JNs。当执行升级、回退或者结束升级操作时所有的JNs处于运行中是关键的,如果在执行上述操作时,任何JNs没有在运行,操作将会失败。
  3. 使用‘-upgrade’选项启动其中的一个NN。
  4. 启动后,该NN不会像通常那样进入standby状态,而是立刻进入active状态,执行本地存储目录和共享edit日志的升级。
  5. 另一个NN将不与已升级的NN进行同步。为了进行同步,需要重新引导该NN,’-bootstrapStandby’用于实现该目的。使用‘-upgrade’启动第二个NN是错误的。

       在结束或者回退升级之前,如果想重启NNs,应该正常启动NNs,即不适用任何启动选项,如-upgrade等。当NNs都在运行且其中之一处于active状态,可以使用hdfs dfsadmin –finalizeUpgrade命令结束升级。此时现役NN结束共享日志的升级,包含先前HDFS状态的NN将删除它的本地状态。要回退升级,需要先停止两个NN。然后在启动升级过程的NN上执行回退命令,这将在本地目录,NN或者JNs上的共享日志执行回退。最后启动该NN并在另一个NN上运行-bootstrapStandby以为两个NN同步回退后的文件系统状态。


你可能感兴趣的:(HA,upgrade,Failover,qjm,Hadoop-2.4.1)