文章目录
- 单节点集群的概念
- 演示分片与副本
- 故障转移
- 第一个报错
- 第二个错误
- 第三个错误
单节点集群的概念
整个集群中, 只有一个节点, 就叫做单节点集群.
演示分片与副本
默认情况下, 索引的分片是1, 副本是1.
分配3个主分片和一个副本.
即这 三个分片, 都有一个副本 , 那么就会有6个分片.
由于linux的es集群不能只启动一个节点. 因此需要使用windows的es集群.
windows的es集群操作如下, 先只启动一个节点
https://javaweixin6.blog.csdn.net/article/details/122652436
创建索引
执行put请求
http://localhost:1001/users
请求体设置分片数据如下
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
执行get查询请求, 可以看到 分片的数量是3, 副本是1个.
集群现在的状态是拥有一个索引的单节点集群, 所有的3个主分片, 都被分配在node-1中.
浏览器安装elasticsearch-head插件来进行查看.
输入es的地址, 即可查看es的索引信息.
可以看到集群健康值是yellow, 代表主分片是正常的, 副本是不正常的.
因为现在只有一个节点,没有其他节点能分配副本数据
故障转移
当集群只有一个节点在运行时, 意味着会有单点故障的问题. 没有冗余的数据.
只要再启动一个节点, 可以防止数据丢失.
启动的第二个节点, cluster.name的名称要与第一个节点一致. 就会自动加入到集群中去.
如果启动了第二个节点, 集群会拥有两个节点的集群, 所有主分片和副分片都已经被分配.
第一个报错
此时启动第二个节点报错:
大致意思是之前加入过一个集群, 但是现在找不到之前的集群了.
原因是因为我删除过node1的data目录的数据, 解决办法是把node2和3也删除一下数据, 让其加入新的集群.
第二个错误
启动了第二个节点后, 副本还是没有分配. 显示如下,
经排查原因是我没有和视频中使用的es版本一致.
我使用的是7.16.2的版本 , 此版本会有一些内置的索引等原因导致users索引分配副本失败.
第三个错误
使用了7.8.0版本的es后, 集群的健康状态还是yellow .
并且日志显示如下 low disk watermark [85%] exceeded on/replicas will not be assigned to this node 我d盘分配的375gb, 也就是说 至少得剩余56.25gb才行, 现在只有44.7gb, 就导致es副本分配失败.
说明是磁盘超过85%的使用, 就不会再分配副本.
之后查阅此文章
https://blog.csdn.net/weixin_41058733/article/details/116900914
在yml中增加此配置
cluster.routing.allocation.disk.threshold_enabled: false
之后 再启动es , 终于成功
