CentOS上的Elasticsearch 1.7.2
问题:当我的节点B和C出现故障时,我是否丢失了数据?
3节点集群:节点:A,B,C
A是主人(先设置好,然后就这样设计)。相关配置(在所有节点上,然而发生的事情是B丢失了网络访问并且关闭了,结果发现C错误设置为number_of_replicas:1)
node.master: true
node.data: true
index.number_of_shards: 5
index.number_of_replicas: 2
在A上,当其他两个节点都关闭时,我注意到" unassigned_shards"是6.因为我的碎片数是5,这对我来说意味着我有一个问题:
# curl -XGET http://localhost:9200/_cluster/health?pretty=true
{
"cluster_name" : "elasticsearch-PROD-prod",
"status" : "red",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 4,
"active_shards" : 4,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 6,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0
}
果然,在下面的分片列表中,有一个主要分片(#1)是UNASSIGNED
# curl -XGET http://localhost:9200/_cat/shards
index_v3_PROD 4 p STARTED 22578283 12.7gb 10.208.131.56 PROD-node-3a
index_v3_PROD 4 r UNASSIGNED
index_v3_PROD 0 p STARTED 22572884 12.7gb 10.208.131.56 PROD-node-3a
index_v3_PROD 0 r UNASSIGNED
index_v3_PROD 3 p STARTED 22579159 12.8gb 10.208.131.56 PROD-node-3a
index_v3_PROD 3 r UNASSIGNED
index_v3_PROD 1 p UNASSIGNED
index_v3_PROD 1 r UNASSIGNED
index_v3_PROD 2 p STARTED 22580877 12.7gb 10.208.131.56 PROD-node-3a
index_v3_PROD 2 r UNASSIGNED
请注意,碎片1是" p"并且未获取通知。这看起来很吓人!
然后我使用了一个重新路由命令将它分配给A,它确实如此。
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{"commands" : [ {
"allocate" : {
"index" : "index_v3_PROD",
"shard" : 1,
"node" : "PROD-node-3a",
"allow_primary" : true
}
}
]
}'
但是碎片1从一个非常小的尺寸开始然后有点增长(我认为从新数据发送到ES)。我非常感觉碎片1的数据丢失了。
有人可以确认分片1数据是否看起来可疑/丢失(或不是)?
答案 0 :(得分:0)
Andrei将此作为评论发布,而不是答案,所以我会:
是的,数据丢失了。
具有" allow_primary":true且该分片不可用的主分片的重新路由命令将从头开始分片,为空。您应该已尽一切可能将该节点带回群集中。
这里的脚注是:我们不知道如何恢复群集节点。其他2个节点显示了这种状态:
# curl -XGET http://localhost:9200/_cluster/health?pretty=true
{
"error" : "MasterNotDiscoveredException[waited for [30s]]",
"status" : 503
}
我们找不到任何诊断步骤,日志显示我们没什么用处。两个节点都报告了这个问题(总共有3个,所以所需的碎片的唯一副本就是这两个中的一个)。
我们验证了所有网络通信,并重新启动了其他节点,但它们没有连接到群集。
最终,我们建立了一个新的3节点集群,并且更好地确保每个节点都存在每个节点,以便集群可以承受丢失2个节点。