通过阿里云Elasticsearch(简称ES)的数据节点缩容功能,可以完成数据节点数量的变更。

注意
  • 集群数据节点缩容功能目前适用于后付费单可用区部署的阿里云Elasticsearch(简称ES)实例,暂不支持预付费和跨可用区部署的阿里云ES实例。并且只支持数据节点数量的变更,不支持专有主节点协调节点Kibana节点等类型的节点规格和磁盘缩容。
  • 集群数据节点缩容会触发集群重启,为保证您的业务不受影响,请确认后操作。

数据节点缩容

  1. 登录阿里云Elasticsearch控制台
  2. 实例列表页面,单击列表中的实例ID/名称链接。
  3. 在实例的基本信息页面,单击集群数据节点缩容集群数据节点缩容入口
  4. 集群数据节点缩容页面的缩容配置模块中,选择节点类型,并在节点列表中单击选择需要缩容的数据节点。缩容配置模块
  5. (可选)数据迁移。
    为保证数据的安全,进行缩容的数据节点中不应该存在数据。如果所选数据节点中有数据,系统会提示您进行数据迁移。迁移后所选节点上不再有任何索引数据,新的索引数据也不会被写入该节点。
    1. 单击提示栏中的数据迁移辅助工具数据迁移辅助工具
    2. 集群数据节点迁移页面,选择节点迁移方式。
      • 系统建议
        通过系统建议自动选择需要缩容的数据节点,需要勾选同意数据迁移协议。系统建议节点迁移方式
      • 自定义
        手动选择需要缩容的数据节点。自定义节点迁移方式
    3. 勾选同意数据迁移协议,并单击确认
  6. 数据迁移完成后,单击确定
    确定后,会触发集群重启。重启时,可在任务列表页面查看缩容任务的进度,重启成功后,即可完成集群数据节点的缩容。完成集群数据节点的缩容
    说明 数据迁移过程中,可以在任务列表页面单击停止,停止迁移任务。停止迁移任务

迁移回滚

数据迁移是一个周期很长的过程,在此期间集群状态和数据的变更可能会导致迁移失败,具体可在任务列表中查看。当数据迁移失败或者迁移完成后,需要对迁移节点进行回滚时,可通过以下方式进行操作。
  1. 获取迁移的节点IP列表。
    可以在任务列表查找,或者在Kibana控制台的Console中,使用以下ES API命令查找。
    // 获取集群配置信息。
    GET _cluster/settings
    返回结果如下。
    {
      "transient": {
        "cluster": {
          "routing": {
            "allocation": {
              "exclude": {
                "_ip": "192.168.***.***,192.168.***.***,192.168.***.***"
              }
            }
          }
        }
      }
    }                        
  2. 回滚迁移节点数据。
    Kibana控制台的Console中,使用以下命令进行数据回滚。
    • 回滚部分节点数据,配置中去掉需要回滚的节点,但要保留不回滚的节点。
      PUT _cluster/settings
      {
        "transient": {
          "cluster": {
            "routing": {
              "allocation": {
                "exclude": {
                  "_ip": "192.168.***.***,192.168.***.***"
                }
              }
            }
          }
        }
      }
    • 回滚全部节点数据。
      PUT _cluster/settings
      {
        "transient": {
          "cluster": {
            "routing": {
              "allocation": {
                "exclude": {
                  "_ip": null
                }
              }
            }
          }
        }
      }                            
  3. 校验是否完成数据回滚。
    Kibana控制台的Console中,通过GET _cluster/settings进行IP地址的二次确认,判断回滚任务的完成情况。您也可以通过观察相应节点是否被重新分配shard来判断。
    说明 数据迁移或回滚时,均可以通过GET _cat/shards?v查看任务状态。

常见问题

  • 该操作会导致当前集群资源(disk/cpu/mem)不足或shard分配异常。

    原因:集群在迁移或者缩容后,磁盘、内存、CPU等资源不足,不足以承担当前系统数据或者负载。

    解决方案:使用GET _cat/indices?v查看集群中索引的副本数是否超出缩容后的节点数,检查磁盘等资源是否可以在安全阈值内承担当前的数据量和请求量。如果不满足要求,需要进行集群升配

  • 集群当前状态异常或有未完成任务,请稍后再试。

    解决方案:使用GET _cluster/health查看集群健康状况,或者在智能运维中查看集群异常原因。

  • 集群节点有数据,请先执行迁移。

    解决方案:进行数据迁移操作,详情请参见数据节点缩容章节的第六步。

  • 保留节点数需大于2且大于当前节点数一半。

    原因:为保证集群的可靠性,保留的节点数必须大于2;为保证集群的稳定性,每次迁移或者缩容节点数不得超过当前数据节点数的一半。

    解决方案:如果不满足以上要求,需要重新选择迁移的节点或者进行集群升配

  • 当前ES集群配置不支持该操作,请检查ES配置。

    解决方案:使用GET _cluster/settings查看集群配置,查看是否存在不允许数据分配的配置。

  • auto_expand_replicas

    原因:部分用户使用了X-Pack提供的权限管理功能,在早期版本中,该功能对应的.security或者.security-6索引默认会使用"index.auto_expand_replicas" : "0-all",该配置会使得数据迁移或者节点缩容失败。

    解决方案:当您使用auto_expand_replicas索引时,建议参考以下方式修改。
    1. 查看索引配置。
      GET .security/_settings
      返回如下结果。
      {
        ".security-6" : {
          "settings" : {
            "index" : {
              "number_of_shards" : "1",
              "auto_expand_replicas" : "0-all",
              "provided_name" : ".security-6",
              "format" : "6",
              "creation_date" : "1555142250367",
              "priority" : "1000",
              "number_of_replicas" : "9",
              "uuid" : "9t2hotc7S5OpPuKEIJ****",
              "version" : {
                "created" : "6070099"
              }
            }
          }
        }
      }
    2. 选择其中一种方式修改配置。
      //方式一
      PUT .security/_settings
      {
        "index" : {
          "auto_expand_replicas" : "0-1"
        }
      }
      //方式二
      PUT .security/_settings
      {
        "index" : {
          "auto_expand_replicas" : "false",
          "number_of_replicas" : "1"
        }
      }
      注意 副本个数可以根据实际需要选择,但要保证至少有1个,且不大于可用数据节点数。