2021-11-02

初识Elasticsearch


前言

随着企业对就近实时搜索的迫切需求,Elasticsearch 受到越来越多的关注,无论是阿里等互联网企业,还是华为等互联网+企业都对 Elasticsearch 有广泛的使用,但是目前开源版本的 Elasticsearch 在集群管控方面能力有限。


一、ES基本架构

1> 集群和节点
一个es集群是由一个或多和es节点组成的集合
在这里插入图片描述
每一个集群都有一个名字, 每个节点都有自己的名字, 如master, slave1, slave2…节点是可以存储数据, 参与索引数据等的独立服务。

2> 索引(类似于数据库里面的database)
索引是含有相同属性的文档集合,索引在es中是通过一个名字来识别的, 必须是英文字母小写, 且不含中划线。

3> 类型(相当于sql中的table)
一个索引可以定义一个或多个类型, 文档必须属于一个类型。

4> 文档(相当于sql中的一行记录)
文档是可以被索引的基本数据单位。

5> 分片
每个索引都有多个分片, 每个分片都是一个luncene索引。
分片的好处: 分摊索引的搜索压力, 分片还支持水平的拓展和拆分以及分布式的操作, 可以提高搜索和其他处理的效率。

6> 备份
拷贝一个分片就完成了分片的备份。
备份的好处: 当主分片失败或者挂掉, 备份就可以代替分片进行操作, 进而提高了es的可用性, 备份的分片还可以进行搜索操作, 以分摊搜索的压力。
ES在创建索引时, 默认创建5个分片, 一份备份, 可以修改, 分片的数量只能在创建索引的时候指定, 索引创建后就不能修改分片的数量了, 而备份是可以动态修改的。

二、实际运用

关于架构:

ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日递增 20+,索引:10分片,每日递增 1 亿+数据,每个通道每天索引大小控制:150GB 之内。

关于调优:

1、设计阶段调优
(1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引;
(2)使用别名进行索引管理;
(3)每天凌晨定时对索引做 force_merge 操作,以释放空间;
(4)采取冷热分离机制,热数据存储到 SSD,提高检索效率;冷数据定期进行 shrink操作,以缩减存储;
(5)采取 curator 进行索引的生命周期管理;
(6)仅针对需要分词的字段,合理的设置分词器;
(7)Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。

2、写入调优
(1)写入前副本数设置为 0;
(2)写入前关闭 refresh_interval 设置为-1,禁用刷新机制;
(3)写入过程中:采取 bulk 批量写入;
(4)写入后恢复副本数和刷新间隔;
(5)尽量使用自动生成的 id。

3、查询调优
(1)禁用 wildcard;
(2)禁用批量 terms(成百上千的场景);
(3)充分利用倒排索引机制,能 keyword 类型尽量 keyword;
(4)数据量大时候,可以先基于时间敲定索引再检索;
(5)设置合理的路由机制。

4、其他调优
部署调优,业务调优等。

关于Elasticsearch 搜索过程

搜索拆解为“query then fetch” 两个阶段。
1.query 阶段的目的:定位到位置,但不取。
步骤拆解如下:
(1)假设一个索引数据有 5 主+1 副本 共 10 分片,一次请求会命中(主或者副本分片中)的一个。
(2)每个分片在本地进行查询,结果返回到本地有序的优先队列中。
(3)第 (2)步骤的结果发送到协调节点,协调节点产生一个全局的排序列表。
2.fetch 阶段的目的:取数据。
路由节点获取所有文档,返回给客户端。

关于 Master 选举

1)Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含 Ping(节点之间通过这个 RPC 来发 现彼此)和 Unicast(单播模块包含一个主机列表以控制哪些节点需要 ping 通)这两部分;

(2)对所有可以成为 master 的节点(node.master: true)根据 nodeId 字典排序,每次选举每个节 点都把自己所知道节点排一次序,然后选出第一个(第 0 位)节点,暂且认为它是 master 节点。

(3)如果对某个节点的投票数达到一定的值(可以成为 master 节点数 n/2+1)并且该节点自己也选 举自己,那这个节点就是 master。否则重新选举一直到满足上述条件。

(4)补充:master 节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data 节点可以关闭 http 功能*。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值