实验过程中遇到了3个主分片,每个主分片有2个副本分片分配不平衡的情况,主要现象是3个主分片有2个在一台服务器上,但是有一个节点上3个分片全是副本分片,我尝试了网上的方法:
POST /_cluster/reroute
{
"commands" : [
{
"move" : {
"index" : "nginx", "shard" : 0,
"from_node" : "node1", "to_node" : "node2"
}
}
]
}
我在实验过程中,这种方法总是报错,报错的意思类似于“目的节点已经有了该索引的副本:
NO(the shard cannot be allocated to the same node on which a copy of the shard
所以不能迁移到该节点”,所以我采取了下面的方法:
先将副本数量改为0,改为0之后,就有一个节点(上面提到的三个分片副本全在一个节点的)空出来了,上面既没有分片也没有副本,这样ES会自动把这一个节点上的两个分片中的一个迁移到空出来的节点上:
PUT /nginx/_settings
{
"settings":
{
"index.number_of_replicas":0
}
}
执行完命令后,观察集群中分片状态,通过GET /_cat/shards?v可以看到nginx的分片状态正在进行迁移,shard1正在从es6迁移到es5
index shard prirep state docs store ip node
nginx 2 p STARTED 1174338 86.2mb 192.168.1.8 es6
nginx 1 p RELOCATING 1452177 102mb 192.168.1.8 es6 -> 192.168.1.7 1TyYhLxeQeyy2R2UNl35KQ es5
nginx 0 p STARTED 1455292 103.3mb 192.168.1.6 es4
隔一会再来查看一下:
index shard prirep state docs store ip node
nginx 2 p STARTED 1174338 86.3mb 192.168.1.8 es6
nginx 1 p STARTED 1466222 97.1mb 192.168.1.7 es5
nginx 0 p STARTED 1455292 103.3mb 192.168.1.6 es4
已经迁移完成,再把分片副本设置为2:
PUT /nginx/_settings
{
"settings":
{
"index.number_of_replicas":2
}
}
设置完成后,可以看到副本分片正在生成:
index shard prirep state docs store ip node
nginx 2 r INITIALIZING 192.168.1.7 es5
nginx 2 r INITIALIZING 192.168.1.6 es4
nginx 2 p STARTED 1174338 86.3mb 192.168.1.8 es6
nginx 1 p STARTED 1467220 97.2mb 192.168.1.7 es5
nginx 1 r INITIALIZING 192.168.1.6 es4
nginx 1 r INITIALIZING 192.168.1.8 es6
nginx 0 r INITIALIZING 192.168.1.7 es5
nginx 0 p STARTED 1455292 103.9mb 192.168.1.6 es4
nginx 0 r INITIALIZING 192.168.1.8 es6
隔一会再观察一下:
index shard prirep state docs store ip node
nginx 2 r STARTED 1468570 97.4mb 192.168.1.7 es5
nginx 2 r STARTED 1468764 97.3mb 192.168.1.6 es4
nginx 2 p STARTED 1468397 97.1mb 192.168.1.8 es6
nginx 1 p STARTED 1467296 97.3mb 192.168.1.7 es5
nginx 1 r STARTED 1467296 97.2mb 192.168.1.6 es4
nginx 1 r STARTED 1467277 97.2mb 192.168.1.8 es6
nginx 0 r STARTED 1470478 97.5mb 192.168.1.7 es5
nginx 0 p STARTED 1470365 104mb 192.168.1.6 es4
nginx 0 r STARTED 1470739 97.5mb 192.168.1.8 es6
全部OK了