- 单节点集群的概念
- 演示分片与副本
- 故障转移
- 第一个报错
- 第二个错误
- 第三个错误
整个集群中, 只有一个节点, 就叫做单节点集群.
演示分片与副本默认情况下, 索引的分片是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 , 终于成功