[解决方案]elasticsearch 动态扩容单元

Posted by
一个分片即为扩容的单元。
一个分片的底层即为一个 Lucene 索引,会消耗一定文件句柄、内存、以及 CPU 运转。
每一个搜索请求都需要命中索引中的每一个分片,如果每一个分片都处于不同的节点还好, 但如果多个分片都需要在同一个节点上竞争使用相同的资源就有些糟糕了。
用于计算相关度的词项统计信息是基于分片的。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。

容量规划:

1、基于你准备用于生产环境的硬件创建一个拥有单个节点的集群。
2、创建一个和你准备用于生产环境相同配置和分析器的索引,但让它只有一个主分片无副本分片。
3、索引实际的文档(或者尽可能接近实际)。
4、运行实际的查询和聚合(或者尽可能接近实际)。
基本来说,你需要复制真实环境的使用方式并将它们全部压缩到单个分片上直到它“挂掉。
基于时间流的数据
使用别名指向现在的月份
POST /_aliases
{
  "actions": [
    { "add":    { "alias": "logs_current",  "index": "logs_2014-10" }}, 
    { "remove": { "alias": "logs_current",  "index": "logs_2014-09" }}, 
    { "add":    { "alias": "last_3_months", "index": "logs_2014-10" }}, 
    { "remove": { "alias": "last_3_months", "index": "logs_2014-07" }}  
  ]
}
基于时间的过期处理
单机器开启多节点需要配置
cluster.routing.allocation.same_shard.host: true

避免防止同一个分片(shard)的主副本存在同一个物理机上

bootstrap.mlockall: true
禁止内存交换!!!重要配置

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注