我为我的Elasticsearch集群配置了多个path.data
。
官方文档指出,单个分片只使用一个路径,因此它永远不会跨多个路径分割。
我想找到一种方法来找出哪个节点用于某个特定分片(主要或副本)的路径,例如索引my-index主分片0 →节点RQzJvAgLTDOnEnmIjYU9FA路径的/ mnt / DATA1 。已尝试/_nodes
,/_stats
,/_segments
,/_shard_stores
,但没有任何路径引用。
答案 0 :(得分:1)
您可以通过指定level=shards
参数
GET index/_stats?level=shards
将返回这样的结构
"indices": {
"listings-master": {
"primaries": {
...
},
"total": {
...
},
"shards": {
"0": [
{
"shard_path": {
"state_path": "/app/data/nodes/0",
"data_path": "/app/data/nodes/0",
"is_custom_data_path": false
},
...
}
...
答案 1 :(得分:0)
不容易,但是通过做一个小的python脚本,我得到了想要的信息,这里是脚本
import json
with open('shard.json') as json_file:
data = json.load(json_file)
print(data.keys())
data=data['indices']
for indice in data:
#print(indice)
d1=data[indice]
shards=d1['shards']
#print(shards,type(shards),shards.keys())
for nshard in shards.keys():
shard=shards[nshard]
#print(shard,type(shard))
for elt in shard:
path=elt['shard_path']['data_path']
node=elt['routing']['node']
#print(repr(elt['shard_path']['data_path']))
#print("=========================")
print(indice,'\t',nshard,'\t',node,'\t',path)
他们会得到类似的东西
log-2020.11.06 1 oxx / datassd / elasticsearch / nodes / 0
log-2020.11.06 0 oxx / datassd / elasticsearch / nodes / 0
log-2020.11.05 1 oxx / datassd / elasticsearch / nodes / 0