后端开发之Elasticsearch篇----es集群

集群

搭建集群

现在我们有es1,es2,es3这3台机器
分别修改三台机器的elasticsearch.yml配置文件

# 配置集群名称,保证每个节点的集群名称相同,如此就能都处于一个集群之内了
cluster.name: es-cluster

# 每一个节点的名称,必须不一样
node.name: ${你定义的节点名称,eg:es-node1}

# http端口,一般使用默认就可以了
http.port: 9200

# 定义主节点功能,作用主要是用于管理整个集群,负责创建或者删除索引,管理其他非master节点
# 当这个节点定义了这个属性后,即使一开始这个节点不是主节点,当master宕机后,这个节点可以
# 参与master的选举
node.master: true

# 数据节点,用于对文档数据的增删改查
node.data: true

# 集群列表,假设es-node1是101,es-node2是102,es-node3是103
discovery.seed_hosts: ["192.168.0.101","192.168.0.102","192.168.0.103"]

# 启动的时候使用的一个master节点
cluster.initial_master_nodes: ["es-node1"]

然后分切启动3台机器的elasticsearch就可以了,其实上面的配置只有node.name这个属性是不一样外,其他配置都基本一样

集群脑裂现象

如果发生网络中断或者服务器宕机,那么集群会有可能被划分为两个部分,各有自己的master来管理,这就是脑裂

脑裂的解决方案
master主节点要经过多个开启了master功能的节点的共同选举才能成为新的主节点。
解决原理:半数以上的节点同意选举,节点方可成为新的master

  • discovery.zen.minimum_master_nodes=(N/2)+1
    N为集群中开启了master功能的节点的数量,也就是node.master: true设置的那些服务器节点数量

但在es7.x中,minimum_master_node这个参数已经被移除了,这一块内容完全由es自身去管理,这样就避免了脑裂的问题,选举也会非常快。

es读写原理

假设我们现在有三个节点es1,es2,es3,集群中有一个索引shop,有3个shard,每个shard有1个replica
es1: p1,p2
es2: p0,r1
es3: r0,r2

写原理

当client端向集群发起请求的时候会随机在3台机器中选一个作为对接的节点(coordinating node 协调节点)这里假设选中了es2,由协调节点计算要写入的文档应该放到哪个shard上面(根据一些特殊的算法),假设发到p2这个shard中,协调节点将会跳转到es3中,在r1中写入,然后再跳转到es3中写入到p2的副本分片r2(同步数据),最后再跳转回协调节点es2,返回给client端一个响应

读原理

和写原理一样,先是选中一个协调节点,确定读取的数据是属于哪个shard的,然后可以从这个shard的主分片上读,也可以从副本分片上读(如果这次是主分片,那么下次可能就是副本分片了,属于一种负载均衡),然后有协调节点跳转到分片所在的节点上读取数据,得到的数据无论在哪里都要先将数据返回到协调节点上,再由协调节点响应client端时带到client上去

发布了118 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/105011671