Elasticsearch 天生的集群基因

145 阅读2分钟

Elasticsearch的分片机制

每个索引都可以被分片 相当于披萨切成好多块

主分片包含索引的数据,副本分片是主分片的备份,主分片因为物理机挂了,还可以使用两一个物理机的这个主分片的副本分片,同一个分片的主和副本不会放在同一个服务器.防止单点。

实践环境

# 配置集群名称,保证每个节点的名称相同,如此就能都处于一个集群之内了 
cluster.name: imooc-es-cluster 
# 每一个节点的名称,必须不一样 
node.name: es-node1 
# http端口(使用默认即可) 
http.port: 9200 
# 主节点,作用主要是用于来管理整个集群,负责创建或删除索引,管理其他非master节点(相当于企业老总) 
node.master: true 
# 数据节点,用于对文档数据的增删改查 
node.data: true 
# 集群列表 
discovery.seed_hosts: ["192.168.1.184", "192.168.1.185", "192.168.1.186"] 
# 启动的时候使用一个master节点 
cluster.initial_master_nodes: ["es-node1"]

关于脑裂

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

脑裂解决方案 master主节点要经过多个master节点共同选举后才能成为新的主节点。就跟班级里选班长一样,并不是你1个人能决定的,需要班里半数以上的人决定。 解决实现原理:半数以上的节点同意选举,节点方可成为新的master。 discovery.zen.minimum_master_nodes=(N/2)+1 N为集群的中master节点的数量,也就是那些 node.master=true 设置的那些服务器节点总数。

过半机制 重点在于大于 而不是大于等于 比如 5节点 2节点以上同意选举才会产生主节点

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

读写文档的原理

写操作

1、需要经过一个coordinating node 协调节点 
2、做路由转发到相应的节点 
3、同步副本的修改
4、回传到协调节点
5、响应客户端

读操作

1、需要经过一个coordinating node 协调节点 
2、做路由轮训读取主副分片的数据(负载均衡)
3、响应客户端