ElasticSearch的部署、同步與調優
ElasticSearch是一個強大的搜索服務器,基于Apache Lucene的全文搜索引擎開發,具有高性能、分布式和零配置的優點。在當前的項目中,我們希望ES能承擔億級文檔的搜索,而ES也證明了即便面對這樣的數據規模,也能實現十分迅速的搜索響應。
概念
- 節點(Node):節點是一個ES的實例,一般一臺主機上部署一個節點-
- 集群(Cluster):集群由若干節點組成,和任意節點的通信等價于和集群的通信
- 分片(Shard):一個索引會分成多個分片存儲,分片數量在索引建立后不可更改
- 副本(Replica):副本是分片的一個拷貝,目的在于提高系統的容錯性和搜索的效率
- 索引(Index):類似數據庫的庫
- 類型(Type):類似數據庫的表
- 文檔(Document):類似數據庫的行,包含一個或多個Field
- 字段(Field):搜索的最小單元,可通過Mapping定義不同的屬性(比如可否被搜索)
部署
以ElasticSearch 1.5.0版本為例
ES的使用很簡單,從官網下載壓縮包后,解壓后輸入如下指令:
./bin/elasticsearch -d --cluster.name [your_cluster_name] --node.name [your_node_name]
一旦在多臺主機上啟動擁有同一個cluster.name的ES實例,它們會自動組成一個集群
elasticsearch-head
elasticsearch-head是一個必裝的插件,它提供了一個web界面,顯示集群和索引的狀態,同時具備瀏覽和搜索文檔的功能。只需要通過ES的plugin指令安裝就OK了:
./bin/plugin -install mobz/elasticsearch-head
同步
通常線上系統都不會使用ES作為主存儲,從主存儲創建索引的效率是我們關心的。ES的bulk API能支持批量操作,大大提升了創建索引的效率。以下是使用pyelasticsearch(非官方的一個Python客戶端)批量創建索引的范例:
from pyelasticsearch import ElasticSearch from pyelasticsearch import bulk_chunks es = ElasticSearch() def documents(): for _doc in docs: yield es.index_op(doc=_doc, id=doc['id']) for chunk in bulk_chunks(documents(), docs_per_chunk=500, bytes_per_chunk=10000): es.bulk(chunk, index='index-test', doc_type='doc')
單機索引200萬條記錄的耗時約10分鐘。
調優
ES的調優分兩個層面,一是Java層面的調優,包括加大JVM的可用內存及單線程內存。
對Unix系統,可修改./bin/elasticsearch.in.sh文件:
# 一般分配主機1/4-1/2的內存 if [ "x$ES_MIN_MEM" = "x" ]; then ES_MIN_MEM=12g fi if [ "x$ES_MAX_MEM" = "x" ]; then ES_MAX_MEM=12g fi JAVA_OPTS="$JAVA_OPTS -Xms${ES_MIN_MEM}" JAVA_OPTS="$JAVA_OPTS -Xmx${ES_MAX_MEM}" # 線程大小, ES單線程承載的數據量比較大 JAVA_OPTS="$JAVA_OPTS -Xss128m"
調優的第二個層面是ES本身的調優,修改./config/elasticsearch.yml文件,關鍵的項目如下所示:
# 分片數量,推薦分片數*副本數=集群數量 # 分片會帶來額外的分割和合并的損耗,理論上分片數越少,搜索的效率越高 index.number_of_shards: 5 # 鎖定內存,不讓JVM寫入swapping,避免降低ES的性能 bootstrap.mlockall: true # 緩存類型設置為Soft Reference,只有當內存不夠時才會進行回收 index.cache.field.max_size: 50000 index.cache.field.expire: 10m index.cache.field.type: soft
來自:http://guoze.me/2015/04/04/elasticsearch-optimization/
本文由用戶 n6xb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!