ES系列 - 2. 分布式特性
一、分布式与集群
什么是集群?
与集群相对的是单机。以传统数据库为例,单机就是搭建一个数据库服务器。当服务器访问量变大,单台服务器支撑不住时,就需要搭建集群环境。
集群环境,就是把单机服务器的数据复制一份到其他服务器上,并保持多台服务器之间的数据同步(一般采用主从方式)。集群环境下,每台服务器的数据是相同的,这样可以解决高并发环境下的数据访问速度问题。
什么是分布式?
与分布式相对的是集中式。以传统数据库为例,集中式就是把所有数据放在同一个数据库。当数据量增大时,如用户表里的数据达到数亿级别,数据的存储和访问都将达到瓶颈。这是就需要进行分布式架构。
分布式,就是把原本存储在一个数据库一张表里的数据,分配到不同数据库的表里。比如,把一亿条用户数据从一张表分配到多张表里。分布式环境下,每台服务器的数据是不同的,这样可以解决海量数据的查询效率问题。
二、ElasticSearch的集群与分布式特性
ElasticSearch在架构上就是基于分布式进行设计的,所以天生就是分布式的。所谓分布式,就是将原本集中在一处的数据,分散存储。ElasticSearch采用Shards(分片)的机制来实现分布式存储。
当我们在ElasticSearch里创建一个索引(Index)时,ElasticSearch会自动创建多个分片,每一个分片就是一个Lucene实例。当我们将一个文档放入索引时,ElasticSearch会根据文档Id(_id)自动路由到某个Shards上进行存储。相应的,当我们查找某个文档时,也可以通过文档Id轻松定位到它在那个Shards上。
当我们搭建ElasticSearch集群环境时,ElasticSearch会自动创建每个Shards的主从节点。默认数据存储在主节点上,并同步数据到从节点。
ElasticSearch的分布式及集群配置是透明的,当你在一台服务器上创建了一个ElasticSearch节点并启动时,ElasticSearch会创建一个空集群(集群内只有一个节点)。而当你在第二台服务器上再创建一个ElasticSearch节点时,只要配置配置文件里的cluster.name和第一台服务器相同,ElasticSearch便会自动将这两台服务器组成集群。