unassigned_shards一直无法分配

摘要:
Elasticsearch使用AllocationID的概念,这是区分不同分区的唯一标识符。AllocationID存储在碎片级元信息中。每个碎片都有自己的AllocationID。同时,集群级元信息记录了一个AllocationID集,它被认为是最新的碎片。在同步位置ID中调用此集合。如果由于网络或其他原因,主碎片和辅助碎片未同步,副本的碎片将被踢出同步位置ID。重新路由API提供了一个子命令allocate_stale_Primary,用于将旧分区分配给主分区。当所有碎片副本都不存在时,Elasticsearch还可以强制使用空碎片副本来分配主碎片,这意味着丢失与碎片相关的所有先前数据。

 

在多次重启节点时,主副分片0出现了无法分配的问题。

elasticsearch 使用 Allocation IDs 的概念,这是区分不同分片的唯一标识(UUIDS)。

Allocation IDs存储在 shard 级元信息中,每个 shard 都有自己的Allocation ID,同时集群级元信息中记录了一个被认为是最新shard 的Allocation ID集合,这个集合称为 in-sync allocation IDs。
如果由于网络或者其他原因,主副shard没有同步,那么副本的shard会将被从in-sync allocation IDs踢出。

猜想可能是出现了上述的问题。

解决

使用下面的命令进行查看:

curl -XGET localhost:9200/_cluster/allocation/explain?pretty

explain API 告诉我们为什么主分片处于未分配状态,同时还提供了基于每个节点上的更详细的分配信息。主节点在集群当前可用节点中无法找到同步的(in-sync)分片副本。

{
  "index" : "my_index",
  "shard" : 0,
  "primary" : true,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "NODE_LEFT",
    "at" : "2017-01-26T09:20:24.054Z",
    "last_allocation_status" : "no_valid_shard_copy"
  },
  "can_allocate" : "no_valid_shard_copy",
  "allocate_explanation" : "cannot allocate because all found copies of the shard are either stale or corrupt",
  "node_allocation_decisions" : [
    {
      "node_id" : "0ZJS1ffpRg-E_5L0Q0NnDA",
      "node_name" : "data5-3",
      "transport_address" : "192.168.1.108:9303",
      "node_decision" : "no",
      "store" : {
          "found": false
      }
    },
     {
      "node_id" : "0ZJS1ffpRg-E_5L0Q0NnDA",
      "node_name" : "data5-3",
      "transport_address" : "192.168.1.108:9303",
      "node_decision" : "no",
      "store" : {
          "found": false
      }
    },
    .......
    .......
    {
      "node_id" : "JSofMo_0TSieKnfI4HmEcQ",
      "node_name" : "data6",
      "transport_address" : "192.168.1.109:9300",
      "node_decision" : "no",
      "store" : {
        "in_sync" : false,
        "allocation_id" : "J3gygIvYT06tKSW5rYkGtw"
      }
    }
  ]
}

cannot allocate because all found copies of the shard are either stale or corrupt
从上面的结果中,可以看到在data6节点上可用的分片副本是陈旧的( store.in_sync = false )。启动拥有in-sync 分片副本的那个节点将使集群重新变为 green。如果那个节点永远都回来了呢?

reroute API 提供了一个子命令 allocate_stale_primary ,用于将一个陈旧的分片分配为主分片。使用此命令意味着丢失给定分片副本中缺少的数据。如果同步分片只是暂时不可用,使用此命令意味着在同步副本中最近更新的数据。应该把它看作是使群集至少运行一些数据的最后一种措施。在所有分片副本都不存在的情况下,还可以强制Elasticsearch使用空分片副本分配主分片,这意味着丢失与该分片相关联的所有先前数据。 不言而喻,allocate_empty_primary 命令只能用于最糟糕的情况,其含义很好理解。

使用命令进行恢复:

POST _cluster/reroute?pretty
{
	"commands": [
		{
			"allocate_stale_primary": {
				"index": "my_index",
				"shard": 0,
				"node": "data6",
				"accept_data_loss": true
			}
		}
	]
}


ELK出现unassigned_shards解决办法

elk-cluster一直处于red状态
解决方法
一,查看elasticsearch有3个UNASSIGNED状态的索引
1
2
3
4
5
6
7
8
[root@192-168-x-x ~]# curl -XGET 'http://192.168.x.xx:9200/_cat/shards' |grep UNASSIGNED
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0etl211-online-2017.07.21                                               
xxx11-online-2017.07.21                     0 r UNASSIGNED                              
xx-master201-online-2017.07.18              1 p UNASSIGNED                              
xx-master201-online-2017.07.18              1 r UNASSIGNED                              
100  415k  100  415k    0     0   107k      0  0:00:03  0:00:03 --:--:--  107k
二,删除有问题的索引
1
2
3
4
[root@192-168-x-x ~]#  curl -XDELETE  http://192.168.x.x:9200/xx-master201-online-2017.07.18
{"acknowledged":true}
[root@192-168-x-x ~]#  curl -XDELETE  http://192.168.x.x:9200/xx211-online-2017.07.21
{"acknowledged":true}
三,查看elk-cluster已变为绿色
总结
关于unassigned shards的问题,一般遇到这种情况都是——重启试试, 因为可能是网络通信问题会影响分片分配
另外也可以看看日志,报了什么错,有遇到过硬盘了满了,具体问题具体分析
不行的话,只能强制删除。
一,查看elasticsearch有3个UNASSIGNED状态的索引
 
[root@192-168-x-x ~]# curl -XGET 'http://192.168.x.xx:9200/_cat/shards' |grep UNASSIGNED  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0etl211-online-2017.07.21                                               xxx11-online-2017.07.21                     0 r UNASSIGNED                              xx-master201-online-2017.07.18              1 p UNASSIGNED                              xx-master201-online-2017.07.18              1 r UNASSIGNED                              100  415k  100  415k    0     0   107k      0  0:00:03  0:00:03 --:--:--  107k

二  删除有问题的索引

[root@192-168-x-x ~]#  curl -XDELETE  http://192.168.x.x:9200/xx-master201-online-2017.07.18
{"acknowledged":true}
[root@192-168-x-x ~]#  curl -XDELETE  http://192.168.x.x:9200/xx211-online-2017.07.21
{"acknowledged":true}
三,查看elk-cluster已变为绿色
总结
关于unassigned shards的问题,一般遇到这种情况都是——重启试试, 因为可能是网络通信问题会影响分片分配
另外也可以看看日志,报了什么错,有遇到过硬盘了满了,具体问题具体分析
不行的话,只能强制删除。
第一看集群状态:
1
curl -XGET 'http://localhost:9200/_cluster/health'
第二,看所有的shards:

curl -XGET 'http://localhost:9200/_cat/shards' | grep UNASSIGNED
第三,看unassignded shards:
1
curl -XGET 'http://localhost:9200/_cat/shards' | grep UNASSIGNED
 
 
 
重新索引
 
 POST /_reindex
  {
    "source": {
      "index": "alarm-2017.08.12"
    }
    , "dest": {
      "index": "alarm-2017.08.12.bak",
      "version_type": "external"
    }
  }

更好的教程https://www.datadoghq.com/blog/elasticsearch-unassigned-shards/?spm=a2c6h.12873639.0.0.278c2acfJx6Ufk
 

免责声明:文章转载自《unassigned_shards一直无法分配》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java-中的代理重新整理 .net core 实践篇—————领域事件[二十九]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

flutter json转字符串 字符串转json

=空&&jsonStr。长度˃0){//首先将json字符串转换为jsonMapjson=jsonDecode;//将json转换为modelfinalmodel=UserInfo.fromJson;returnmodel;}returnnull;}...

GIS中的数据库.gdb与.mdb的区别

Gdb是文件地理数据库,mdb是个人地理数据库,两者都是数据库文件类型。个人地理数据库是基于access数据库的个人数据库格式mdb,可存储不超过2G的文件,仅适用于Windows系统;文件数据库是保存在文件系统文件夹中的各种类型的GIS数据集的集合。请参阅文章“GIS中database.gdb和.mdb之间的区别是什么?”,m892832piczpec5。...

Python之路

Python之路引子与其感慨路难行,不如马上出发PythonPython之路(一):初识Python之路(二):基本数据类型(上)Python之路(三):基本数据类型(下)Python之路(四):函数介绍及使用Python之路(五):内置函数Python之路(六):迭代器,装饰器,生成器Python之路(七):字符串处理Python之路(八):基础模块(一)...

HPE Proliant DL380 GEN10服务器配置iLO 5/RAID/安装系统

1、 配置ILOIP:II。配置raid:按F10选择SmartStorageAdministrator以选择阵列卡,配置以创建阵列以选择硬盘(此处全选),选择“是”以配置raid(此处配置raid5),单击“完成”以查看现有raid III。安装系统:选择本地镜像以重新启动并等待...

Maven自定义jar包名

一、默认命名${project.artifactId}-${project.version}二、自定义包名${project.artifactId}-${project.version}-company三、自定义编码与时间戳˂!...

EasyExcel注解方式导出数据过程解析

具体使用示例链接:Yuque EasyExcelhttps://www.yuque.com/easyexcel/doc/write示例代码:publicclassStudentExportDto{@ExcelProperty(值={“学生信息”,“name”},索引=0)privateStringname@ExcelProperty...