Elasticsearch的集群介绍和搭建和集群脑裂现象探讨以及集群的读写原理
介绍:正常情况下,单机es可以用,但是我们还是需要关注下高可用,一般我们可以把es搭建成集群,2台以上就能成为es集群了。集群不仅可以提升系统的稳定性还能能实现海量数据存储的横向扩展。
一、elasticsearch集群搭建规则
1.例如我们现在有5个主分片,每个主分片还对应有一个备用分片,我们有三台服务器,部署的方式如下图,同样序号的分片不能再同一个服务器上,例如:服务器3挂了,但是服务器1和服务器2还是能够组成0,1,2,3,4五个分片,不会影响客户访问数据
二、elasticsearch集群搭建
es安装到Linux可查看这边博客:传送门
1.准备了三台服务器
2.首先删除elasticsearch中data里的nodes,每台服务器都要删除
rm nodes/ -rf
3.修改三台服务器es的elasticsearch.yml配置文件
vi elasticsearch.yml
# 配置集群名称,保证每个节点的名称相同,如此就能都处于一个集群之内了 cluster.name: imooc-es-cluster
# 每一个节点的名称,必须不一样 node.name: es-node1 # http端口(使用默认即可)
http.port: 9200
# 主节点,作用主要是用于来管理整个集群,负责创建或删除索引,管理其他非master节点(相当于企业老总),当置为true也表示有机会被选举成master,如果是false就不可能被选举成master节点
node.master: true
# 数据节点,用于对文档数据的增删改查
node.data: true
# 集群列表 发现对应的节点
discovery.seed_hosts: ["192.168.1.118", "192.168.1.119", "192.168.1.120"]
# 启动的时候使用一个master节点
cluster.initial_master_nodes: ["es-node1"]
4.当配置修改好后,使用下面的命令可以再次确认对应的配置
more elasticsearch.yml | grep
^
[^
#]
5.配置没有问题后到bin目录下启动elasticsearch,下面是对应的结果,证明配置成功了
./elasticsearch
6.之后通过上面三个ip的任意一个区连接es-head,就会出现下面图片所示内容,五角星代表主节点,圆圈代表从节点(如果不存现下面的场景可以检查下配置文件和防火墙是否关闭)
三、集群脑裂现象
1.什么是脑裂
如果发生网络中断或者服务器宕机,那么集群会有可能被划分为两个部分,各自有自己的master来管理,那么这就是脑裂。例如:服务器一是Master宕机了,此时服务器二就有可能被选举成Master,但是当服务器一恢复后,不会变成slave加入原先的集群,还是Master单独存在,之后服务器一就会被单独出来成为新的集群
2.脑裂解决方案
master主节点要经过多个master节点共同选举后才能成为新的主节点。就跟班级里选班长一样,并不是你1个人能决定的,需要班里半数以上的人决定。
解决实现原理:半数以上的节点同意选举,节点方可成为新的master。
discovery.zen.minimum_master_nodes=(N/2)+1
N为集群的中master节点的数量,也就是那些 node.master=true 设置的那些服务器节点总数。
3.ES 7.X
在最新版7.x中, minimum_master_node 这个参数已经被移除了,这一块内容完全由es自身去管理,这样就避免了脑裂的问题,选举也会非常快。
四、集群的读写原理
文档写原理
1.此时有三个节点,我们只会选择一个节点去做相应的操作,例如现在选择中间这个节点,该节点就会选择为es集群中的协调节点,协调节点的作用就是用来接收客户的请求的,接收到增、删、改的请求会对齐进行路由,例如现在有一个新增请求,es会做一个算法(hash算法)计算出该数据应该存在其那一个主分片上,现在选择存储到p1上,就会将数据通过路由转发到P1主分片上做一个对应的存储,之后主分片将数据同步到R1这个备份片上,当都存储成功后,便会将完成的结果发送给我们的协调节点,然后又协调节点告知客户端结果
,
文档读原理
1.此时有三个节点,我们只会选择一个节点去做相应的操作,例如现在选择第一个这个节点,该节点就会选择为es集群中的协调节点,协调节点的作用就是用来接收客户的请求的,会根据前端传过来的文档ID进行一个路由(通过hash算法),例如现在内容在P0上,就回到P0主分片上读取对应的内容,当用户再一次请求,该请求就会打到备用分片上,主备间有一个负载均衡的算法