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...
    毛宇鹏阅读 47,010评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,809评论 25 709
  • 文/行吟 其一、京师重游(七律) 十年弹指欲重游,风物如新鬓已秋。 湖映垂杨摇瘦水,窗斜明月入高楼。 红帆船竞壮心...
    行吟_fff5阅读 851评论 1 4
  • 2005年至今掐指一算进所也有十余年,年年参加年会,年年感觉不同。转眼间,我已从起初的小姑娘变成小老婆,从台上的一...
    张东霞阅读 171评论 0 1