1、ES如何实现分布式高并发全文检索?为什么要实现集群?
ES核心存放是索引。
由于在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题。
如果ES实现了集群的话,会将单台服务器节点的索引文件使用分片技术,分布式存放在多个不同的物理机器上。
从而可以实现高可用、容错性等。
分片技术:将数据拆分成多台节点进行存放。
2、简单介绍ES分片Shards分片技术?ES是如何解决高并发?
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用分片机制、集群发现、分片负载均衡请求路由。
Shards分片:代表索引分片,ES可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,
分布到不同节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
Replicas分片:代表索引副本,ES可以设置多个索引的副本,副本的作用一是提供系统的容错性,
当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高ES的查询效率,
ES会对自动搜索请求进行负载均衡。
number_of_shards: 5 主分片
number_of_replicas: 1 副分片
在ES中每一个主分片都会对应一个副分片,如果已经定义好了主分片的数量,就不能再改主分片的数量。
3、为什么ES主分片对应的备份分片不在同一台节点存放?
每一个主分片为了实现高可用,都会有对应的备份分片,主分片对应的备份分片不能不能存放同一台服务器上,主分片可以和其 他备份分片存放在同一node节点上。
单台服务器是没有备用分片的。
在节点服务器上,既可以存放主分片也可以存放备用分片。
分片算法:节点的平方就可以了。
4、索引的主分片定义好后为什么不能作修改?
数据路由:当客户端发起创建document的时候,ES需要确定这个document放在该index哪个shard上。
路由算法:shard = hash(routing) % number_of_primary_shards
如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据。
在查询的时候,底层根据文档id%主分片数量获取分片位置。此时如果更改主分片数量则无法查询数据的。
5、ES如何实现高可用容错方案?