elasticsearch学习(三):分布式

 

es的分布式思想跟现在流行的很多开发技术的分布式一个道理。一个es 搜索服务作为一个集群,集群中存在很多节点,一个节点就是一个搜索服务器。这么多节点中,会按照一定的机制推举出一个 master节点,该节点负责任务的分配,新增节点删除节点等等行为。

 

先讲分片。   引用:

分片(shard)工作单元(worker unit) 底层的一员,它只负责保存索引中所有数据的一小片。并且它自身也是一个完整的搜索引擎。我们的文档存储并且被索引在分片中,但是我们的程序并不会直接与它们通信。取而代之,它们直 接与索引进行通信的。

在 elasticsearch 中,分片用来分配集群中的数据。把分片想象成一个数据的容器。数据被存储在分片中,然后分片又被分配在集群的节点上。当你的集群扩展或者缩小时,elasticsearch 会自动的在节点之间迁移分配分片,以便集群保持均衡。

分片分为 主分片(primary shard) 以及 从分片(replica shard) 两种。在你的索引中,每一个文档都属于一个主分片,所以具体有多少主分片取决于你的索引能存储多少数据。

虽然理论上主分片对存储多少数据是没有限制的。分片的最大数量完全取决于你的实际状况:硬件的配置、文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间。

从分片只是主分片的一个副本,它用于提供数据的冗余副本,在硬件故障时提供数据保护,同时服务于搜索和检索这种只读请求。

索引中的主分片的数量在索引创建后就固定下来了,但是从分片的数量可以随时改变。

   在我本地新搭建的es服务上创建一个名为twitter的索引。该索引的功能type有一个叫 tweet。 通过之前安装的es-head访问http://localhost:9200/_plugin/head/ ,可以看到分片信息:

因为没有修改配置,es中一个索引默认有一组从分片,五个主分片。

 

在观察

一个索引有五个从分片没有被分配,五个已经被分配。原因是现在只有一台服务器,主分片都已经被自动分配到当前的服务器上,然后从分片的目的是为了备份数据,做故障转移,所以不会再本服务器上分配。这种情况下,es的集群健康值就是。如果此时,在本服务器上(或者其他服务器),启动一个 cluster.name 与之前启动的es 实例的cluster.name 相同的es实例,这五个没有被分配的从分配就会被自动分配过去。

结果如下:健康值也变成了

以上就是es集群 分布式 容错转移的介绍。

 

集群健康值 status:

 

posted @ 2016-09-24 14:52  像我这样的人  阅读(1233)  评论(0编辑  收藏  举报