Elasticsearch的集群分片迁移
在Elasticsearch中可以通过集群路由API _cluster/reroute来对集群中的分片进行操作,例如可以在集群中把一个分片从一个节点迁移到另一个节点,将未分配的分片可以分配到一个特定节点上等。不过要想完全手动,必须先把cluster.routing.allocation.disable_allocation参数设置为true,禁止ES进行自动索引分片分配,否则你从A节点把分片移到B节点,那么另一个节点的一个分片又会移到A节点。
请求:POST http://127.0.0.1:9200/_cluster/reroute
参数:{"commands": [{"move": {"index": "test", "shard": 0, "from_node": "node1", "to_node2"}}, {"allocate": {"index": "test", "shard": 1, "node": "node3"}}]}
一共有三种操作:移动(move)、取消(cancel)和分片(allocate)。下面分别介绍这三种情况:
1) 移动:把分片从一个节点移动到另一个节点。可以指定索引名和分片号。
2) 取消:取消分配一个分片。可以指定索引名和分片号。node参数可以指定在哪个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。
3) 分配:分配一个未分配的分片到指定节点,可以指定索引名和分片号。node参数指定分配到哪个节点。allow_primary参数将使一个新的空主分片被分配,如果有一份原始的分片副本(包括数据)的节点重新加入集群,分片副本数据将被删除:旧的分片副本将会被新的活动分片副本替换。
集群配置更新:系统允许对集群的配置进行更新。配置更新有两种状态,一是持久的,二是临时的。
请求:PUT http://127.0.0.1:9200/_cluster/settings
参数:{"persistent": {"discovery.zen.minimum_master_nodes": 2}}
上面的例子是持久更新配置,如果把参数persistent换成了transient,就是临时更新。