Elasticsearch unassigned_shards 恢复
查看集群健康状态
curl -XGET http://192.168.0.xxx:9200/_cluster/health\?pretty
{
"cluster_name" : "my-elk",
"status" : "red",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 8965,
"active_shards" : 17905,
"relocating_shards" : 0,
"initializing_shards" : 4,
"unassigned_shards" : 33,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 10, #10个分片没有节点
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 21371,
"active_shards_percent_as_number" : 99.79377995764129
}
查看所有分片的状态curl -XGET http://xxxx:9200/_cat/shards
只显示未分配的节点:
curl -XGET http://xxxx:9200/_cat/shards | grep UNASSIGNED
curl -XGET "http://xxxx:9200/_cat/shards?h=index,shard,prirep,state,unassigned.*&pretty"|grep UNASSIGNED
查看节点为master的节点唯一标识:
curl -u "elastic:xxx" -XGET localhost:9200/_nodes/stats/process?filter_path=**.max_file_descriptors
curl -XGET http://xxxx:9200/_nodes/process?pretty
修复分片:
curl -H "Content-Type: application/json" -XPOST 'http://xxxx:9200/_cluster/reroute' -d '{
"commands" : [ {
"allocate" : {
"index" : "logstash-xxxx-nginx-access-2019.08.14", #index名称
"shard" : 3, #分片
"node" : "_r-lsF2hQ9GX7zr5CDfs2Q", # nodeid
"allow_primary" : true
}
}
]
}'
查看索引的分片情况:
-XGET http://xxxx:19200/logstash-sxs-nginx-access-2019.08.14/_search_shards
Elasticsearch通过 explain API 查看分片分配原因:
curl -XGET http://xxxx:9200/_cluster/allocation/explain?pretty
{
"index" : "logstash-nginx-access-2019.08.14",
"shard" : 3,
"primary" : true,
"current_state" : "unassigned",
"unassigned_info" : {
"reason" : "CLUSTER_RECOVERED",
"at" : "2019-08-14T19:00:37.791Z",
"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" : "LzmnMuNE1212SV6WQGirXwmiWQ",
"node_name" : "elk-01",
"transport_address" : "192.168.0.xx:9300",
"node_decision" : "no",
"store" : {
"found" : false
}
},
{
"node_id" : "_r-lsF2hQ9GX7zr5CDfs2Q",
"node_name" : "elk-02",
"transport_address" : "192.168.0.xx:9300",
"node_decision" : "no",
"store" : {
"in_sync" : false,
"allocation_id" : "i76umJ50S_Wh3OGS121Xe_5TQ"
}
}
]
}
查看特定为分配原因:
GET /_cluster/allocation/explain
{
"index": "indextest",
"shard": 0,
"primary": true
}
如果eplica shards有问题,将出问题的index的副本为0
PUT /my_index/_settings
{
"indextest" : {
"number_of_replicas" : 0
}
}
{
“acknowledged”: true
}
接下来再恢复回去:
PUT /my_index/_settings
{
"index" : {
"number_of_replicas" : 1
}
}
{
“acknowledged”: true
}
- node——节点,服务器运行的一个es实例,一般情况下一个es集群会有多个node。
- shard——分片,一个shard就是一个Lucene实例,是一个完整的搜索引擎。一个索引可以只包含一个shard,只是一般情况下会用多个分片,可以拆分索引到不同的node上,分担索引压力。 每个索引的主分片数,默认值是 5 。
- replicas——副本数量,e.g.如果索引indextest设置shard=2 replicas=2则表示其分片总数=2*(2+1)=6,每条数据都会有3条相同记录。
这个配置在索引创建后不能修改。 每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
es集群健康状态
- green 最健康得状态,说明所有的分片包括备份都可用。
- yellow 主分片(primary)可用,但是副本分片(replicas)不可用(或者是没有副本)。
- red 部分的分片可用,表明分片有一部分损坏,有的分片所有主副分片损坏/丢失的情况。此时执行查询部分数据仍然可以查到。
例如,我们可以创建只有 一个主分片,没有副本的小索引:
PUT /my_index
{
"settings": {
"number_of_shards" : 6,
"number_of_replicas" : 1
}
}
查看es集群的执行任务列表
curl -X GET http://localhost:9200/_cat/pending_tasks
比如批量删除所有的索引(但不会删除kibana.yml文件中配置的kibana.index索引,就是那些带.的索引)
[root@elk-node01 ~]# curl -XGET 'http://10.0.8.44:9200/_cat/shards'|awk '{print $1}'|uniq > /root/elk-index.tmp
[root@elk-node01 ~]# for i in $(cat /root/elk-index.tmp);do curl -XDELETE http://10.0.8.44:9200/$i;done