ElasticSearch: Unassigned Shards, how to fix?

前端 未结 24 1252
悲&欢浪女
悲&欢浪女 2020-12-04 05:03

I have an ES cluster with 4 nodes:

number_of_replicas: 1
search01 - master: false, data: false
search02 - master: true, data: true
search03 - master: false,          


        
24条回答
  •  北荒
    北荒 (楼主)
    2020-12-04 05:47

    Elasticsearch automatically allocates shards if the below config is set to all. This config can be set using a rest api as well cluster.routing.allocation.enable: all

    If even after application of the below config, es fails to assign the shards automatically, then you have to force assign the shards yourself. ES official link for this

    I have written a script to force assign all unassigned shards across cluster.

    below array contains list of nodes among which you want to balance the unassigned shards

    #!/bin/bash
    array=( node1 node2 node3 )
    node_counter=0
    length=${#array[@]}
    IFS=$'\n'
    for line in $(curl -s 'http://127.0.0.1:9200/_cat/shards'|  fgrep UNASSIGNED); do
        INDEX=$(echo $line | (awk '{print $1}'))
        SHARD=$(echo $line | (awk '{print $2}'))
        NODE=${array[$node_counter]}
        echo $NODE
        curl -XPOST 'http://127.0.0.1:9200/_cluster/reroute' -d '{
            "commands": [
            {
                "allocate": {
                    "index": "'$INDEX'",
                    "shard": '$SHARD',
                    "node": "'$NODE'",
                    "allow_primary": true
                }
            }
            ]
        }'
        node_counter=$(((node_counter)%length +1))
    done
    

提交回复
热议问题