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