Elasticsearch用戶指南 二 安裝

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

如果你看到mlockallfalse,那說明禁止內存交換失敗了。并且日志里會看到類似下面的話:Unable to lock JVM Memory.

最可能的原因是,在Linux/Unix操作系統,用戶運行的Elasticsearch沒有鎖定內存的權限。可以通過下面的方法來解決:

使用.zip 和 .tar.gz這種安裝包時,在/etc/security/limits.conf文件中設置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可能失敗的情況是臨時文件夾(通常是/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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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