当你安装部署好es集群时,发现启动无报错,但是用es-head连接的时候,发现连接不上,出现error,提示服务不可用:
[2022-01-19T10:11:33,271][WARN ][r.suppressed ] path: /_stats, params: {}
org.elasticsearch.cluster.block.ClusterBlockException: blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];
at org.elasticsearch.cluster.block.ClusterBlocks.globalBlockedException(ClusterBlocks.java:161) ~[main/:?]
at org.elasticsearch.action.admin.indices.stats.TransportIndicesStatsAction.checkGlobalBlock(TransportIndicesStatsAction.java:70) ~[main/:?]
at org.elasticsearch.action.admin.indices.stats.TransportIndicesStatsAction.checkGlobalBlock(TransportIndicesStatsAction.java:47) ~[main/:?]
at org.elasticsearch.action.support.broadcast.node.TransportBroadcastByNodeAction$AsyncAction.<init>(TransportBroadcastByNodeAction.java:256) ~[main/:?]
at org.elasticsearch.action.support.broadcast.node.TransportBroadcastByNodeAction.doExecute(TransportBroadcastByNodeAction.java:234) ~[main/:?]
at org.elasticsearch.action.support.broadcast.node.TransportBroadcastByNodeAction.doExecute(TransportBroadcastByNodeAction.java:79) ~[main/:?]
at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:173) ~[main/:?]
at org.elasticsearch.action.ingest.IngestActionFilter.apply(IngestActionFilter.java:82) ~[main/:?]
at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:171) ~[main/:?]
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:145) ~[main/:?]
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:87) ~[main/:?]
at org.elasticsearch.client.node.NodeClient.executeLocally(NodeClient.java:75) ~[main/:?]
at org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java:64) ~[main/:?]
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403) ~[main/:?]
at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1226) ~[main/:?]
at org.elasticsearch.client.support.AbstractClient$IndicesAdmin.stats(AbstractClient.java:1547) ~[main/:?]
at org.elasticsearch.rest.action.admin.indices.RestIndicesStatsAction.lambda$prepareRequest$17(RestIndicesStatsAction.java:148) ~[main/:?]
at org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:82) [main/:?]
at org.elasticsearch.rest.RestController.executeHandler(RestController.java:243) [main/:?]
at org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:200) [main/:?]
at org.elasticsearch.http.HttpServer.dispatchRequest(HttpServer.java:113) [main/:?]
这个问题导致的原因有很多,有些网友说是由于elasticsearch.yml的node.name
没有指定,还有些说的将旧索引的/data/nodes目录删除,但这些都尝试过了,没啥用。对于一个新的es集群来说,需要创建一个索引,不然空集群状态下,es-head无法通过调用elasticsearch的stats接口检测,因为没有索引供你检测。我的就是这个问题。创建一个新索引之后,问题解决:
http://localhost:9200/blog
{
"mappings":{
"article":{
"properties":{
"id":{
"type":"long",
"index":true
},
"title":{
"type":"text",
"index":true,
"analyzer":"standard"
},
"content":{
"type":"text",
"index":true,
"analyzer":"standard",
"store":true
}
}
}
}
}
上面出现unassigned 未分配分片,需要你创建索引时自定义指定副本数,主备分片一般不会在同一索引数据节点上。当然如果你机器上有多个数据节点,可能会将主备都分配到这台机器上的不同数据节点上,这样可能会提高丢数据风险(万一磁盘损坏,你主备数据都丢了就尴尬了)