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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,367评论 6 343
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 文/行吟 其一、京师重游(七律) 十年弹指欲重游,风物如新鬓已秋。 湖映垂杨摇瘦水,窗斜明月入高楼。 红帆船竞壮心...
    行吟_fff5阅读 744评论 1 4
  • 2005年至今掐指一算进所也有十余年,年年参加年会,年年感觉不同。转眼间,我已从起初的小姑娘变成小老婆,从台上的一...
    张东霞阅读 145评论 0 1