Kibana4后台数据丢失后恢复

Posted by Mr.Zhou on March 7, 2019

背景

某机房老es集群下线,移除所有数据节点,保留1台master node服务器,原因是老es集群kibana4上仍保留有所有产线elk查询流量入口,暂时还不能下线。

img

问题

老es集群data node下线后,kibana4首页无法打开,浏览器f12显示链接出现503: img

登录kibana服务所在机器,发现kibana进程未开启,手工后台开启后,5601端口仍然未出现,直到前台启动后,错误信息才输出到控制台上:

{"name":"Kibana","hostname":"es-node-01","pid":46228,"level":30,"msg":"Elasticsearch is still initializing the kibana index... Trying again in 2.5 second.","time":"2019-03-07T08:08:16.985Z","v":0}

网上搜了下,原来是kibana4缺失了.kibana这个数据索引,所以导致了Kibana4进程无法启动。这才意识到把数据节点下线后,kibana4的数据索引也丢了。

缓解

  1. 立即将es data nodees服务再次启动,所有.kibana索引均从原先的unassgin状态,分别到各自所在的node上;

  2. 修改master node配置文件,将其既充当master node,又充当data node

  3. 关闭es自置位功能,防止后面对分片手工置位后,es自动将其他分片置位以保持分片置位平均对功能;
    PUT /_cluster/settings
    {
     "transient": {
    "cluster.routing.allocation.enable": "none"
     }
    }
    
  4. 开始手工调整主分片置位,将所有.kibana索引置位至原master节点:
    POST /_cluster/reroute
    {
     "commands" : [
         {
             "move" : {
                 "index" : ".kibaba", "shard" : 0,
                 "from_node" : "elastic_inst8", "to_node" : "elastic_inst1"
             }
         }
     ]
    }
    
  5. 由于稍后只保留一个data node,也就意味着无法在master/data node上置主分片及副本,需要将副本关闭,接口可参照官网
    PUT /.kibana/_settings
    {
      "number_of_replicas": 0
    }
    

    注:如果需要关闭所有索引的副本,可执行以下命令,但必须慎用,因为如果再要开启副本,对于索引量较大的索引,全部复制操作会消耗大量时间:

    PUT /_settings
    {
      "number_of_replicas": 0
    }
    
  6. 当前主分片应该已经置位到了master/data node,数据迁移完毕,可以安心关闭老data node了。 img

确认置位成功后,再次开启自动置位功能:

PUT /_cluster/settings
{
 "transient": {
   "cluster.routing.allocation.enable": "all"
 }
}

后记

这已经是下老es集群后出现的第二例问题了,还好这个问题处理起来还算容易,但还是暴露了我们做变更操作不够谨慎的问题:

  • 删除操作前必须确认所有数据是否已经备份(这边的数据不仅包含了应用程序数据,还包括了系统数据)