Elasticsearch版本:6.0
一、ES的集群
由一个或多个相同cluster.name的节点组成,共同承担数据和负载的压力。
被选举的主节点将负责管理集群范围内的所有变更,如增加/删除索引、增加/删除节点等,但是不涉及文档级别变更和搜索等操作。
请求可以发送到集群中的任何节点上,每个节点都知道任意文档所处的位置,并且能把请求直接转发到存储我们所需文档的节点,它都能负责从包含我们所需文档的节点收集回数据,并将最终结果返回给客户端。
二、ES的分片
ES添加数据用到的索引实际上指向了一个或者多个物理分片的逻辑命名空间。
一个分片是一个底层的工作单元,保存了一部分数据,一个分片是一个Lucene实例。
索引内任何一个文档都归属于一个主分片,所以主分片的数目决定着索引能保存的最大数据量。
一个副本分片是一个主分片的拷贝,作为保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
索引建立的时候就确定了主分片数,但是副本分片可以随时修改,
分片创建方法:(索引名为test,分配了3个主分片和一个副本分片,每个主分片有一个副本分片)
PUT /test
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
三、单机环境
此时的ES健康状态status字段是yellow,因为副本没有被分配到任何节点上。
四、水平扩容
1、启动第二个节点,只要cluster.name和第一个节点相同,就会自动发现集群并加入,如果是不同机器,需要配置一个可连接到的单播主机列表。
此时3个副本被分配到NODE2,所有被索引的文档都会保存在主分片上,然后被并行复制到对应副本分片上,保证我们既可以从主分片又可以从副本分片上获取文档。
2、自动第三个节点,集群会为了分散负载而对分片进行重新分配。(最多可以启用6个节点有效)
副本分片数是可以在运行的集群上动态调整的
把分片增加到2
PUT /blogs/_settings
{
"number_of_replicas" : 2
}
此时的集群分片状态如下
五、节点故障
关闭主节点,集群首先会选举一个新的主节点,新的主节点再立即把在NODE2和NODE3对应的副本分片提升为主分片,此时集群状态变为yellow。
重启主节点,集群可以将确实的副本分片再次分配,如果NODE1依然拥有之前的分片,它将尝试重用他们,同时仅从主分片复制发生了修改的数据文件。