Elasticsearch用戶指南 二 安裝

版本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

如果你看到mlockallfalse,那說明禁止內(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è)置memlockunlimited。

其他方式就不翻譯了。

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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,262評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,538評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,938評論 25 709
  • 文/行吟 其一、京師重游(七律) 十年彈指欲重游,風(fēng)物如新鬢已秋。 湖映垂楊搖瘦水,窗斜明月入高樓。 紅帆船競壯心...
    行吟_fff5閱讀 912評論 1 4
  • 2005年至今掐指一算進(jìn)所也有十余年,年年參加年會(huì),年年感覺不同。轉(zhuǎn)眼間,我已從起初的小姑娘變成小老婆,從臺(tái)上的一...
    張東霞閱讀 201評論 0 1

友情鏈接更多精彩內(nèi)容