1、实战遇到的问题问题描述:如何在一个四个节点的集群中,将主节点中的数据分散到其他节点中去,最后主节点没有数据? 问题细节:
2、问题解读抛开节点配置、集群部署层面的问题。 问题转化为:主节点&数据节点角色的节点如何转化为仅主节点? 3、模拟一把3.1 构建模拟环境模拟环境:4核、8GB 云服务器,Elasticsearch 7.12.0 版本 四节点。
集群部署完成未导入任何数据截图如下: 3.2 构造数据基于 kibana 样例数据(kibana_sample_data_ecommerce)构建索引。 新索引 kibana_sample_data_ecommerce_02
索引数据迁移基于 reindex 实现。 POST _reindex 数据构造完毕后,截图如下: 3.3 节点角色变化实战这里有个前提:能不能不停机转换节点角色? 看我们开篇的节点角色划分是没戏了。仅一个主节点,且更换角色的节点也是主节点。 3.3.1 步骤 1:将主节点&数据节点 node-022 的属性改为仅主节点。修改 elasticsearch.yml 的节点属性配置部分,如下: node.master: true 3.3.2 步骤 2:下线 主节点&数据节点 node-022。kill 掉对应的 elasticsearch 进程即可。 3.3.3 步骤 3:重新启动 主节点&数据节点 node-022。启动主节点后,报错如下: What?elasticsearch-node repurpose 是什么鬼? 3.3.4 步骤 4:执行 elasticsearch-node repurpose 实现角色转换前处理工作。bash-4.2$ ./bin/elasticsearch-node repurpose 以上指令及返回结果解读如下: (1)执行 elasticsearch-node repurpose 的前置条件是:当前节点已被停用。 (2)节点角色转换为仅主节点(确切的说是:候选主节点)。 (3)当输入 y 确认后,清理了 6 个索引(含 29 个分片)的数据。 3.3.5 步骤5:再次启动主节点 node-022这时候,节点能正常启动。 同时,其余节点会再建立与主节点 node-022 的连接。 节点分片会被重新分配,本质是:原有主节点上关联的副本分片提升为主分片,主分片再重新生成对应的副本分片。 查看下主节点角色,如下 node-022 变成了:仅主节点角色,已没有数据节点角色。 至此,主节点&数据节点变成了仅主节点。 3.3.6 角色变换小结第一:仅需要下线主节点,其他节点可以保持原有状态,无需下线。 第二:需要借助:elasticsearch-node repurpose 实现角色转换。 4 elasticsearch-node repurpose 原理4.1 elasticsearch-node 上线版本7.0.0 版本,也就意味着:7.0 之前的版本不具备该功能。 https://github.com/elastic/elasticsearch/pull/37979 4.2 elasticsearch-node repurpose 全局视角4.3 elasticsearch-node 工具作用以下是官方文档翻译: 可以在节点关闭时对它们执行某些不安全的操作。通过此命令可以调整节点的角色,不安全地编辑集群设置,并且即使灾难(disaster,集群异常)与磁盘上的数据不兼容,也可以在灾难(disaster)后恢复某些数据或启动节点。 https://www./guide/en/elasticsearch/reference/current/node-tool.html 4.4 elasticsearch-node 工具用法能实现的功能有很多,支持的参数也有好几个,诸如:
篇幅原因,建议直接参看官方文档。 我们契合本文主题,只讲解一下更换角色命令的使用。 4.5 elasticsearch-node repurpose 用法详解elasticsearch-node repurpose 的作用:如果节点曾经是数据节点或候选主机节点,但已被重新设计为不具有其中一个角色或改为其他角色,则可用于从节点中删除不需要的数据。 核心用途一句话概括:更改节点角色、删除不必要的数据。 使用该命令的核心四个步骤:
文中 3.3 节的实现就是用的这四个步骤。 提示:
5、小结类似问题,广靠猜没有用,实际操作一把,会发现“新大陆”。 之前我也不知道,7.X 版本的这个 elasticsearch-node 命令行工具非常人性化。 涉及到更换集群节点角色的场景,不妨一试! 欢迎留言交流。 推荐: |
|