※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
方案:
1.全量索引在晚上进行,不给线上业务库造成压力;
2.全量索引在定时任务周期内跑不完时,通过MapReduce方式进行,查到最大id,部署多台索引服务,分区间构建索引;
3.增量索引用canal解析binlog实时更新;
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
优化点:
0.硬件提升,采用SSD,大内存,多核CPU的机器;
1."number_of_replicas": 0,构建索引的时候,可以先关闭replicas,等索引建立完毕之后在建立副本;
2."refresh_interval": "10s",降低数据时效性,来获取索引吞吐量的提升;
3.禁用_all字段,减少一半的索引空间, "_all": {"enabled": false}; (_all字段是一个经过简单分词的string字段,会包含整个doc内容,一般有明确的搜索需求不会用这个字段);
4.用bulk批量写入,随着ES shard的增多,es的索引生成速度是可以随之上升的。为了满足每个shard都到达自己的极限,就要加大bulk size,从而保证给每个shard充足的数据;
5.translog优化:"translog": {
"sync_interval": "60s", --sync间隔调高
"durability": "async", -– 异步更新
"flush_threshold_size":"1g" --log文件大小
}
跟大多数分布式系统一样,es也通过临时写入写操作来保证数据安全。因为lucene索引过程中,数据会首先据缓存在内存中直到达到一个量(文档数或是占用空间大小)才会写入到磁盘。这就会带来一个风险,如果在写入磁盘前系统崩溃,那么这些缓存数据就会丢失。es通过translog解决了这个问题,每次写操作都会写入一个临时文件translog中,这样如果系统需要恢复数据可以从translog中读取;
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
分片与副本:
1.分片与副本的分配将是高可用快速搜索响应的设计核心.主分片与副本都能处理查询请求, 它们的唯一区别在于只有主分片才能处理索引请求.
2.副本对搜索的性能非常重要,用户也可以在任何时候添加或删除副本,额外的副本能带来更大的容量, 更高的呑吐能力及更强的故障恢复能力.
3.分片只能在创建节点是设置,无法在运行中调整,如果以后需要扩大分片设置,只能重新创建节点并重建索引,虽然耗时,但不影响老节点对外的服务;
4.分片数需要考虑数据集的增长趋势,ES单台机器最大JVM配置为32G,所以单个分片的数据集上限为30G;
5.分片的本质就是一个lucene索引,因此会消耗相应的文件句柄,内存和CPU资源;
6.每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降;
7.ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差;
8.如果可预见的数据集较大,建议在创建时多建分片,按照节点数量*3倍的原则创建分片(建议分片数=节点数量*1.5~3),例如,有3个节点,则推荐创建的分片数最多不超过9个,遵从单个分片小于30G原则;
9.随着数据量的增加,如果你通过集群状态API发现了问题,或者遭遇了性能退化,则只需要增加额外的节点即可. ES会自动完成分片在不同节点上的分布平衡;
10.如果给每个分片分配1个副本, 你所需的节点数将加倍. 如果需要为每个分片分配2个副本, 则需要3倍的节点数;
11.当索引拥有较多分片时, 为了组装查询结果, ES必须单独查询每个分片(当然并行的方式)并对结果进行合并. 所以高性能IO设备(SSDs)和多核处理器无疑对分片性能会有巨大帮助;
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※