Elasticsearch学习笔记(4)

目录

搭建Elasticsearch

本节包括关于如何设置Elasticsearch并使其运行的信息,包括:

  • 下载
  • 安装
  • 运行
  • 配置
支持的平台

这里提供了官方支持的操作系统和jvm的矩阵Support Matrix。Elasticsearch在列出的平台上进行了测试,但它也可能在其他平台上工作。

JAVA(JVM)版本

Elasticsearch是基于Java构建的,需要至少Java8来运行它。只支持Oracle的Java和OpenJDK。所有Elasticsearch节点和客户机都应该使用相同的JVM版本。

我们推荐您安装Java1.8.0_131版本或者Java 8发行版系列的后续版本。我们推荐您使用LTS JAVA版本。如果使用了已知的糟糕的Java版本,Elasticsearch将拒绝启动。

Elasticsearch将使用的Java版本可以通过设置JAVA_HOME环境变量进行配置。

安装
用.zip或者.tar.gz安装Elasticsearch

Elasticsearch提供.zip.tar.gz包。这些包可以用于在任何系统上安装Elasticsearch,这是在试用Elasticsearch时最容易使用的包格式。

这些包在Elastic许可证下是免费使用的。它包含开源和免费的商业功能以及对付费商业功能的访问。

最新稳定版的Elasticsearch可以在下载Elasticsearch页面找到。其他版本可以在以前的版本页面找到。

下载并安装.zip包

可按如下方式下载并安装Elasticsearch v6.5.1的.zip归档文件:

1.wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.zip
2.wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.zip.sha512
3.shasum -a 512 -c elasticsearch-6.5.1.zip.sha512
4.unzip elasticsearch-6.5.1.zip
5.cd elasticsearch-6.5.1

第3步是检验你下载的包和发布时的SHA
第5步这个目录被称为$ES_HOME

下载并安装.tar.gz

可按如下方式下载并安装Elasticsearch v.6.5.1的.tar.gz归档问价:

1.wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz
2.wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.tar.gz.sha512
3.shasum -a 512 -c elasticsearch-6.5.1.tar.gz.sha512
4.tar -xzf elasticsearch-6.5.1.tar.gz
5.cd elasticsearch-6.5.1/

第3步是检验你下载的包的SHA是否是发布时的SHA
第5步这个目录被称为$ES_HOME

启用X-Pack索引的自动创建

X-Pack将尝试在Elasticsearch中自动创建多个索引。默认情况下,Elasticsearch配置为允许自动创建索引,不需要额外的步骤。但是,如果您在Elasticsearch中禁用了自动索引创建,则必须配置action.auto_create_index elasticsearchelasticsearch.yml配置文件中,允许X-Pack创建以下索引:

action.auto_create_index: .monitoring,.watches,.triggered_watches,.watcher-history,.ml*

注意:如果您正在使用LogstashBeats,那么您很可能需要额外的索引名称配置在auto_create_index的配置项中,确切的值将取决于您的本地配置。如果您不确定环境的正确值,可以考虑将该值设置为*,这将允许自动创建所有索引。

启动Elasticsearch

Elasticsearch可以使用以下的命令启动:

./bin/elasticsearch

默认情况下,Elasticsearch在前台运行,将其日志打印到标准输出(stdout),按Ctrl-C即可停止。
注意:所有与Elasticsearch打包在一起的脚本都需要一个Bash版本,该版本支持数组,并假设Bash在/bin/ Bash可用。因此,Bash应该可以直接或通过符号链接在此路径上可用。

检查Elasticsearch是否在运行

您可以通过发送HTTP请求到本地主机上的端口9200来测试您的Elasticsearch节点是否正在运行:

curl -X GET "localhost:9200/"

这个命令应该返回给你像这样的响应内容:

{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "6.5.1",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "f27399d",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "1.2.3",
"minimum_index_compatibility_version" : "1.2.3"
},
"tagline" : "You Know, for Search"
}

可以使用命令行上的-q或-quiet选项禁用stdout的日志打印。

作为守护进程运行

要将Elasticsearch作为守护程序运行,请在命令行中指定-d,并使用-p选项将进程ID记录在文件中

./bin/elasticsearch -d -p pid

日志消息可以在$ES_HOME/logs/目录中找到。
要关闭Elasticsearch,请杀死pid文件中记录的进程ID:

kill pid号

注意:RPM和Debian包中提供的启动脚本负责启动和停止Elasticsearch过程。

在命令行配置Elasticsearch

默认情况下Elasticsearch从$ES_HOME/config/elasticsearch.yml文件中加载它的配置。这个配置文件的格式在Configuring Elasticsearch中有说明。

任何可以在配置文件中指定的设置也可以在命令行中指定,使用-E语法如下所示:

./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1

备注:通常,任何集群范围的设置(比如cluster.name)应该添加到elasticsearch.yml配置文件中。而任何特定于节点的设置,如node.name,都可以在命令行中指定。

.zip和.tar.gz解压后的目录布局

.zip和.tar.gz包是完全独立的。默认情况下,所有文件和目录都包含在$ES_HOME,这是在解压存档时创建的目录。

这非常方便,因为您不需要创建任何目录来开始使用Elasticsearch,卸载Elasticsearch与删除$ES_HOME目录一样简单。但是,建议更改配置目录、数据目录和日志目录的默认位置,以便以后不删除重要数据。

Type Description Default Location Setting
home Elasticsearch主目录或者$ES_HOME 解压缩包时创建的目录
bin 二进制脚本包括启动节点的elasticsearch和安装插件的elasticsearch插件 $ES_HOME/bin
config 配置文件,包括elasticsearch.yml $ES_HOME/config ES_PATH_CONF
data 节点上分配的每个索引/碎片的数据文件的位置。可以容纳多个位置 $ES_HOME/data path.data
logs 日志文件位置 $ES_HOME/logs path.logs
plugins 插件文件的位置。每个插件将包含在子目录中。 $ES_HOME/plugins
repo 共享的文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放在这里指定的任何目录的任何子目录中。 未配置 path.repo
script 脚本文件的位置 $ES_HOME/scripts path.scripts
在Windows上使用.zip包安装Elasticsearch

可以使用.zip包在Windows上安装Elasticsearch。自带elasticsearch-service.bat命令,它将设置Elasticsearch作为服务运行。
备注:历来,Elasticsearch都是使用.zip归档文件安装在Windows上的。一个MSI安装包提供了最简单的Windows入门体验。如果愿意,可以继续使用.zip方法。

这个包在弹性许可证下是免费使用的。它包含开源和免费的商业功能以及对付费商业功能的访问。最新稳定版的Elasticsearch可以在 Download Elasticsearch页面找到。其他版本可以在 Past Releases page页面找到。

下载并安装.zip包

下载Elasticsearch v6.5.1版本的.zip包,下载地址:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.zip

或者,您可以下载以下包,其中只包含Apache 2.0许可下可用的特性,下载地址:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-6.5.1.zip

用你最喜欢的解压工具解压。这将创建一个名为elasticsearch-6.5.1的文件夹,我们将其称为%ES_HOME%。例如,在终端窗口中,cd到%ES_HOME%目录:

cd c:\elasticsearch-6.5.1

启用x-pack索引的自动创建

X-Pack将尝试在Elasticsearch中自动创建多个索引。默认情况下,Elasticsearch配置为允许自动创建索引,不需要额外的步骤。但是,如果您在Elasticsearch中禁用了自动索引创建,则必须配置action.auto_create_index elasticsearchelasticsearch.yml配置文件中,允许X-Pack创建以下索引:

action.auto_create_index: .monitoring,.watches,.triggered_watches,.watcher-history,.ml*

注意:如果您正在使用LogstashBeats,那么您很可能需要额外的索引名称配置在auto_create_index的配置项中,确切的值将取决于您的本地配置。如果您不确定环境的正确值,可以考虑将该值设置为*,这将允许自动创建所有索引。

从命令行启动Elasticsearch

Elasticsearch可以从命令行开始,如下所示:

.\bin\elasticsearch.bat

默认情况下,Elasticsearch在前台运行,将其日志打印到STDOUT,按Ctrl-C即可停止。

在命令行上配置Elasticsearch

默认情况下Elasticsearch从%ES_HOME%\config\ elasticsearch.yml加载其配置,这个配置文件的格式在 Configuring Elasticsearch中有说明。

任何可以在配置文件中指定的设置也可以在命令行中指定,使用-E语法如下:

.\bin\elasticsearch.bat -Ecluster.name=my_cluster -Enode.name=node_1

注意:包含空格的值必须用引号括起来。例如-Epath.logs="C:\My Logs\logs"。

备注:通常,应该向elasticsearch添加任何集群范围的设置(比如cluster.name)。而任何特定于节点的设置,如node.name,都可以在命令行中指定。

验证Elasticsearch是否在运行

您可以通过发送HTTP请求到本地主机上的端口9200来测试您的Elasticsearch节点是否正在运行:

curl -X GET "localhost:9200/"

这个请求返回给你的响应内容大概是这样的:

{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "6.5.1",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "f27399d",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "1.2.3",
"minimum_index_compatibility_version" : "1.2.3"
},
"tagline" : "You Know, for Search"
}

将Elasticsearch作为一个服务安装在Windows系统上

Elasticsearch可以作为服务安装在后台运行,或者在启动时自动启动,无需任何用户交互。这可以通过在bin\文件夹中elasticsearch-service.bat脚本获得,它允许安装、删除、管理或配置服务,并可能从命令行启动和停止服务。

c:\elasticsearch-6.5.1\bin>elasticsearch-service.bat

Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]

脚本需要一个参数(要执行的命令),然后是一个可选的参数,指示服务id(在安装多个Elasticsearch服务时有用)。
可用的命令有:

  • install - 安装Elasticsearch作为一个服务
  • remove - 移除已安装的Elasticsearch服务(如果是已启动的服务将会被停止)
  • start - 启动Elasticsearch服务(如果已经安装了)
  • stop - 停止Elasticsearch服务(如果已经启动了)
  • manager - 启动一个GUI来管理已安装的服务

服务的名称和JAVA_HOME的值将会在安装过程中获得:

c:\elasticsearch-6.5.1\bin>elasticsearch-service.bat install
Installing service : "elasticsearch-service-x64"
Using JAVA_HOME (64-bit): "c:\jvm\jdk1.8"
The service 'elasticsearch-service-x64' has been installed.

注意:虽然JRE可以用于Elasticsearch服务,但是由于它使用的是客户机VM(而不是服务器JVM,后者为长时间运行的应用程序提供更好的性能),因此不鼓励使用JRE,并会发出警告。

注意:系统环境变量JAVA_HOME应该设置为您希望服务使用的JDK安装的路径。如果升级JDK,不需要重新安装服务,但是必须将系统环境变量JAVA_HOME的值设置为新JDK安装的路径。但是,不支持跨JVM类型进行升级(例如JRE和SE),并且需要重新安装服务。

定制服务设置

通过设置以下环境变量(使用命令行中的set命令或通过系统属性->环境变量GUI),可以在安装之前配置Elasticsearch服务。

  • SERVICE_ID - 服务的唯一标识符。如果在同一台机器上安装多个实例,这很有用。 默认为elasticsearch-service-x64.
  • SERVICE_USERNAME - 运行服务的用户,默认为本地系统帐户
  • SERVICE_PASSWORD - 在%SERVICE_USERNAME%中指定的用户的密码
  • SERVICE_DISPLAY_NAME - 服务的名称。
  • SERVICE_DESCRIPTION - 服务的描述。
  • JAVA_HOME - 运行服务所需的JVM的安装目录。
  • SERVICE_LOG_DIR - 服务日志目录,默认为%ES_HOME%\logs。注意,这并不控制Elasticsearch日志的路径;这些路径是通过在elasticsearch.yml配置文件中的path.logs设置或命令行上设置的。
  • ES_PATH_CONF - 配置文件目录()
    Configuration file directory (需要包含 elasticsearch.yml, jvm.options, and log4j2.properties文件), 默认是 %ES_HOME%\config。
  • ES_JAVA_OPTS - 您可能想要应用的任何其他JVM系统属性。
  • ES_START_TYPE - 服务的启动模式。可以是自动的,也可以是手动的(默认)。
  • ES_STOP_TIMEOUT - 等待服务优雅退出的超时时间(秒)。默认值为0。

注意: 其核心elasticsearch-service.bat安装服务依赖于Apache Commons Daemon项目。在服务安装之前设置的环境变量将被复制,并将在服务生命周期中使用。这意味着,除非重新安装服务,否则在安装之后对它们所做的任何更改都不会被接收。

注意:在Windows上,当从命令行运行Elasticsearch或第一次将Elasticsearch作为服务安装时,堆大小可以任意配置。要为已安装的服务调整堆大小,请使用服务管理器:bin\elasticsearch-service.bat manager。

注意:服务在运行时自动配置一个私有临时目录,供Elasticsearch使用。这个私有临时目录被配置为运行安装的用户的私有临时目录的子目录。如果服务将在不同的用户下运行,您可以在执行服务安装之前将环境变量ES_TMPDIR设置为首选位置,从而配置服务应该使用的临时目录的位置。

使用Manager GUI

在服务已经被安装之后还可以使用manager GUI(elasticsearch-service-mgr.exe)配置服务。该GUI可以深入了解已安装的服务,包括其状态、启动类型、JVM、启动和停止设置等。从命令行简单地调用elasticsearch-service.bat manager 将打开anager窗口:


service-manager-win.png

通过管理器GUI进行的大多数更改(如JVM设置)都需要重新启动服务才能产生效果。

.zip解压后的目录布局

zip包是完全独立的。默认情况下,所有文件和目录都包含在%ES_HOME%——解压存档时创建的目录。

这非常方便,因为您不需要创建任何目录来开始使用Elasticsearch,卸载Elasticsearch与删除%ES_HOME%目录一样简单。但是,建议更改配置目录、数据目录和日志目录的默认位置,以便以后不删除重要数据。

Type Description Default Location Setting
home Elasticsearch主目录或者$ES_HOME 解压缩包时创建的目录
bin 二进制脚本包括启动节点的elasticsearch和安装插件的elasticsearch插件 $ES_HOME/bin
config 配置文件,包括elasticsearch.yml $ES_HOME/config ES_PATH_CONF
data 节点上分配的每个索引/碎片的数据文件的位置。可以容纳多个位置 $ES_HOME/data path.data
logs 日志文件位置 $ES_HOME/logs path.logs
plugins 插件文件的位置。每个插件将包含在子目录中。 $ES_HOME/plugins
repo 共享的文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放在这里指定的任何目录的任何子目录中。 未配置 path.repo
用Debian包安装ELasticsearch

可从我们的网站或APT库下载Elasticsearch的Debian软件包。它可以用于在任何基于Debian的系统(如Debian和Ubuntu)上安装Elasticsearch。

导入Elasticsearch PGP Key

我们使用Elasticsearch签名密钥(PGP密钥D88E42B4,可从https://pgp.mit.edu获得)签名所有包:

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

下载并安装公共签名密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

从APT存储库安装

在继续之前,您可能需要在Debian上安装apt-transport-https包:

sudo apt-get install apt-transport-https

将存储库定义保存到/etc/ap /sources.list.d/elastic-6.x.list

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

备注:由于以下几个原因,这些指令不使用add-apt-repository:
1.add-apt-repository将条目添加到系统/etc/apt/sources.list文件中而不是/etc/ap /sources.list.d下增加一个干净的存储库文件
2.add-apt-repository并不是许多发行版上默认安装的一部分,它需要许多非默认依赖项
3.旧版本的add-apt-repository总是会添加一个debi -src条目,这会导致错误,因为我们没有提供源代码包。如果您已经添加了deba -src条目,那么在删除deba -src行之前,您将看到如下所示的错误:

Unable to find expected entry 'main/source/Sources' in Release file
(Wrong sources.list entry or malformed file)

您可以使用以下命令安装Elasticsearch Debian软件包:

sudo apt-get update && sudo apt-get install elasticsearch

警告:如果同一个Elasticsearch存储库存在两个条目,那么在apt-get更新期间会看到这样的错误:

Duplicate sources.list entry https://artifacts.elastic.co/packages/6.x/apt/ ...`
检查/etc/apt/sources.list.d/elasticsearch-6.x.list列出重复条目或在/etc/apt/source.list.d/中的文件中查找重复条目和/etc/apt/sources.list文件。

备注:在基于系统的发行版中,安装脚本将尝试设置内核参数(例如vm.max_map_count);您可以通过屏蔽systemd-sysctl.service unit跳过此步骤。

手动下载并安装Debian软件包(推荐)

可从本网站下载Elasticsearch v6.5.1的Debian软件包,安装如下:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.deb.sha512
shasum -a 512 -c elasticsearch-6.5.1.deb.sha512
sudo dpkg -i elasticsearch-6.5.1.deb

或者,您可以下载以下包,其中只包含Apache 2.0许可下可用的特性:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-6.5.1.deb

启用x-pack自动创建索引

X-Pack将尝试在Elasticsearch中自动创建多个索引。默认情况下,Elasticsearch的配置允许自动创建索引,不需要额外的步骤。但是,如果您在Elasticsearch中禁用了自动索引创建,则必须在elasticsearch.yml中配置action.auto_create_index 允许X-Pack创建以下索引:

action.auto_create_index: .monitoring,.watches,.triggered_watches,.watcher-history,.ml*

如果您正在使用Logstash或Beats,那么您的操作很可能需要额外的索引名称,确切的值将取决于您的本地配置。如果您不确定环境的正确值,可以考虑将该值设置为*,这将允许自动创建所有索引。

SysV init vs systemd

Elasticsearch安装后不会自动启动。如何启动和停止Elasticsearch取决于您的系统是使用SysV init还是systemd(用于较新的发行版)。您可以通过运行此命令来判断使用哪个命令:

ps -p 1

使用SysV init运行Elasticsearch

使用update-rc.d命令配置Elasticsearch以在系统启动时自动启动:

sudo update-rc.d elasticsearch defaults 95 10

可以使用以下命令启动和停止Elasticsearch服务:

sudo -i service elasticsearch start
sudo -i service elasticsearch stop

如果Elasticsearch由于任何原因无法启动,它会打印出失败的原因。日志文件可以在/var/ Log /elasticsearch/中找到。

使用systemd运行Elasticsearch

要配置Elasticsearch在系统启动时自动启动,运行以下命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

可以按如下方式启动和停止Elasticsearch:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令没有提供关于Elasticsearch是否成功启动的反馈。相反,这些信息将写入位于/var/log/elasticsearch/中的日志文件中。

默认情况下,Elasticsearch服务不会在系统日志中记录信息。要启用journalctl日志记录,必须在elasticsearch.service文件中的ExecStart命令行删除——quiet选项。

启用systemd日志记录时,可以使用journalctl命令获取日志信息:
跟踪日志:

sudo journalctl -f

列出elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch

从给定时间开始列出elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch --since "2016-10-30 18:17:16"

查看man journalctl或https://www.freedesktop.org/software/systemd/man/journalctl.html以获得更多命令行选项。

校验Elasticsearch是否在运行

您可以通过发送HTTP请求到本地主机上的端口9200来测试您的Elasticsearch节点是否正在运行:

curl -X GET "localhost:9200/"

返回给你的响应内容大概像这样:

{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "6.5.1",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "f27399d",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "1.2.3",
"minimum_index_compatibility_version" : "1.2.3"
},
"tagline" : "You Know, for Search"
}

配置Elasticsearch

Elasticsearch默认使用/etc/elasticsearch进行运行时配置。这个目录和在这个目录下的所有文件的所有权在包安装时设置为root:elasticsearch,这个目录设置了setgid标志,以便在/etc/elasticsearch这个目录下创建的任何文件和子目录具有相同的所有权。希望能够保持这种状态,以便Elasticsearch进程可以通过组权限读取该目录下的文件。

默认情况下Elasticsearch从/etc/elasticsearch/elasticsearch.yml文件中加载它的配置。这个配置文件的格式在配置Elasticsearch中有说明。

Debian包还有一个系统配置文件(/etc/default/elasticsearch),允许您设置以下参数:
JAVA_HOME: 设置要使用的自定义Java路径
MAX_OPEN_FILES: 打开文件的最大数量,默认为65536。
MAX_LOCKED_MEMORY:最大锁定内存大小。如果你在elasticsearch.yml中启用bootstrp.memory_lock内存锁配置项,设置其为unlimited
MAX_MAP_COUNT:进程可能拥有的内存映射区域的最大数量。如果使用mmapfs作为索引存储类型,请确保将其设置为高值。有关更多信息,请参阅关于max_map_count的linux内核文档。这是在启动Elasticsearch之前通过sysctl设置的。默认为262144。
ES_PATH_CONF:配置文件目录(需要包含elasticsearch.yml、jvm.options和log4j2.properties);默认为/etc/elasticsearch。
ES_JAVA_OPTS:您可能想要应用的任何其他JVM系统属性。
RESTART_ON_UPGRADE:在包升级时配置重启,默认为false。这意味着您必须在手动安装包之后重新启动Elasticsearch实例。这样做的原因是为了确保集群中的升级不会导致连续的碎片重分配,从而导致高网络流量和减少集群的响应时间。

注意:使用systemd的发行版要求通过systemd配置系统资源限制,而不是通过/etc/sysconfig/elasticsearch文件。有关更多信息,请参阅Systemd配置

Debian软件包的目录布局

Debian软件包将配置文件、日志和数据目录放在基于Debian的系统的适当位置:

Type Description Default Location Setting
home Elasticsearch主目录或者$ES_HOME /usr/share/elasticsearch
bin 二进制脚本包括启动节点的elasticsearch和安装插件的elasticsearch插件 /usr/share/elasticsearch/bin
config 配置文件,包括elasticsearch.yml /etc/elasticsearch ES_PATH_CONF
conf 环境变量包括堆大小、文件描述符。 /etc/default/elasticsearch
data 节点上分配的每个索引/碎片的数据文件的位置。可以容纳多个位置 /var/lib/elasticsearch path.data
logs 日志文件位置 /var/log/elasticsearch path.logs
plugins 插件文件的位置。每个插件将包含在子目录中。 /usr/share/elasticsearch/plugins
repo 共享的文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放在这里指定的任何目录的任何子目录中。 未配置 path.repo
用RPM包安装ELasticsearch

Elasticsearch的RPM可以从我们的网站RPM存储库下载。它可以用于在OpenSuSE、SLES、Centos、Red Hat和Oracle Enterprise等任何基于rpm的系统上安装Elasticsearch。

备注:RPM安装不支持使用旧版本RPM的发行版,例如SLES 11和CentOS 5。请参阅安装Elasticsearch使用.zip或.tar.gz代替。
最新稳定版的Elasticsearch可以在Elasticsearch下载页面找到。其他版本可以在以前的版本页面找到。

导入Elasticsearch PGP Key

我们使用Elasticsearch签名密钥(PGP密钥D88E42B4,可从https://pgp.mit.edu获得)签名所有包:

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

下载并安装公开签名密钥:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

从RPM存储库安装

在/etc/yum.repos.d/目录下为RedHat的发行版创建一个名为elasticsearch.repo的源文件,或者在基于OpenSuSE发行版的/etc/zypp/repos.d/目录,包含:

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

您的存储库已经可以使用了。现在,您可以使用以下命令之一安装Elasticsearch:

1.sudo yum install elasticsearch
2.sudo dnf install elasticsearch
3.sudo zypper install elasticsearch

1.在CentOS和较早的Red Hat发行版上使用yum
2.在Fedora和其他较新的Red Hat发行版上使用dnf
3.在基于OpenSUSE的发行版上使用zypper

手动下载并安装RPM

Elasticsearch v6.5.1的RPM可以从网站下载,安装如下:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.rpm.sha512
shasum -a 512 -c elasticsearch-6.5.1.rpm.sha512
sudo rpm --install elasticsearch-6.5.1.rpm

启用X-Pack索引的自动创建

X-Pack将尝试在Elasticsearch中自动创建多个索引。默认情况下,Elasticsearch的配置允许自动创建索引,不需要额外的步骤。但是,如果您在Elasticsearch中禁用了自动索引创建,则必须在elasticsearch.yml文件中配置action.auto_create_index配置项以允许X-Pack创建以下索引:

action.auto_create_index: .monitoring,.watches,.triggered_watches,.watcher-history,.ml*

SysV init vs systemd

Elasticsearch安装后不会自动启动。如何启动和停止Elasticsearch取决于您的系统是使用SysV init还是systemd(用于较新的发行版)。你可以使用这个命令知道哪个正在运行:

ps -p 1

使用SysV init运行Elasticsearch

使用chkconfig命令配置Elasticsearch在系统启动时自动启动:

sudo chkconfig --add elasticsearch

可以使用服务命令启动和停止Elasticsearch:

sudo -i service elasticsearch start
sudo -i service elasticsearch stop

如果Elasticsearch由于任何原因无法启动,它会打印出失败的原因。日志文件可以在/var/ Log /elasticsearch/中找到。

使用systemd运行Elasticsearch

要配置Elasticsearch在系统启动时自动启动,运行以下命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

Elasticsearch的启动和停止方式如下:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令没有提供关于Elasticsearch是否成功启动的反馈。相反,这些信息将写入位于/var/log/elasticsearch/中的日志文件中。

默认情况下,Elasticsearch服务不会在系统日志中记录信息。要启用journalctl日志记录,必须在elasticsearch.service文件中从ExecStart命令行删除 --quiet选项。

启用systemd日志记录时,可以使用journalctl命令获取日志信息:
跟踪日志:

sudo journalctl -f

列出elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch

从给定时间开始列出elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch --since "2016-10-30 18:17:16"

校验ELasticsearch是否运行

您可以通过发送HTTP请求到本地主机上的端口9200来测试您的Elasticsearch节点是否正在运行:

curl -X GET "localhost:9200/"

返回给你的响应内容大概是这样的:

{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "6.5.1",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "f27399d",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "1.2.3",
"minimum_index_compatibility_version" : "1.2.3"
},
"tagline" : "You Know, for Search"
}

配置Elasticsearch

Elasticsearch默认使用/etc/elasticsearch进行运行时配置。这个目录和在这个目录下的所有文件的所有权在包安装时设置为root:elasticsearch,这个目录设置了setgid标志,以便在/etc/elasticsearch这个目录下创建的任何文件和子目录具有相同的所有权。希望能够保持这种状态,以便Elasticsearch进程可以通过组权限读取该目录下的文件。

默认情况下Elasticsearch从/etc/elasticsearch/elasticsearch.yml文件中加载它的配置。这个配置文件的格式在配置Elasticsearch中有说明。

Debian包还有一个系统配置文件(/etc/default/elasticsearch),允许您设置以下参数:
JAVA_HOME: 设置要使用的自定义Java路径
MAX_OPEN_FILES: 打开文件的最大数量,默认为65536。
MAX_LOCKED_MEMORY:最大锁定内存大小。如果你在elasticsearch.yml中启用bootstrp.memory_lock内存锁配置项,设置其为unlimited
MAX_MAP_COUNT:进程可能拥有的内存映射区域的最大数量。如果使用mmapfs作为索引存储类型,请确保将其设置为高值。有关更多信息,请参阅关于max_map_count的linux内核文档。这是在启动Elasticsearch之前通过sysctl设置的。默认为262144。
ES_PATH_CONF:配置文件目录(需要包含elasticsearch.yml、jvm.options和log4j2.properties);默认为/etc/elasticsearch。
ES_JAVA_OPTS:您可能想要应用的任何其他JVM系统属性。
RESTART_ON_UPGRADE:在包升级时配置重启,默认为false。这意味着您必须在手动安装包之后重新启动Elasticsearch实例。这样做的原因是为了确保集群中的升级不会导致连续的碎片重分配,从而导致高网络流量和减少集群的响应时间。

注意:使用systemd的发行版要求通过systemd配置系统资源限制,而不是通过/etc/sysconfig/elasticsearch文件。有关更多信息,请参阅Systemd配置

RPM软件包的目录布局

Debian软件包将配置文件、日志和数据目录放在基于Debian的系统的适当位置:

Type Description Default Location Setting
home Elasticsearch主目录或者$ES_HOME /usr/share/elasticsearch
bin 二进制脚本包括启动节点的elasticsearch和安装插件的elasticsearch插件 /usr/share/elasticsearch/bin
config 配置文件,包括elasticsearch.yml /etc/elasticsearch ES_PATH_CONF
conf 环境变量包括堆大小、文件描述符。 /etc/sysconfig/elasticsearch
data 节点上分配的每个索引/碎片的数据文件的位置。可以容纳多个位置 /var/lib/elasticsearch path.data
logs 日志文件位置 /var/log/elasticsearch path.logs
plugins 插件文件的位置。每个插件将包含在子目录中。 /usr/share/elasticsearch/plugins
repo 共享的文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放在这里指定的任何目录的任何子目录中。 未配置 path.repo
用Windows MSI安装程序安装Elasticsearch

参考官网

用Docker安装Elasticsearch

Elasticsearch也可以作为Docker图像使用。图像使用centos:7作为基础图像

所有已发布的Docker图像和标签的列表可以在www.docker.elastic.co上找到。源代码在GitHub中。

拉取图像

获取Docker的Elasticsearch就像对弹性Docker注册表发出Docker pull命令一样简单:

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.5.1

或者,您可以下载其他Docker图像,这些图像只包含Apache 2.0许可下可用的特性。要下载这些图像,请访问www.docker.elastic.co

从命令行运行Elasticsearch
  • 开发模式:
    通过以下命令可以快速启动Elasticsearch用于开发或测试使用:

    docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.5.1

  • 生产模式:
    vm.max_map_count内核设置需要设置为至少262144以供生产使用。取决于您的平台:

    • Linux
      vm.max_map_count设置应该在/etc/sysctl.conf中永久设置:

      $ grep vm.max_map_count /etc/sysctl.conf
      vm.max_map_count=262144

      要在活动系统类型上应用该设置:sysctl -w vm.max_map_count=262144

    • macOS with Docker for Mac
      vm.max_map_count设置必须在xhyve虚拟机中设置:

      $ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

      只需按下enter并配置sysctl设置,就像在Linux中那样:

      sysctl -w vm.max_map_count=262144

    • Windows and macOS with Docker Toolbox
      vm.max_map_count设置必须通过docker-machine设置:

      docker-machine ssh
      sudo sysctl -w vm.max_map_count=262144

下面的示例给出了一个包含两个Elasticsearch节点的集群。要打开集群,请使用docker-compose.yml。只需要输入:

docker-compose up

注意:docker -compose不是与Linux上的Docker一起预先安装的。安装说明可以在Docker Compose webpage上找到。

节点elasticsearch监听localhost:9200, elasticsearch2通过Docker网络与elasticsearch对话。

这个例子还使用Docker named volumes,称为esdata1和esdata2,如果还没有出现,将创建它们。
docker-compose.yml:

version: '2.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    container_name: elasticsearch
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    container_name: elasticsearch2
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local

networks:
  esnet:

要停止集群,请键入docker-compose down。数据量将保持不变,所以可以使用docker-compose up重新启动集群,使用相同的数据。要破坏集群和数据卷,只需键入docker-compose down -v

检查集群状态

curl http://127.0.0.1:9200/_cat/health
1472225929 15:38:49 docker-cluster green 2 2 4 2 0 0 0 0 - 100.0%

日志消息转到控制台,由配置好的Docker日志驱动程序处理。默认情况下,您可以使用docker logs访问日志。

使用docker配置ELasticsearch

Elasticsearch从/usr/share/elasticsearch/config/下的文件加载配置。在配置Elasticsearch和设置JVM选项中记录了这些配置文件。

该图像提供了几种配置Elasticsearch设置的方法,传统的方法是提供定制的文件,即elasticsearch .yml。也可以使用环境变量来设置选项:

A.通过docker环境变量配置参数:
例如,使用docker run定义集群名称,您可以传递-e "cluster.name=mynewclustername"。需要双引号。

B.绑定装载配置:
创建自定义配置文件,并将其挂载到图像的相应文件上。例如,可以使用docker run带有以下参数来绑定-挂载一个custom_elasticsearch.yml:

-v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

注意:容器使用uid:gid 1000:1000作为用户Elasticsearch运行Elasticsearch。绑定挂载的主机目录和文件,例如上面的custom_elasticsearch.yml,需要被这个用户访问。对于数据和日志目录,例如/usr/share/elasticsearch/data,也需要写访问。请参阅下面的注释1。

c .定制的图像
在某些环境中,准备包含配置的自定义映像可能更有意义。实现这一点的Dockerfile可能非常简单:

FROM docker.elastic.co/elasticsearch/elasticsearch:6.5.1
COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/

然后,您可以构建并尝试这样的图像:

docker build --tag=elasticsearch-custom .
docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom

一些插件需要额外的安全权限。您必须显式地接受它们,或者在运行Docker映像时附加一个tty,并在提示符下接受yes,或者分别检查安全权限,如果您不介意的话,还可以在plugin install命令中添加--batch标志。有关更多细节,请参阅插件管理文档。

d.覆盖图像的默认CMD
选项可以通过覆盖图像的默认命令作为命令行选项传递给Elasticsearch进程。例如:

docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername

使用Elasticsearch Docker映像配置SSL/TLS

参考 Encrypting Communications in an Elasticsearch Docker Container.

生产用途和默认值的说明

我们收集了一些用于生产的最佳实践。下面提到的任何Docker参数都假定使用docker run
1.默认情况下,Elasticsearch作为用户Elasticsearch在容器中运行,使用uid:gid 1000:1000。

如果绑定-挂载本地目录或文件,请确保该用户能够读懂它,而数据和日志dirs则需要另外的写访问权限。一个好的策略是为本地目录授予组对gid 1000或0的访问权限。例如,准备一个本地目录,以便通过绑定挂载存储数据:

mkdir esdatadir
chmod g+rwx esdatadir
chgrp 1000 esdatadir

最后,您还可以强制容器通过环境变量TAKE_FILE_OWNERSHIP来更改用于数据和日志dirs的绑定挂载的所有权;在这种情况下,它们将归uid:gid 1000:0所有,根据需要提供对Elasticsearch进程的读写访问。

2.对于Elasticsearch容器,确保增加nofile和nproc的ulimit是很重要的。验证Docker守护进程的init系统已经将这些值设置为可接受的值,如果需要,可以在守护进程中调整它们,或者在每个容器中覆盖它们,例如使用docker run:

--ulimit nofile=65536:65536

检查上述ulimit的Docker守护程序缺省值的一种方法是:

docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'

3.为了性能和节点稳定性,需要禁用交换。这可以通过Elasticsearch文档中提到的任何方法来实现。如果你选择bootstrap.memory_lock: true方法,除了通过任何配置方法定义它之外,您还需要memlock: true ,它可以在Docker守护进程中定义,也可以专门为容器设置。以上在docker- composel中进行了演示。如果使用docker run:

-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1

4.该图像公开TCP端口9200和9300。对于集群,建议使用**--publish-all对已发布端口进行随机化,除非在每个主机上固定一个容器。

5.使用ES_JAVA_OPTS环境变量设置堆大小。例如,为使用16GB使用**docker run ** -e ES_JAVA_OPTS="-Xms16g -Xmx16g":

docker run -e ES_JAVA_OPTS="-Xms16g -Xmx16g"

6.将部署锁定到Elasticsearch Docker映像的特定版本。例如,docker.elastic.co / elasticsearch / elasticsearch: 6.5.1

7.总是使用/usr/share/elasticsearch/data的卷绑定,如生产示例所示,原因如下:
a.如果容器被杀死,您的elasticsearch节点的数据不会丢失
b.Elasticsearch对I/O很敏感,Docker存储驱动程序对于快速I/O并不理想
c.它允许使用高级Docker卷插件

8.如果使用的是devicemapper存储驱动程序,请确保没有使用默认的loop-lvm模式。配置docker-engine来使用direct-lvm

9.考虑使用不同的日志驱动程序集中日志。还要注意,默认的json文件日志驱动程序并不适合生产使用。

下一步

你现在已经建立了一个测试Elasticsearch环境。在开始真正的开发或使用Elasticsearch投入生产之前,必须做一些额外的设置:

  • 学习如何配置Elasticsearch
  • 配置重要的Elasticsearch配置
  • 配置重要的系统配置

下一章 —— Elasticsearch学习笔记(5)

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

推荐阅读更多精彩内容