构建集群命令
启动es节点:
bin/elasticsearch -Ecluster.name=my_cluster -Epath.data=my_cluster_node1 -Enode.name=node1 -Ehttp.port=5200 -d
bin/elasticsearch -Ecluster.name=my_cluster -Epath.data=my_cluster_node2 -Enode.name=node2 -Ehttp.port=5200 -d
基本概念
Cluster State
记录集群的相关数据称为: cluster state,主要记录如下信息
· 节点信息,如节点名称,连接地址等
· 索引信息,如索引名称、配置等
· …
Master Node
· 可以修改 Cluster State 的节点叫做Master Node,一个集群只有一个存在
· cluster state 存储在每个节点上,master维护最新版本,并同步给其他节点
· master节点是集群所有节点选举出来的,可称为master eligible节点,相关配置:node.master:true : 这个节点是可选举的节点(默认true )
Coordinating Node
处理请求的节点称为Coordinating Node,该节点为所有节点的默认角色,不能取消
· 路由请求到正确的节点处理,比如创建索引请求到master节点
Data Node
存储数据的节点为 data 节点,默认节点都是data类型,相关配置:
· node.data:true
Cluster Health
GET _cluster/health
查看集群的健康状态:
green健康状态,所有主副分片正常分配
yellow 所有主分片正常分配,有副本分片未进行正常分配
red 有主分片未分配
高可用保证
服务可用性:
- 2个节点的情况下,允许一个节点停止服务
数据可用性
- 引入副本(Replication)解决
- 每个节点都有完备的数据
故障转移
node1: P0,R1
node2: P1,R2
node3: P3,R0
====> node1挂了 ===>
1、重新发起master选举,Node2变成master,此时P0没有,集群处于red状态
2、R0升级为主分片变成P0,集群处于yellow状态
3、在Node2中创建R0,集群处于green状态
====> 最终成为 ===>
node2: P1,R0,R2
node3: P2,P0,R1
文档分布式存储
通过某种算法实时计算,将文档映射到 分片上
计算分片公式:
- shard = hash(routing) % number_of_primary_shards
- hash算法保证均匀散列在分片中
- routing默认是文档id,可自行制定
- number_of_primary_shard是主分片数(这就是为什么分片术不能修改的原因)
倒排索引不可更改
· 好处:
- 不用考虑并发写文件问题,杜绝锁机制带来的性能问题
- 由于文件不再更改,可以充分利用文件系统缓存
- 利于生成缓存数据
- 利于文件压缩存储,节省磁盘空间
· 弊端: 写入新文档时,必须重新构建倒排索引文件,替换老的,导致文档实时性差