[[hardware]]
=== Hardware
如果你已经遵循了正常的开发路径, 你可能已经在自己的笔记本电脑或周边的机器集群上使用了Elasticsearch
((("deployment", "hardware")))((("hardware"))).
但当要部署到生产环境时, 有一些建议是你需要考虑的.
这里没有什么必须要遵守的准则;Elasticsearch被用于在众多的机器上处理各种任务.
但基于我们的生产集群经验,可以提供一个好的起点.
==== 内存
如果有一种资源是最先被耗尽的, 它可能是内存.((("hardware", "memory")))((("memory")))
排序和聚合都是很耗内存的, 所以使用足够的堆空间来应付它们是很重要的.((("heap"))) 尽管当堆空间是比较小的时候,
也能为操作系统文件缓存提供额外的内存. 因为Lucene使用的很多数据结构格式是基于硬盘的, Elasticsearch 使得操作系统缓存能产生很大效果.
64 GB内存的机器是非常理想的, 但32 GB 和 16 GB 机器也是很常见的.
少于8 GB 会适得其反 (你最终需要很多很多的小机器), 大于64 GB的机器也会有问题,我们将在<<heap-sizing>>中讨论.
==== CPUs
大多数Elasticsearch部署对CPU要求很小. 例如,((("CPUs (central processing units)")))((("hardware", "CPUs"))) 额外的处理器安装问题比其它资源要少. 你应该选择多核的现代处理器. 常规的集群利用2到8核机器.
如果你要在更快的CUPs和更多的核心之间选择,选择更多的核心更好. 多核心提供的额外并发将远远超出稍微快点的时钟速度(注:CPU速度).
==== 硬盘
硬盘对所有的集群都很重要,((("disks")))((("hardware", "disks"))) 对高度索引的集群更是加倍重要
(例如那些存储日志数据的). 硬盘是服务器上最慢的子系统,这意味着那些写多的集群很容易让硬盘饱和, 使得它成为集群的瓶颈.
如果你负担得起SSD, 它将远远超出任何旋转媒介(注:机械硬盘,磁带等). 基于SSD
的节点的查询和索引性能都有提升. 如果你负担得起,SSD是一个好的选择.
.检查你的 I/O 调度程序
****
如果你正在使用SSDs, 确保你的系统 I/O 调度程序是((("I/O scheduler"))) 配置正确的.
当你向硬盘写数据, I/O 调度程序决定何时把数据
_实际_ 发送到硬盘. 大多数 *nix 发行版下的调度程序都叫做 `cfq` (Completely Fair Queuing).
调度程序分配 _时间片_ 到每个进程, 并且优化这些到硬盘的众多队列的传递. 但它是为旋转媒介优化的:
旋转盘片的固有特性意味着它写入数据到基于物理布局的硬盘会更高效.
这对SSD来说是低效的, 然而, 尽管这里没有涉及到旋转盘片. 但是, `deadline` 或 `noop` 应该被使用.
deadline 调度程序基于写入等待时间进行优化, `noop` 只是一个简单的FIFO队列.
这个简单的更改可以带来显著的影响. 仅仅是使用正确的调度程序,我们看到了500倍的写入能力提升.
****
如果你使用旋转媒介, 尝试获取尽可能快的硬盘 (高性能服务器硬盘, 15k RPM 驱动器).
使用RAID 0是提高硬盘速度的有效途径, 对旋转硬盘和SSD来说都是如此.
没有必要使用镜像或其它RAID变体, 因为高可用已经通过replicas内建于Elasticsearch之中.
最后, 避免使用网络附加存储 (NAS). 人们常声称他们的NAS解决方案比本地驱动器更快更可靠. 除却这些声称,
我们从没看到NAS能配得上它的大肆宣传. NAS常常很慢, 显露出更大的延时和更宽的平均延时方差, 而且它是单点故障的.
==== 网络
快速可靠的网络显然对分布式系统的性能是很重要的((("hardware", "network")))((("network"))).
低延时能帮助确保节点间能容易的通讯, 大带宽能帮助分片移动和恢复. 现代数据中心网络
(1 GbE, 10 GbE) 对绝大多数集群都是足够的.
即使数据中心们近在咫尺,也要避免集群跨越多个数据中心. 绝对要避免集群跨越大的地理距离.
Elasticsearch假定所有节点都是平等的--并不会因为有一半的节点在150ms外的另一数据中心而有所不同.
更大的延时会加重分布式系统中的问题而且使得调试和排错更困难.
和NAS的争论类似, 每个人都声称他们的数据中心间的线路都是健壮和低延时的.
这是真的--直到它不是时 (网络失败终究是会发生的; 你可以相信它). 从我们的经验来看, 处理跨数据中心集群的麻烦事
–是根本不值得的.
==== 一般注意事项
获取真正的巨型机器在今天是可能的:((("hardware", "general considerations"))) 成百GB的RAM 和 几十个 CPU 核心.
反之, 在云平台上串联起成千的小虚拟机也是可能的,例如 EC2(注:Amazon Elastic Compute Cloud).
哪条道路是最好的?
通常, 选择中到大型机器更好. 避免使用小型机器,因为你不会希望去管理拥有上千个节点的集群, 而且在这些小型机器上
运行Elasticsearch的开销也是显著的.
与此同时, 避免使用真正的巨型机器. 它们通常会导致资源使用不均衡 (例如, 所有的内存都被使用, 但CPU没有) 而且在单机上运行多个节点时,会增加逻辑复杂度.
- Introduction
- 入门
- 是什么
- 安装
- API
- 文档
- 索引
- 搜索
- 聚合
- 小结
- 分布式
- 结语
- 分布式集群
- 空集群
- 集群健康
- 添加索引
- 故障转移
- 横向扩展
- 更多扩展
- 应对故障
- 数据
- 文档
- 索引
- 获取
- 存在
- 更新
- 创建
- 删除
- 版本控制
- 局部更新
- Mget
- 批量
- 结语
- 分布式增删改查
- 路由
- 分片交互
- 新建、索引和删除
- 检索
- 局部更新
- 批量请求
- 批量格式
- 搜索
- 空搜索
- 多索引和多类型
- 分页
- 查询字符串
- 映射和分析
- 数据类型差异
- 确切值对决全文
- 倒排索引
- 分析
- 映射
- 复合类型
- 结构化查询
- 请求体查询
- 结构化查询
- 查询与过滤
- 重要的查询子句
- 过滤查询
- 验证查询
- 结语
- 排序
- 排序
- 字符串排序
- 相关性
- 字段数据
- 分布式搜索
- 查询阶段
- 取回阶段
- 搜索选项
- 扫描和滚屏
- 索引管理
- 创建删除
- 设置
- 配置分析器
- 自定义分析器
- 映射
- 根对象
- 元数据中的source字段
- 元数据中的all字段
- 元数据中的ID字段
- 动态映射
- 自定义动态映射
- 默认映射
- 重建索引
- 别名
- 深入分片
- 使文本可以被搜索
- 动态索引
- 近实时搜索
- 持久化变更
- 合并段
- 结构化搜索
- 查询准确值
- 组合过滤
- 查询多个准确值
- 包含,而不是相等
- 范围
- 处理 Null 值
- 缓存
- 过滤顺序
- 全文搜索
- 匹配查询
- 多词查询
- 组合查询
- 布尔匹配
- 增加子句
- 控制分析
- 关联失效
- 多字段搜索
- 多重查询字符串
- 单一查询字符串
- 最佳字段
- 最佳字段查询调优
- 多重匹配查询
- 最多字段查询
- 跨字段对象查询
- 以字段为中心查询
- 全字段查询
- 跨字段查询
- 精确查询
- 模糊匹配
- Phrase matching
- Slop
- Multi value fields
- Scoring
- Relevance
- Performance
- Shingles
- Partial_Matching
- Postcodes
- Prefix query
- Wildcard Regexp
- Match phrase prefix
- Index time
- Ngram intro
- Search as you type
- Compound words
- Relevance
- Scoring theory
- Practical scoring
- Query time boosting
- Query scoring
- Not quite not
- Ignoring TFIDF
- Function score query
- Popularity
- Boosting filtered subsets
- Random scoring
- Decay functions
- Pluggable similarities
- Conclusion
- Language intro
- Intro
- Using
- Configuring
- Language pitfalls
- One language per doc
- One language per field
- Mixed language fields
- Conclusion
- Identifying words
- Intro
- Standard analyzer
- Standard tokenizer
- ICU plugin
- ICU tokenizer
- Tidying text
- Token normalization
- Intro
- Lowercasing
- Removing diacritics
- Unicode world
- Case folding
- Character folding
- Sorting and collations
- Stemming
- Intro
- Algorithmic stemmers
- Dictionary stemmers
- Hunspell stemmer
- Choosing a stemmer
- Controlling stemming
- Stemming in situ
- Stopwords
- Intro
- Using stopwords
- Stopwords and performance
- Divide and conquer
- Phrase queries
- Common grams
- Relevance
- Synonyms
- Intro
- Using synonyms
- Synonym formats
- Expand contract
- Analysis chain
- Multi word synonyms
- Symbol synonyms
- Fuzzy matching
- Intro
- Fuzziness
- Fuzzy query
- Fuzzy match query
- Scoring fuzziness
- Phonetic matching
- Aggregations
- overview
- circuit breaker fd settings
- filtering
- facets
- docvalues
- eager
- breadth vs depth
- Conclusion
- concepts buckets
- basic example
- add metric
- nested bucket
- extra metrics
- bucket metric list
- histogram
- date histogram
- scope
- filtering
- sorting ordering
- approx intro
- cardinality
- percentiles
- sigterms intro
- sigterms
- fielddata
- analyzed vs not
- 地理坐标点
- 地理坐标点
- 通过地理坐标点过滤
- 地理坐标盒模型过滤器
- 地理距离过滤器
- 缓存地理位置过滤器
- 减少内存占用
- 按距离排序
- Geohashe
- Geohashe
- Geohashe映射
- Geohash单元过滤器
- 地理位置聚合
- 地理位置聚合
- 按距离聚合
- Geohash单元聚合器
- 范围(边界)聚合器
- 地理形状
- 地理形状
- 映射地理形状
- 索引地理形状
- 查询地理形状
- 在查询中使用已索引的形状
- 地理形状的过滤与缓存
- 关系
- 关系
- 应用级别的Join操作
- 扁平化你的数据
- Top hits
- Concurrency
- Concurrency solutions
- 嵌套
- 嵌套对象
- 嵌套映射
- 嵌套查询
- 嵌套排序
- 嵌套集合
- Parent Child
- Parent child
- Indexing parent child
- Has child
- Has parent
- Children agg
- Grandparents
- Practical considerations
- Scaling
- Shard
- Overallocation
- Kagillion shards
- Capacity planning
- Replica shards
- Multiple indices
- Index per timeframe
- Index templates
- Retiring data
- Index per user
- Shared index
- Faking it
- One big user
- Scale is not infinite
- Cluster Admin
- Marvel
- Health
- Node stats
- Other stats
- Deployment
- hardware
- other
- config
- dont touch
- heap
- file descriptors
- conclusion
- cluster settings
- Post Deployment
- dynamic settings
- logging
- indexing perf
- rolling restart
- backup
- restore
- conclusion