更新时间:2024-11-29 GMT+08:00

入服与退服实例

操作场景

部分角色实例以分布式并行工作的方式对外部业务提供服务,服务会单独保存每个实例是否可以使用的信息,所以需要使用FusionInsight Manager为这些实例执行入服或退服的操作,变更实例的业务可用状态方式。

不支持该此功能的实例,默认无法执行任务。

当前支持退服和入服操作的角色有:HDFS的DataNode、Yarn的NodeManager、HBase的RegionServer、Elasticsearch的EsNodeN、ClickHouse的ClickHouseServer、IoTDB的IoTDBServer、Doris的BE。
  • 默认情况下,当DataNode数量少于或等于HDFS的副本数时,不能执行退服操作。若HDFS副本数为3时,则系统中少于4个DataNode,将无法执行退服,Manager在执行退服操作时会等待30分钟后报错并退出执行。
  • 用户也可以在DataNode退服前,开启快速退服功能,此时当DataNode数量满足“dfs.namenode.decommission.force.replication.min”参数设置的值时,可以执行退服,系统将同时执行退服和添加HDFS副本数的操作。快速退服期间如果有写入数据操作,可能导致数据丢失,请谨慎操作。快速退服相关参数如下,可以在Manager界面的HDFS服务参数全部配置页面搜索查看:

    dfs.namenode.decommission.force.enabled:是否开启DataNode快速退服特性。设置为“true”表示开启。

    dfs.namenode.decommission.force.replication.min:DataNode快速退服特性场景下,Block满足退服条件的最小可用副本数量。取值范围1~3。

  • 由于Mapreduce任务执行时,会生成一些副本数为10的文件,此时若DataNode实例数少于10时,将无法进行退服操作。
  • 如果退服前,DataNode节点的机架数(机架数由各DataNode节点所配置的“机架”的名称数量决定)大于1;而退服部分DataNode后,剩余的DataNode节点的机架数变为1,则此次退服将会失败。所以需要在退服前评估退服操作对机架数的影响,以调整退服的DataNode节点。
  • 在退服多个DataNode时,如果每个DataNode存储的数据量较大,如果执行选择多个DataNode同时退服,则很有可能会因超时而退服失败。为了避免这种情况,建议每次退服仅退服1个DataNode,进行多次退服操作。
  • 在退服EsNodeN时,需要至少保留2个EsNode1,否则会退服失败。如果Elasticsearch中数据量较大,可能会因数据迁移到其他实例耗时过长而导致超时,为了避免这种情况,建议每次退服仅退服一个EsNode,进行多次退服操作。
  • ClickHouseServer退服前,请执行退服前检查。退服或入服约束如下:
    • 集群规模

      集群只有1个shard分片,无法进行退服。

      同一个shard分片下的多个节点副本必须一起退服或入服。

      集群分片信息可以使用:select cluster,shard_num,replica_num,host_name from system.clusters;查询获取。

    • 集群存储空间

      集群退服操作前,集群非退服节点磁盘空间需要满足存储所有退服节点的数据,并且各非退服节点的存储空间在退服后还能有大约10%的空间冗余,保证退服后剩余实例正常运行。

    • 集群状态

      若集群中存在故障的ClickHouseServer实例节点(包括要退服的节点和非退服节点),则无法进行退服。

    • 数据库

      若某数据库只存在于待退服实例节点上,则无法进行退服。需要在集群所有ClickHouseServer实例节点上创建该数据库。

      从退服开始到退服结束,禁止创建、删除、重命名数据库。

    • 本地非复制表

      若某本地非复制表只存在于待退服实例节点上,则无法进行退服。需要在非退服的任意一个节点上创建同名的本地非复制表。

      比如,当前集群2个分片,分片1下面有两个节点A和B,分片2下面有两个节点C和D。创建非复制表test的时候没有携带ON CLUSTER关键字,只在节点A上创建了该表。

      当前如果要退服分片1下面的A和B节点时,则不允许退服,需要在分片2的C或者D一个节点上创建表test后才能正常退服。

    • 复制表

      若某复制表只存在于集群的部分实例节点上,无法进行退服。需要在集群中不存在此复制表的所有实例节点上手工创建此复制表。

      比如,当前集群2个分片,分片1下面有两个节点A和B,分片2下面有两个节点C和D。创建复制表test的时候没有携带ON CLUSTER关键字,只在节点A和B上创建了该表。

      当前如果要退服分片1下面的A和B节点时,则不允许退服,需要在分片2的C和D节点上同时创建复制表test后才能正常退服。

    • 分布式表

      退服不支持分布式表自动迁移,建议退服前在非退服节点上重建分布式表。退服前,在非退服节点不重建分布式表本身不影响退服操作,只是可能影响后续业务操作。

    • 物化视图

      退服不支持物化视图自动迁移,建议在非退服节点上重建物化视图。若待退服节点物化视图未显示指定聚合表而是使用内嵌表的情况,无法进行退服。

    • 同步配置

      在退服或入服操作前后,有必要进行“同步配置”操作,确保数据的一致性。

    • Detached数据

      若待退服节点上的表进行过detach操作,在detached目录下还存在数据,则无法进行退服。需要先进行attach操作将detached目录下数据处理后再执行退服操作。

    • 排查分布式表写入业务

      退服前,排查业务侧,是否存在分布式表写入的业务。如果存在,请先停止分布式表写入业务,再进行退服操作,否则会导致退服过程一直循环,无法正常退服。

    • 表和视图

      从退服开始到退服结束,禁止创建、删除、重命名表或视图。

  • 当IoTDBServer数量少于等于集群配置的Region副本数(默认值为“3”)时,不能执行退服操作。
  • Doris的BE退服或入服约束
    • 退服后剩余正常BE节点数量大于等于任一表的副本数,否则会导致无法退服。
    • BE节点存储空间

      集群退服操作前,集群非退服BE节点磁盘空间需要满足存储所有退服BE节点的数据,并且各非退服BE节点的存储空间在退服后还能有大约10%的空间冗余,保证退服后剩余实例正常运行。

操作步骤

  1. DataNode节点退服前需要进行健康检查,步骤如下:

    1. 使用客户端用户登录客户端安装节点,并切换到客户端安装目录。
    2. 如果是安全集群,需要使用hdfs用户进行权限认证。
      source bigdata_env               #配置客户端环境变量 
      kinit hdfs                       #设置kinit认证 
      Password for hdfs@HADOOP.COM:    #输入hdfs用户登录密码 
    3. 执行hdfs fsck / -list-corruptfileblocks,检查返回结果。
      • 如果结果是“...has 0 CORRUPT files”,执行2
      • 如果结果不是“...has 0 CORRUPT files”,并返回损坏的文件名称,执行1.d
    4. 执行hdfs dfs -rm 损坏的文件名称,删除损坏的文件。

      删除文件为高危操作,在执行操作前请务必确认对应文件是否不再需要。

  2. 登录FusionInsight Manager。
  3. 选择“集群 > 服务”。
  4. 单击服务视图中指定的服务名称,并选择“实例”页签。
  5. 勾选指定的待退服角色实例。
  6. 在“更多”选择“退服”或“入服”。

    输入当前登录的用户密码确认身份,单击“确定”。

    勾选“我确定退服这些实例,并接受服务性能下降的后果。”,单击“确定”,执行相应的操作。

    实例退服操作未完成时在其他浏览器或窗口重启集群中实例对应的服务,FusionInsight Manager将提示停止退服,实例的“操作状态”显示为“启动”。实际上后台已将该实例退服,请重新执行退服操作同步状态。