迁移策略:CDH 集群整体平缓迁移的最佳实践

在大数据时代,Hadoop作为一款开源的分布式计算框架,已经成为了企业处理海量数据的首选技术。而Cloudera Distribution Inc.(CDH)作为一个基于Apache Hadoop的开源软件平台,为企业提供了一套完整的、易于部署和管理的解决方案。然而,随着业务的发展和需求的变化,企业可能需要对CDH集群进行迁移,以满足新的需求。本文将详细介绍CDH集群整体平滑迁移的过程和注意事项,希望给到大家以借鉴的意义。

迁移策略:CDH 集群整体平缓迁移的最佳实践_zookeeper

一、集群环境

系统环境

软件环境

集群规模

CentOS Linux release 7.6.1810 (Core) 

CDH 6.3.0 (Parcel)

100+

二、迁移范围

1.ZooKeeper整体
2.Yarn整体
3.Hdfs整体
4.Hive整体
5.Cloudera Manager Server

三、迁移步骤

3.1 迁移zookeeper服务

在Hadoop集群中,Zookeeper主要用于保证Hadoop集群的高可用性,在进行Hadoop集群迁移的过程中,通常先迁移Zookeeper。

Zookeeper集群的平缓迁移主要思路是先扩展Zookeeper集群到新节点,然后下线旧节点,整个过程ZK集群可以持续提供服务。这种方式可以保证服务不中断。

1.通过cm的控制台添加新的节点到zookeeper集群中,保持服务停止状态。

迁移策略:CDH 集群整体平缓迁移的最佳实践_cloudera_02

2.通过cm控制台停止需要迁移的旧节点上的服务,登录主机上迁移旧节点上的数据到新添加的节点上对应目录下。

迁移策略:CDH 集群整体平缓迁移的最佳实践_重启_03

3.通过cm控制台删除旧节点,启动上面新添加的新节点。

4.重复上面的操作,可以迁移走集群的台zookeeper服务节点。

重点说明:zookeeper集群不能一次性完全迁移完,因为集群中有其他的服务依赖zookeeper服务,所以迁移完2台之后,需要重启集群中其他依赖的服务,如果迁移完所有的zookeeper集群之前没有重启服务,会导致依赖的服务没有更新访问zookeeper服务的信息导致服务整体失败。

重点提示:上面在重启hdfs集群的时候,当重启JournalNode节点时,一定等待一半以上的JournalNode和 active状态的 namenode数据完全同步后,再继续重启其他JournalNode,否则会导致 namenode宕机;

5.等待所有的依赖服务平滑重启完成之后,在迁移最后一台zookeeper服务节点,方式同上。

3.2  迁移Yarn服务

首先迁移ResourceManager,具体的方式如下:

1.通过cm控制台先停止备用的ResourceManager节点,删除此节点。

迁移策略:CDH 集群整体平缓迁移的最佳实践_cloudera_04

2.通过cm控制台添加新的ResourceManager节点,启动此服务节点。

3.通过cm控制台重启集群中的所有nodemanager节点和JobHistory Server服务节点。(依次滚动重启)

重点说明:然后这里同时需要重启或者替换依赖Yarn的服务了,这里需要重启的是hive和spark,如果不重启这些服务,服务没有异常,但是提交任务会失败;下面是hive执行计算的一个报错;

迁移策略:CDH 集群整体平缓迁移的最佳实践_大数据_05

4.通过cm控制台重启另一个ResourceManager节点,观察新添加的RM节点是否可以正常切换为主节点。

5.通过cm控制台停止另一个待迁移的节点,并删除此节点

6.通过cm控制台添加新的ResourceManager节点,启用此节点。

7.通过cm控制台重启集群中的所有nodemanager节点和JobHistory Server服务节点。(依次滚动重启)

8.通过cm控制台重启另一个ResourceManager节点,观察新添加的ResourceManager节点是否可以正常切换为主节点。

9.通过cm控制台部署客户端配置。

迁移策略:CDH 集群整体平缓迁移的最佳实践_大数据_06

10.上述步骤无异常,yarn主服务迁移完成,其他的nodemanager节点迁移就很方便了,通过cm控制台下线旧的节点,添加并启动新的服务节点即可。

11.最后依赖的服务还需要重启一次,然后通过cm控制台部署最新的客户端配置。

3.3 迁移HIVE服务

hive服务的迁移主要是Hive Metastore Server和HiveServer2,相对来说比较方便。两个服务的迁步骤相同。

1.通过cm控制台添加新的节点,并启动此节点。

2.通过cm控制台停止旧的节点,删除旧的节点。

3.如果要迁移多台,重复上面的操作即可。

重点提示:在迁移最后一台旧的 Hive Metastore Server服务之前,一定要重启或者更新其他依赖的服务的配置。

3.4 迁移HDFS服务

a.首先迁移JournalNode服务

1.通过cm控制台停止源主机的JournalNode服务,然后将编辑目录(参数dfs.journalnode.edits.dir 对应的配置)下的数据打包。

2.通过cm控制台添加目标新主机到为JournalNode服务。

3.登录主机上同步源JournalNode服务主机上打包的数据到目标新主机相同目录下,注意目录(dfs.journalnode.edits.dir)需要手动创建,且要保持目录的权限和源主机下一致。

4.通过cm控制台从JournalNode服务中将源主机剔除掉。

5.通过cm控制台启动新主机上的JournalNode服务。

说明:新加的JournalNode服务在启动后目录(/hadoop/dfs/jn/ShareSdkHadoop)下没有in_use.lock文件,但是服务是正常启动,在任意一个namenode重启后才会产生此文件。

此时查看新启动的JournalNode服务日志的内容最后一条是

“INFO org.apache.hadoop.ipc.Server: IPC Server listener on 8485: starting”

6.通过cm控制台先重启namenode备节点。

7.通过cm控制台手动切换namenndoe主备。

迁移策略:CDH 集群整体平缓迁移的最佳实践_zookeeper_07

重点注意:如果集群的负载很高,可以通过控制集群资源的使用或者是在任务的低峰期切换,否则有很大风险切换失败。

8.通过cm控制台将 namenode 另一台备节点重启。(第7步中,原来主节点已经切换成备节点)。

9.然后重复上面的操作迁移集群中的其他JournalNode服务。

10.完成所有的JournalNode服务之后,逐台重启其他JournalNode来更新集群中所有的JournalNode的配置保持一致。

重点说明:重启JN服务的过程中,不要太过着急,要等主节点namenode和集群中其他存活的JN的N-1)/ 2个保持同步之后再做下一个重启操作,否则会导致namenode主节点挂掉。

b.迁移Namenode服务

1.通过cm控制台停止备节点的namenode和Failover Controller服务。

2.登录到服务主机上打包停止的nn节点的数据目录(dfs.namenode.name.dir)。

3.登录到服务主机上将打包的数据迁移到新的namenode节点下,数据解压到和原来namenode保持相同配置(dfs.namenode.name.dir)的数据目录下,新主机上目录需要手动创建。注意目录的权限要和老节点的一致。

4.通过cm控制台从hdfs集群删除停止的NameNode和Failover Controller服务。

说明:此时cm页面会有如下报错提示,可以先不用管,一会启用新的后会恢复。

迁移策略:CDH 集群整体平缓迁移的最佳实践_重启_08

5.通过cm控制台添加新的主机为NameNode和Failover Controller服务。

6.通过cm控制台修改新主机hdfs相关的配置,主要配置项如下截图

NameNode Nameservice、Quorum Journal 名称、dfs.ha.automatic-failover.enabled;

迁移策略:CDH 集群整体平缓迁移的最佳实践_重启_09

7.通过cm控制台重启新的NameNode和Failover Controller服务。

8.通过cm控制台依次滚动重启集群中其他所有依赖服务。

重点说明:这一步是为下一个NameNode节点的迁移做准备,如果不重启集群的相关依赖服务,会导致下一步在切换主的NameNode服务到新主机时,导致其他依赖服务没有更新关于NameNode的配置而无法正常访问hdfs,导致失败。

9.重复上面的步骤迁移另一个namenode服务。

3.5 Cloudera Manager Server 迁移

  1. 确定要安装 Cloudera Manager 的新主机。
  2. 在确认的主机上安装和老机器相同版本的cloudera-manager-server。
  3. 登录主机上复制旧主机上/var/lib/cloudera-scm-server/路径的全部内容到新主机上的相同路径。确保保留权限和所有文件内容。
  4. 复制旧主机上/opt/cloudera/parcel-repo目录下的*.parcel文件和*.parcel.sha以及manifest.json文件到新主机的相同目录,注意文件的权限保持一致。
  5. 更新/etc/cloudera-scm-server/db.properties包含数据库名称、数据库实例名称、用户名和密码。
  6. 更新所有agent的配置为新主机的ip;/etc/cloudera-scm-agent/config.ini,更新服务器主机属性到新主机名。
  7. 重启所有的主机的agent服务;systemctl restart cloudera-scm-agent。
  8. 停止旧主机的cloudera-scm-server。
  9. 启用新主机的cloudera-scm-server。
  10. 登录CM控制台,页面重启Cloudera Management Service。

迁移策略:CDH 集群整体平缓迁移的最佳实践_cloudera_10

至此,整个集群的服务完成了在线平滑迁移,整个过程集群保持可用状态。