Elastic Search
集群简单介绍
Elastic Search
节点重启
注意:本人使用的是 Elastic Search
的版本是 5.6.x
, 不同版本的操作 API 可能不一致
“1. 禁止分配分片
1 | curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' |
- 停止不必要的索引的创建,并发出同步刷新请求(非必要步骤)
在重启节点的过程中,可以不停止索引的创建;但是如果你停止不必要的索引的创建,并发出同步刷新请求的话,分片的回复将会更加快速
1 | curl -X POST "localhost:9200/_flush/synced" |
同步刷新操作只能是尽最大努力执行成功,如果有挂起的索引操作,这个操作将会失败,建议多次执行同步刷新请求
- 修改节点配置,重启节点
重启完节点之后可以查看节点是否重启成功
1 | curl -X GET "localhost:9200/_cat/nodes" |
- 恢复节点分配
1 | curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' |
- 等待节点回复
使用如下指令查看集群状态,知道集群状态从 yellow
变为 green
1 | curl -X GET "localhost:9200/_cat/health" |
- 重复上述步骤,重启其他需要重启的节点
Elastic Search
集群动态新增节点
1. 准备在新的机器启动 Elastic Search
节点
1.1 从原有节点上拷贝文件到新机器上
1.2 修改如下配置
示例如下:将 discovery.zen.minimum_master_nodes
加一,在 discovery.zen.ping.unicast.hosts:
中新增 host new.ip.3
1 | discovery.zen.minimum_master_nodes: 3 |
1.3 启动此节点
1 | ./bin/elasticsearch -d |
1.4 查看节点启动情况
1 | curl -X GET "localhost:9200/_cat/nodes" |
1.5 等待集群回复
使用如下指令查看集群状态,知道集群状态从 yellow
变为 green
1 | curl -X GET "localhost:9200/_cat/health" |
2. 逐个重启其他节点
具体步骤见上述重启步骤,重启 步骤3
中修改 config/elasticsearch.yml
文件
将 discovery.zen.minimum_master_nodes
加一,在 discovery.zen.ping.unicast.hosts:
中新增 host new.ip.3
1 | discovery.zen.minimum_master_nodes: 3 |
Elastic Search
集群动态下线节点
1. 告知集群分配分配的时候排除待下线节点
示例:排除 ip 10.0.0.1
1 | curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{ |
2. 查看分片分配情况
1 | $curl -XGET 'http://localhost:9200/_nodes/NODE_NAME/stats/indices?pretty' |
执行上述指令得到
1 | { |
可以看到查询结果中 indices
大部分都是0 ,这是因为步骤 1 排除了当前节点后触发了分配的重新分配
3. 查看集群健康情况
1 | curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty' |
确保集群集状态是 green
4. 重启现有节点
4.1 禁止分配分片
1 | curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' |
4.2 停止不必要的索引的创建,并发出同步刷新请求(非必要步骤)
在重启节点的过程中,可以不停止索引的创建;但是如果你停止不必要的索引的创建,并发出同步刷新请求的话,分片的回复将会更加快速
1 | curl -X POST "localhost:9200/_flush/synced" |
4.3 修改节点配置,重启节点
修改 config/elasticsearch.yml
文件
示例如下:将 discovery.zen.minimum_master_nodes
减一,在 discovery.zen.ping.unicast.hosts:
中去除 host new.ip.3
1 | discovery.zen.minimum_master_nodes: 2 |
重启完节点之后可以查看节点是否重启成功
1 | curl -X GET "localhost:9200/_cat/nodes" |
4.4 恢复节点分配
1 | curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' |
4.5 等待节点回复
使用如下指令查看集群状态,直到集群状态从 yellow
变为 green
1 | curl -X GET "localhost:9200/_cat/health" |
4.6 重复上述步骤,逐步重启其他线上节点
5. 下线节点
1 | ps -ef | grep elasticsearch |
6. 修改分片分配配置
删除配置 "cluster.routing.allocation.exclude._ip" : "new.ip.3"
1 | curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' |
注意
排除分配分片的节点时候除了指定 ip
还可以指定节点名称 name
以及 host
还可以指定ip 匹配规则
如:1
2
3
4
5
6
7
8
9
10
11curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
"transient" :{
"cluster.routing.allocation.exclude._ip" : "10.0.0.*"
}
}';echo
curl -XPUT localhost:9200/_cluster/settings -H 'Content-Type: application/json' -d '{
"transient" :{
"cluster.routing.allocation.exclude._name" : "NODE_NAME"
}
}';echo
参考资料
Rolling upgrades
How to remove node from elasticsearch cluster on runtime without down time
Shard Allocation Filtering
Elasticsearch: HOW-TO delete a (cluster) setting