Elasticsearch概念
Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎。其概念可以描述为三点:
1)、分布式的实时文件存储,每个字段都被索引并可被搜索
2)、分布式的实时分析搜索引擎
3)、可以扩展到上百台服务器,处理PB级结构化或非结构化数据
Elasticsearch集群
Elasticsearch主要的使用场景为对日志的存储以及对日志的即席查询与分析,既然说到存储,那么对于海量的日志的存储也一定是在分布式系统中存储的,在该分布式系统里面,可以通过多个elasticsearch运行实例组成一个集群,这个集群里面有一个节点叫做主节点(master),elasticsearch是去中心化的,所以这里的主节点是动态选举出来的,不存在单点故障。在同一个子网内,只需要在每个节点上设置相同的集群名,elasticsearch就会自动的把这些集群名相同的节点组成一个集群。节点和节点之间通讯以及节点之间的数据分配和平衡全部由elasticsearch自动管理。对于这些节点来说,一个节点就是集群中的一个服务器,作为集群的一部分,它会存储数据,参与集群的索引和搜索功能。一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。因此,在外部看来elasticsearch就是一个整体。
Elasticsearch数据的存储
在elasticsearch里它支持多个索引。优点类似于关系数据库里面每一个服务器可以支持多个数据库是一个道理,在每一索引下面又可以支持多种类型,这又类似于关系数据库里面的一个数据库可以有多张表一样。但是本质上和关系数据库还是有很大的区别,我们这里暂时可以这么理解。一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。Elasticsearch它会把一个索引分解为多个小的索引,每一个小的索引就叫做分片。分片之后就可以把各个分片分配到不同的节点中去。同时Elasticsearch的每一个分片都可以有0到多个副本,而每一个副本也都是分片的完整拷贝,好处是可以用它来增加速度的同时也提高了系统的容错性。一旦Elasticsearch的某个节点数据损坏或则服务不可用的时候,那么这个时就可以用其他节点来代替坏掉的节点,以达到高可用性。同时,海量的数据存储我们还经常考虑的一件事情就是数据的负载均衡,elasticsearch当有节点加入或退出时,它会根据机器的负载对索引分片进行重新分配,当挂掉的节点再次重新启动的时候也会进行数据恢复。
其和关系型数据库的存储的对比关系如下:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch-> Indices -> Types -> Documents -> Fields