记一次ES节点扩容、数据迁移实践 | 您所在的位置:网站首页 › es集群reroute › 记一次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:old3、将所有索引设置只分配到带有old标签的节点4、将不怎么使用的索引close5、将新增的data节点加入到集群中,并设置新的tag:new6、修改索引template,新建的索引设置新建到tag为new的节点上。7、在业务低峰期分批将之前在old节点上的索引迁移到new节点上。 实践步骤 1、分离master节点查看当前master节点: 查看集群中的所有索引,暂时关闭一批历史不需要搜索使用的索引 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节点状态: 查看个节点tag: 重启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":""}' |
CopyRight 2018-2019 实验室设备网 版权所有 |