版本5.0 官方文檔英文版
本章節包括內容有如何安裝Elasticsearch并且運行它:
- 下載
- 安裝
- 啟動
- 配置
官方支持的操作系統與JVM在Support Matrix。Elasticsearch在這里的平臺上都被測試過,但是可能還支持別的平臺。
Elasticsearch是用Java構建的,并且最低要求Java 8環境還運行它。它只支持Oracle’s Java 和OpenJDK。Elasticsearch中的所有節點都應該使用相同的JVM版本。
我們推薦使用Java 1.8.0_73 or later。如果Java版本不對,Elasticsearch會拒絕啟動。Elasticsearch使用的java版本可以通過JAVA_HOME
環境變量來設置。
一、安裝Elasticsearch
Elasticsearch提供以下包格式:
- zip/tar.gz
- deb 適合Debian, Ubuntu和其他基于Debian的系統
- rpm 適合Red Hat, Centos, SLES, OpenSuSE和其他基于RPM的系統
- docker 適合將Elasticsearch作為一個Docker容器運行
還有一些配置工具:
下面使用.zip或者.tar.gz格式進行安裝,Linux系統。
下載并且安裝.zip包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.2.zip
sha1sum elasticsearch-5.0.2.zip
unzip elasticsearch-5.0.2.zip
cd elasticsearch-5.0.2/
下載并且安裝.tar.gz包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.2.tar.gz
sha1sum elasticsearch-5.0.2.tar.gz
tar -xzf elasticsearch-5.0.2.tar.gz
cd elasticsearch-5.0.2/
二、運行Elasticsearch
./bin/elasticsearch
Windows系統也是一樣。默認的,Elasticsearch運行在前臺,并且打印日志,可以通個Ctrl-C
來停止它運行。Windows系統還可以通過elasticsearch-service.bat命令來將Elasticsearch注冊為一個服務。
你可以通過向localhost:9200發送HTTP請求來檢查Elasticsearch是否在運行。它會返回給你一個類似下面的響應:
{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "5.0.2",
"build_hash" : "f27399d",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "6.2.1"
},
"tagline" : "You Know, for Search"
}
日志輸出可以通過-q或者--quiet選項來禁止。
將Elasticsearch當做守護進程來運行
./bin/elasticsearch -d -p pid
日志信息記錄在$ES_HOME/logs/
,process ID會記錄在pid文件里。
這時候停止Elasticsearch使用以下命令:
kill `cat pid`
三、配置Elasticsearch
默認的,Elasticsearch從$ES_HOME/config/elasticsearch.yml
加載配置文件。配置文件的說明在Configuring Elasticsearch。
配置文件中的設定都可以通過命令來設定,通過-E
語法:
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
Windows:
./bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=node_1
如果值里面帶有空格則必須使用""包裹住值:
Epath.logs="C:\My Logs\logs"
一般的,集群層面的設置(例如:cluster.name)應該被添加到elasticsearch.yml
文件,節點層面的設置(例如:node.name)可以通過命令來設置。
3.1 重要的系統設置
理論上,Elasticsearch應該獨立運行在一臺服務器上,使用全部可用資源。為了達到這個目的,你需要配置你的操作系統允許Elasticsearch使用更多的資源而不是默認配置。
在哪里配置系統設置取決于你用的哪種安裝包,使用的哪個操作系統。
當使用.zip 或者 .tar.gz安裝包時,系統可以這樣被設置:
- 用ulimit命令來暫時性的設置
- 在/etc/security/limits.conf永久性設置
直接介紹第二種配置。
在Linux操作系統,可以通過系統管理員編輯/etc/security/limits.conf
文件來設置。要設置elasticsearch用戶能打開的最大文件數為65,536,在這個文件中添加下面內容:
elasticsearch - nofile 65536
當下次elasticsearch用戶打開一個新的session時生效。
如果是Ubuntu系統需要編輯/etc/pam.d/su
文件,將下面一行注釋去掉:
# session required pam_limits.so
3.2 設置JVM參數
首選的設置JVM參數的方法是通過config/jvm.options
配置文件(使用.zip 或者 .tar.gz安裝包時),/etc/elasticsearch/jvm.options
(當使用Debian 或者 RPM安裝包時)。JVM參數必須以-開始,你可以添加自定義JVM標識并且把這個配置上傳到你的版本控制系統。
默認的Elasticsearch設置的JVM內存大小為2GB,當向生產環境部署時要確定Elasticsearch有足夠的內存可用。好的規則是:
- 設置-Xms與-Xmx相等
- 注意太大的內存容易產生長的垃圾回收停頓
- -Xmx不要超過你物理內存的50%
- 不要設置-Xmx超過JVM用來壓縮對象指針的大小,精確的臨界值不是固定的,但是接近于32GB。
下面是設置JVM內存大小的例子:
-Xms2g
-Xmx2g
3.3 禁止內存交換
大多數操作系統會用盡可能多的內存用于文件系統緩存和及早換出無用的應用內存。這可能導致一部分JVM內存被交換到硬盤上。
這種內存交換非常不利于性能和節點的穩定性。應該竭盡所能來避免這種情況。它能引起垃圾回收持續長達數分鐘而不是幾毫秒并且能導致節點響應緩慢甚至與集群失去聯系。
這里有三種方法來禁止內存交換:
啟用 bootstrap.memory_lock
通過使用Linux/Unix系統的mlockall或者Windows系統的VirtualLock嘗試鎖定RAM中的進程地址空間,防止任何Elasticsearch內存被交換。可以通過向config/elasticsearch.yml
文件中添加以下語句來實現:
bootstrap.memory_lock: true
警告:mlockall如果嘗試分配超過了可用的內存,可能會引起JVM 或者 shell session退出。在啟動Elasticsearch后,你可以檢查下設置是否生效了,可以通過檢查下面請求響應中的mlockall
值:
GET _nodes?filter_path=**.mlockall
如果你看到mlockall
是false
,那說明禁止內存交換失敗了。并且日志里會看到類似下面的話:Unable to lock JVM Memory.
最可能的原因是,在Linux/Unix操作系統,用戶運行的Elasticsearch沒有鎖定內存的權限。可以通過下面的方法來解決:
使用.zip 和 .tar.gz這種安裝包時,在/etc/security/limits.conf
文件中設置memlock
為unlimited
。
其他方式就不翻譯了。
RPM and Debian
Set MAX_LOCKED_MEMORY to unlimited in the system configuration file (or see below for systems using systemd).
Systems using systemd
Set LimitMEMLOCK to infinity in the systemd configuration.
還有一種mlockall
可能失敗的情況是臨時文件夾(通常是/tmp
)掛載時設定了noexec
選項。這種情況可以通過指定一個新的臨時文件夾來解決,使用ES_JAVA_OPTS
環境變量:
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch
或者在jvm.options
配置文件里設置。
禁止所有文件交換
第二種禁止內存交換的方式是完全禁止交換。通常Elasticsearch是一臺服務器唯一運行的服務,它的內存使用被JVM控制著,所以沒有必要允許交換。
在Linux系統你可以通過運行以下代碼禁止內存交換:
sudo swapoff -a
如果要永久禁用,則需要編輯/etc/fstab
文件,然后注釋掉所有包含swap
的行。
在Windows系統可以通過系統屬性 → 高級系統設置 → 性能 → 高級選項卡 → 虛擬內存 然后設置為無分頁文件。(Windows 7)
3.4 文件描述符
這個設置只針對Linux 和 macOS操作系統,如果運行在Windows系統則可以安全的被忽略。
Elasticsearch使用了大量的文件描述符或者文件句柄。文件描述符將要被用完時會導致災難性的后果,并且非常可能引起數據丟失。確保增加運行Elasticsearch的用戶打開文件描述符的數量至少為65,536或者更高。
對于.zip 和 .tar.gz安裝包,在啟動Elasticsearch前以root身份設置ulimit -n 65536
,或者修改/etc/security/limits.conf
文件,設置nofile
參數為65536或更高。
RPM 和 Debian的安裝包已經設置了默認最大文件描述符數為65536,不需要額外配置。
你可以檢查每個節點的max_file_descriptors
配置情況:
GET _nodes/stats/process?filter_path=**.max_file_descriptors
3.5 虛擬內存
Elasticsearch默認使用一個hybrid mmapfs / niofs來存儲它的索引。操作系統默認限制的內存映射數是比較低的,可能會引起內存溢出異常。
在Linux,你可以用root身份通過以下命令來增加這個限制:
sysctl -w vm.max_map_count=262144
要想永久的增加vm.max_map_count
設置,需要編輯/etc/sysctl.conf
文件。重啟后通過:
sysctl vm.max_map_count
來檢驗設置是否生效
RPM 和 Debian安裝包將會自動設置這個配置。不需要額外的操作。
3.6 線程數
Elasticsearch使用多個線程池來進行不同類型的操作。當需要時能夠創建新線程是很重要的。確保Elasticsearch用戶能創建的線程數最少為2048個。
可以在啟動前通過設置ulimit -u 2048
,或者在/etc/security/limits.conf
文件里設置nproc
為2048。