记一次ES节点扩容、数据迁移实践

简介: ElasticSearch、ES数据迁移、ES扩容

记一次ES节点扩容、数据迁移实践

背景

之前ES集群里的数据越来越大,日增500G日志数据,需要做一波扩容。

节点信息

目前集群中的节点信息如下:

节点 CPU、MEM DISK 磁盘使用率 节点角色
es01 16C 32G 2*1T 71% mdi
es02 16C 32G 2*1T 69% mdi
es03 16C 32G 2*1T 68% mdi
es04 16C 32G 2*1T 66% mdi
es05 16C 32G 2*1T 67% mdi
es06 16C 32G 2*1T 69% mdi

新增数据节点规格:

节点 CPU、MEM DISK 角色
es11 16C 32G 3*2T di
es12 16C 32G 3*2T di
es13 16C 32G 3*2T di
es14 16C 32G 3*2T di
es15 16C 32G 3*2T di
es16 16C 32G 3*2T di

新增master节点规格:

节点 jvm heap内存配置 角色
es010 2G mi
es011 2G mi
es012 2G mi

扩容思路

大致的扩容迁移思路如下:
1、将master从集群中分离出来
2、重启节点时给集群中老节点标记一个tag:old
3、将所有索引设置只分配到带有old标签的节点
4、将不怎么使用的索引close
5、将新增的data节点加入到集群中,并设置新的tag:new
6、修改索引template,新建的索引设置新建到tag为new的节点上。
7、在业务低峰期分批将之前在old节点上的索引迁移到new节点上。

实践步骤

1、分离master节点

查看当前master节点:

image.png | left | 747x118

查看集群中的所有索引,暂时关闭一批历史不需要搜索使用的索引
   ps:主要是需要重启节点,open的索引越少,集群恢复的越快

curl -s localhost:9200/_cat/indices


curl -XPOST localhost:9200/xxx_indices/_close
  ps:xxx_indices为需要关闭的索引名称


过滤基于时间的索引:
curl -s localhost:9200/_cat/indices?h=i | grep 2018.11.11 > /tmp/111
确认下索引:
cat /tmp/111
批量关闭索引:
for i in `cat /tmp/111`;do curl -XPOST localhost:9200/$i/_close;done

关闭集群reroute:

curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_cluster/settings -d '
{"transient":{"cluster.routing.allocation.enable":"none"}}'

分别修改集群中node001~node006的配置文件,滚动重启:

1、修改配置文件:
1)加入tag:
node.attr.tag: old
2)增加data节点,去除master配置:
node.master: false
node.data: true
3)修改discovery.zen.ping.unicast.hosts
增加master ip到该配置中。

2、依次重启node001~node004,每次重启等集群恢复到green状态。
curl localhost:9200/_cat/health?v
   ps:此处先不要重启当前集群的master节点,并且留一个给master节点互备。

此时的集群状态如下:
    node001~node004已经增加了新的master节点信息,且已经重启
    node005、node006还未增加,且未重启
    当前集群的master是node006
3、修改node005的配置,此时暂时先不要将该节点的master、data角色分离(只修改1和3步骤的配置);
   修改后重启,等待集群恢复green;
    此时该集群只有的master只可能在node005和node006,当前是在node006
4、修改node006的配置,然后重启;
    重启后master将转移到node005

配置好新的master节点es010、es011、es012

1、修改配置文件
1)增加master、去除data配置:
node.master: true
node.data: false

2)修改discovery.zen.ping.unicast.hosts
在该配置中需要将所有节点IP都加进去,包括即将新增的ES节点的IP。

2、启动这3个节点,等待加入集群。
可以tailf查看node005上的es日志。

通过以下api也能看到节点加入。
curl localhost:9200/_cat/nodes

节点状态:

image.png | left | 747x190

查看个节点tag:

image.png | left | 525x138

重启node005,将集群master转移到专属节点。

1、修改配置文件
1)增加data节点,去除master配置:
node.master: false
node.data: true

2、重启node005,并等待集群恢复green。
curl localhost:9200/_cat/health?v

至此,master节点已经从原有集群中分离,并且集群节点也都已做了标记tag。

2、修改索引的配置

确保当前集群中的索引只分配到当前标记为old的数据节点,不会分配到新增的数据节点。

curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_settings -d '
{"index.routing.allocation.require.tag":"old"}'

3、配置新数据节点

1、修改配置好配置:
1)加入tag:
node.attr.tag: new
2)增加data节点,去除master配置:
node.master: false
node.data: true
3)修改discovery.zen.ping.unicast.hosts
在该配置中仅需写master ip。

2、启动节点,等待加入。
curl localhost:9200/_cat/nodes?v

4、打开集群分配,并分批将数据迁移

#打开集群分配
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_cluster/settings -d '
{"transient":{"cluster.routing.allocation.enable":"all"}}'


#如果仅需迁移可以将require.tag改成new
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/xxx_indices/_settings -d '
{"index.routing.allocation.require.tag":"new"}'
  ps:可以写个for循环简单过滤出索引,然后在低峰期批量迁移。

#去除require,索引可以在集群所有节点间自由分配:
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/xxx_indices/_settings -d '
{"index.routing.allocation.require.tag":""}'
相关文章
|
11月前
|
运维 NoSQL 安全
【最佳实践】高可用mongodb集群(1分片+3副本):规划及部署
结合我们的生产需求,本次详细整理了最新版本 MonogoDB 7.0 集群的规划及部署过程,具有较大的参考价值,基本可照搬使用。 适应数据规模为T级的场景,由于设计了分片支撑,后续如有大数据量需求,可分片横向扩展。
1023 1
|
容灾 关系型数据库 数据库
将旧集群的数据备份迁移到新集群。
将旧集群的数据备份迁移到新集群。
131 1
|
21天前
|
运维 监控 安全
【TiDB原理与实战详解】2、部署与节点的扩/缩容~学不会? 不存在的!
TiUP 是 TiDB 4.0 引入的集群运维工具,TiUP cluster 用于部署、管理 TiDB 集群,支持 TiDB、TiFlash、TiDB Binlog 等组件。本文介绍使用 TiUP 部署生产环境的具体步骤,包括节点规划、工具安装、配置文件修改及集群部署等。同时,提供了常用命令和安全优化方法,并详细说明了如何进行集群的扩缩容操作,以及时区设置等维护工作。
|
2月前
|
关系型数据库 Serverless 分布式数据库
PolarDB产品使用问题之inplace方式是否支持集群所有节点的弹性扩容
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之多主集群配置多个全局只读节点最多可增加到多少个
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
弹性计算 关系型数据库 Serverless
PolarDB产品使用合集之只读结点的上下限 0 ~ 7 ,指的是如果不触发伸缩,就不会有serverless增加的只读结点
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
247 10
|
3月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之没有发生自动扩容,是什么导致的
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
存储 Java 数据库
clickhouse集群,双实例多副本集群部署
clickhouse集群,双实例多副本集群部署
|
NoSQL Redis 数据中心
Redis 集群偶数节点跨地域部署之高可用测试
你搭建过偶数节点的 Redis 集群吗?有没有想过它是否具备高可用的能力?会不会脑裂呢?实践出真知!现在 docker 太方便了,搭一个集群模拟一下……
154 4
|
canal 存储 监控
分库分表如何数据迁移和扩容 具体如何操作?
分库分表如何数据迁移和扩容 具体如何操作?