[[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