Elasticsearch简介
Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Elasticsearch入门
启动并运行Elasticsearch
要将Elasticsearch用作测试驱动器,您可以 在Elasticsearch Service上创建 托管部署,或在您自己的Linux,macOS或Windows计算机上设置多节点Elasticsearch集群。
在云服务器上运行Elasticsearch
在Elasticsearch Service上创建部署时,该服务与Kibana和APM一起配置三节点Elasticsearch集群。
要创建部署:
- 注册免费试用版, 然后验证您的电子邮件地址。
- 为您的帐户设置密码。
- 单击创建部署。
运行Elasticsearch本地的Linux,MacOS或Windows
在Elasticsearch Service上创建部署时,将自动设置一个主节点和两个数据节点。通过从tar或zip存档安装,您可以在本地启动Elasticsearch的多个实例,以查看多节点集群的行为。
要在本地运行三节点的Elasticsearch集群:
1.下载适用于您的操作系统的Elasticsearch存档,也可以点击直接下载:
Linux: elasticsearch-7.5.1-linux-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz
macOS: elasticsearch-7.5.1-darwin-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-darwin-x86_64.tar.gz
Windows: elasticsearch-7.5.1-windows-x86_64.zip
2.解压压缩文件:
Linux:
tar -xvf elasticsearch-7.5.1-linux-x86_64.tar.gz
macOS:
tar -xvf elasticsearch-7.5.1-darwin-x86_64.tar.gz
Windows PowerShell:
Expand-Archive elasticsearch-7.5.1-windows-x86_64.zip
从 bin
目录启动Elasticsearch:
cd elasticsearch-7.5.1/bin
./elasticsearch
Windows:
cd elasticsearch-7.5.1\bin
.\elasticsearch.bat
现在,您已经建立并运行了一个单节点Elasticsearch集群!
4.启动另外两个Elasticsearch实例,以便您可以看到典型的多节点集群的行为。您需要为每个节点指定唯一的数据和日志路径。
Linux和macOS:
./elasticsearch -Epath.data=data2 -Epath.logs=log2
./elasticsearch -Epath.data=data3 -Epath.logs=log3
Windows:
.\elasticsearch.bat -E path.data=data2 -E path.logs=log2
.\elasticsearch.bat -E path.data=data3 -E path.logs=log3
附加节点被分配了唯一的ID。因为您在本地运行有三个节点,所以它们会自动与第一个节点一起加入集群。
5.使用cat health API验证三节点集群是否正在运行。cat API以比原始JSON更易于阅读的格式返回有关集群和索引的信息。
您可以通过向Elasticsearch REST API提交HTTP请求来直接与集群交互。本指南中的大多数示例使您能够复制适当的cURL命令并将请求从命令行提交到本地Elasticsearch实例。如果已安装并正在运行Kibana,则也可以打开Kibana并通过开发控制台提交请求。
当您准备开始在自己的应用程序中使用Elasticsearch时,您将需要签出 Elasticsearch语言客户端。
GET /_cat/health?v
该响应表明elasticsearch
集群的状态为,green
并且它具有三个节点:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1565052807 00:53:27 elasticsearch green 3 3 6 3 0 0 0 0 - 100.0%
如果只运行一个Elasticsearch实例,群集状态将保持黄色。单个节点群集功能齐全,但无法将数据复制到另一个节点以提供恢复能力。副本分片必须可用,群集状态才能为绿色。如果群集状态为红色,则某些数据不可用。
其他安装选择
从存档文件安装Elasticsearch,使您可以轻松地在本地安装和运行多个实例,以便进行尝试。要运行一个实例,您可以在Docker容器中运行Elasticsearch,在Linux上使用DEB或RPM软件包安装Elasticsearch,在macOS上使用Homebrew进行安装,或者在Windows上使用MSI软件包安装程序进行安装。有关更多信息,请参见安装Elasticsearch。
设置Elasticsearch
安装Elasticsearch
从Linux或MacOS上的存档安装Elasticsearch
下载并安装 Linux 存档
可以按以下方式下载和安装用于Elasticsearch v7.5.1的Linux档案:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.5.1-linux-x86_64.tar.gz.sha512 # 1
tar -xzf elasticsearch-7.5.1-linux-x86_64.tar.gz
cd elasticsearch-7.5.1/ # 2
- 比较下载的 .tar.gz 存档的 SHA 和已发布的校验和,应输出
elasticsearch-{version}-linux-x86_64.tar.gz: OK
。 - 此目录称为$ES_HOME。
或者,您可以下载以下程序包,其中仅包括 Apache 2.0 许可代码:https://artifacts.elastic.co/...
下载并安装MacOS的存档
可以按以下方式下载和安装用于Elasticsearch v7.5.1的MacOS存档:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-darwin-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-darwin-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.5.1-darwin-x86_64.tar.gz.sha512 # 1
tar -xzf elasticsearch-7.5.1-darwin-x86_64.tar.gz
cd elasticsearch-7.5.1/ # 2
- 比较下载的 .tar.gz 存档的 SHA 和已发布的校验和,应输出
elasticsearch-{version}-linux-x86_64.tar.gz: OK
。 - 此目录称为$ES_HOME。
或者,您可以下载以下程序包,其中仅包括 Apache 2.0 许可代码:https://artifacts.elastic.co/...
启用系统索引的自动创建
某些商业功能会在弹性搜索中自动创建系统索引。默认情况下,弹性搜索配置为允许自动创建索引,并且不需要其他步骤。但是,如果在 Elasticsearch 中禁用了自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引:
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
重要的:
如果您使用的是 Logstash 或 Beats,则很可能在操作中需要其他索引名称。auto_create_index设置,确切的值取决于您的本地配置。如果您不确定环境的正确值,可以考虑将该值设置为 *,从而允许自动创建所有索引。
从命令行运行Elasticsearch
Elasticsearch可以从命令行启动,如下所示:
./bin/elasticsearch
默认情况下,Elasticsearch在前台运行,将其日志打印到标准输出 (stdout),并可以通过按 Ctrl-C 停止。
注意:
使用 Elasticsearch 打包的所有脚本都需要支持数组的 Bash 版本,并假定 Bash 在 /bin/bash 上可用。因此,Bash 应该直接或通过符号链接在此路径上可用。
日志消息可以在$ES_HOME/logs/
目录中找到。
要关闭Elasticsearch,请终止pid
文件中记录的进程ID:
pkill -F pid
在命令行中配置Elasticsearch$ES_HOME/config/elasticsearch.yml
默认情况下,Elasticsearch从文件中加载其配置。
可以在命令行上使用以下-E
语法在配置文件中指定设置:
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
通常,任何群集范围的设置(如 cluster.name)都应添加到 elasticsearch.yml 配置文件中,而任何特定于节点的设置(如node.name)可以在命令行上指定。
检查Elasticsearch运行
您可以测试你的Elasticsearch节点通过发送一个HTTP请求:
http://192.168.160.129:9200/
应该会给您返回这样的答复:
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "xKGXT35aQpy2f7yznRbL7A",
"version" : {
"number" : "7.5.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "3ae9ac9a93c95bd0cdc054951cf95d88e1e18d96",
"build_date" : "2019-12-16T22:57:37.835892Z",
"build_snapshot" : false,
"lucene_version" : "8.3.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
日志打印到stdout可以使用命令行上-q或--quiet选项被禁用。
作为后台启动
要将Elasticsearch作为后台程序运行,请在命令中指定-d
,然后使用-p
将进程ID记录在文件中:
./bin/elasticsearch -d -p pid
日志消息可以在$ES_HOME/logs/
目录中找到。
要关闭Elasticsearch,请终止pid
文件中记录的进程ID:
pkill -F pid
在命令行中配置Elasticsearch$ES_HOME/config/elasticsearch.yml
默认情况下,Elasticsearch从文件中加载其配置。
可以在命令行上使用以下-E
语法在配置文件中指定设置:
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
通常,任何群集范围的设置(如 cluster.name)都应添加到 elasticsearch.yml 配置文件中,而任何特定于节点的设置(如node.name)可以在命令行上指定。
Elasticsearch目录布局
存档是完全自包含的。默认情况下,所有文件和目录都包含在$ES_HOME中,即解压缩存档时创建的目录。
这非常方便,因为您不必创建任何目录即可开始使用Elasticsearch,卸载Elasticsearch与删除$ES_HOME目录一样简单。但是,建议更改配置目录、数据目录和日志目录的默认位置,以便以后不会删除重要数据。
类型 | 描述 | 默认位置 | 设置 |
---|---|---|---|
home | Elasticsearch主目录或$ES_HOME
|
通过解压缩存档创建的目录 | |
bin | 二进制脚本,包括elasticsearch 启动节点和elasticsearch-plugin 安装插件 |
$ES_HOME/bin |
|
conf | 配置文件包括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 |
使用RPM安装Elasticsearch
可以从我们的网站或我们的RPM存储库中下载Elasticsearch的RPM。它可用于在任何基于RPM的系统上安装Elasticsearch,例如OpenSuSE,SLES,Centos,Red Hat和Oracle Enterprise。
使用旧版本的RPM的发行版(例如SLES 11和CentOS 5)不支持RPM安装。请参阅从Linux或MacOS上的存档安装Elasticsearch。
根据Elastic许可,可以免费使用此软件包。它包含开放源代码和免费的商业功能以及对付费商业功能的访问。开始30天试用,以试用所有付费商业功能。有关弹性许可级别的信息,请参阅“订阅”页面。
最新的稳定版本的Elasticsearch可在“下载Elasticsearch”页面上找到。其他版本可以在“过去发行版”页面上找到。
Elasticsearch包含来自JDK维护者(GPLv2 + CE)的OpenJDK捆绑版。要使用自己的Java版本,请参阅JVM版本要求。
导入Elasticsearch PGP密钥
我们使用带有指纹的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 的发行版目录中,或在基于 OpenSuSE 的发行版 /etc/zypp/repos.d/
目录中创建名为elasticsearch.repo
的文件,其中包含:
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
您的存储库就可以使用了。您现在可以使用以下命令之一安装Elasticsearch:
sudo yum install --enablerepo=elasticsearch elasticsearch # 1
sudo dnf install --enablerepo=elasticsearch elasticsearch # 2
sudo zypper modifyrepo --enable elasticsearch && \
sudo zypper install elasticsearch; \
sudo zypper modifyrepo --disable elasticsearch # 3
- 在 CentOS 和较旧的基于红帽的发行版上使用 yum。
- 在 Fedora 和其他较新的红帽发行版上使用 dnf。
- 在基于 OpenSUSE 的发行版上使用 zypper
注意:
默认情况下,已配置的存储库是禁用的。这样就消除了elasticsearch
在升级系统其余部分时意外升级的可能性。每个安装或升级命令必须显式启用存储库,如上面的示例命令所示。
也可以使用仅包含Apache 2.0许可下可用功能的替代软件包。要安装它,请baseurl
在elasticsearch.repo
文件中使用以下命令:
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
手动下载并安装RMP
可以从网站上下载并安装Elasticsearch RPM for v7.5.1:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-7.5.1-x86_64.rpm.sha512 # 1
sudo rpm --install elasticsearch-7.5.1-x86_64.rpm
比较下载的RPM的SHA和应该输出的已发布校验和elasticsearch-{version}-x86_64.rpm: OK
。
或者,您可以下载以下软件包,其中仅包含Apache 2.0许可下可用的功能:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.5.1-x86_64.rpm
注意:
在基于systemd的发行版上,安装脚本将尝试设置内核参数(例如vm.max_map_count
)。您可以通过掩盖systemd-sysctl.service单元来跳过此步骤。
启用自动创建系统索引
一些商业功能会在Elasticsearch中自动创建系统索引。默认情况下,Elasticsearch配置为允许自动创建索引,并且不需要其他步骤。但是,如果你有Elasticsearch禁用自动创建索引,您必须配置 action.auto_create_index在elasticsearch.yml允许商业功能创建以下指标:
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
重要:
如果使用Logstash或Beats,则很可能需要在action.auto_create_index
设置中使用其他索引名称,而确切的值将取决于本地配置。如果不确定环境的正确值,可以考虑将该值设置为*
允许自动创建所有索引的值。
SysVinit
与systemd
安装后,Elasticsearch不会自动启动。如何启动和停止Elasticsearch取决于您的系统使用的是SysVinit
还是systemd
(由较新的发行版使用)。您可以通过运行以下命令来确定正在使用哪个:
ps -p 1
使用SysV运行Elasticsearchinit
使用chkconfig命令将Elasticsearch配置为在系统启动时自动启动:
sudo chkconfig --add elasticsearch
可以使用以下service
命令启动和停止Elasticsearch:
sudo -i service elasticsearch start
sudo -i service elasticsearch stop
如果Elasticsearch由于任何原因启动失败,它将把失败原因打印到STDOUT。日志文件可以在/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服务不会在systemd
日志中记录信息。要启用日志记录,必须从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/s...。
检查Elasticsearch是正在运行
您可以通过向localhost或远程服务主机上的端口 9200 发送 HTTP 请求来测试Elasticsearch节点是否正在运行:
GET /
应该给你这样的回应:
{
"name" : "Cp8oag6",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
"version" : {
"number" : "7.5.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "f27399d",
"build_date" : "2016-03-30T09:51:41.449Z",
"build_snapshot" : false,
"lucene_version" : "8.3.0",
"minimum_wire_compatibility_version" : "1.2.3",
"minimum_index_compatibility_version" : "1.2.3"
},
"tagline" : "You Know, for Search"
}
弹性搜索默认使用 /etc/elasticsearch
进行运行时配置。此目录的所有权和此目录中的所有文件在包安装时设置为 root:elasticsearch
,并且该目录设置了 setgid
标志,以便使用此所有权创建在 /etc/elasticsearch下创建的任何文件和子目录(例如,如果使用密钥库工具创建密钥库)。预期将维护此权限,以便Elasticsearch进程可以通过组权限读取此目录下的文件。
/etc/elasticsearch/elasticsearch.yml默认情况下,Elasticsearch从文件中加载其配置 。在配置Elasticsearch中说明了此配置文件的格式。
RPM还具有一个系统配置文件(/etc/sysconfig/elasticsearch
),该文件可让您设置以下参数:
JAVA_HOME | 设置要使用的自定义Java路径。 |
MAX_OPEN_FILES | 最大打开文件数,默认为65535 。 |
MAX_LOCKED_MEMORY | 最大锁定内存大小。如果在elasticsearch.yml 中使用 boottrap.memory_lock 选项,则设置为无限制。 |
MAX_MAP_COUNT | 一个进程可能具有的最大内存映射区域数。如果mmapfs 用作索引存储类型,请确保将其设置为较高的值。有关了解更多信息,请查看有关max_map_count 的 Linux内核文件 。这是通过sysctl 在启动Elasticsearch之前设置的。默认为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的目录布局
RPM将配置文件,日志和数据目录放置在基于RPM的系统的适当位置:
类型 | 描述 | 默认位置 | 设置 |
---|---|---|---|
home | 弹性搜索主目录或$ES_HOME | /usr/share/elasticsearch | |
bin | 二进制脚本,包括elasticsearch 启动节点和elasticsearch-plugin 安装插件 |
/usr/share/elasticsearch/bin | |
conf | 配置文件包括elasticsearch.yml
|
/etc/elasticsearch | ES_PATH_CONF |
conf | 环境变量包括堆大小,文件描述符。 | /etc/sysconfig/elasticsearch |
|
data | 节点上分配的每个索引/分片的数据文件的位置。可以容纳多个位置。 | /var/lib/elasticsearch | path.data |
jdk | 用于运行弹性搜索的捆绑 Java 开发工具包。可以通过在 /etc/sysconfig/elasticsearch 中设置JAVA_HOME 环境变量来覆盖 |
/usr/share/elasticsearch/jdk | |
logs | 日志文件位置。 | /var/log/elasticsearch | path.logs |
plugins | 插件文件的位置。每个插件将包含在一个子目录中。 | /usr/share/elasticsearch/plugins | |
repo | 共享文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放置在此处指定的任何目录的任何子目录中。 | 未配置 | path.repo |
现在,您已经建立了一个测试Elasticsearch环境。在开始进行认真的开发或使用Elasticsearch投入生产之前,您必须进行一些附加设置:
- 了解如何配置Elasticsearch。
- 配置重要的Elasticsearch设置。
- 配置重要的系统设置。
配置Elasticsearch
设置JVM选项
您几乎不需要更改Java虚拟机(JVM)选项。如果这样做,最可能的更改是设置堆大小。本文档的其余部分详细说明了如何设置JVM选项。
设置JVM选项(包括系统属性和JVM标志)的首选方法是通过jvm.options
配置文件。该文件的默认位置是config/jvm.options
此文件包含使用特殊语法的以行分隔的JVM参数列表:
仅由空格组成的行将被忽略
以开头的行#
被视为注释,并被忽略
# this is a comment
行开头一个 a
被视为独立于 JVM 版本应用的 JVM 选项
-Xmx2g
行以数字开头,后跟一个 :
其次一个 -
被视为是只适用于JVM的版本号相匹配的JVM选项
8:-Xmx2g
行以数字开头,后跟一个 -
其次一个 :
被视为 JVM 选项,仅当 JVM 的版本大于或等于所配置的版本号
8-:-Xmx2g
行以数字开头,后跟一个 -
后跟一个数字,后跟一个 :
被视为 JVM 选项,仅当 JVM 的版本位于两个数字范围内时才适用
8-9:-Xmx2g
所有其他行被拒绝
您可以将自定义JVM标志添加到此文件,然后将此配置签入版本控制系统。
设置Java虚拟机选项的另一种机制是通过ES_JAVA_OPTS
环境变量。例如:
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch
使用RPM或Debian软件包时,ES_JAVA_OPTS可以在系统配置文件中指定 。
JVM具有用于观察JAVA_TOOL_OPTIONS
环境变量的内置机制。我们有意在打包脚本中忽略此环境变量。这样做的主要原因是,在某些操作系统(例如Ubuntu)上,默认情况下通过此环境变量安装了代理,我们不希望它们干扰Elasticsearch。
此外,其他一些Java程序也支持JAVA_OPTS
环境变量。这不是JVM内置的机制,而是生态系统中的约定。但是,我们不支持该环境变量,而是通过上述jvm.options
文件或环境变量来支持设置JVM选项ES_JAVA_OPTS
。
安全设定
某些设置是敏感的,仅依靠文件系统权限来保护其值是不够的。对于此用例,Elasticsearch提供了密钥库和elasticsearch-keystore
用于管理密钥库中设置的工具。
此处的所有命令都应以运行Elasticsearch的用户身份运行。
设计仅从密钥库中读取一些设置。但是,密钥库没有验证来阻止不支持的设置。将不支持的设置添加到密钥库将导致Elasticsearch无法启动。请参阅每个设置的文档,以了解是否将其作为密钥库的一部分来支持。
仅在重新启动Elasticsearch之后,对密钥库的所有修改才会生效。
elasticsearch密钥库当前仅提供混淆。将来将添加密码保护。
就像elasticsearch.yml
配置文件中的常规设置一样,需要在集群的每个节点上指定这些设置。当前,所有安全设置都是特定于节点的设置,在每个节点上必须具有相同的值。
创建密钥库
要创建elasticsearch.keystore
,请使用以下create
命令:
bin/elasticsearch-keystore create
文件elasticsearch.keystore
将与elasticsearch.yml
一起创建。
列出密钥库中的设置
密钥库中的设置列表可通过以下list
命令获得:
bin/elasticsearch-keystore list
添加字符串设置
可以使用以下add
命令来添加敏感的字符串设置,例如云插件的身份验证凭据:
bin/elasticsearch-keystore add the.setting.name.to.set
该工具将提示您输入设置值。要通过stdin传递值,请使用--stdin
标志:
cat /file/containing/setting/value | bin/elasticsearch-keystore add --stdin the.setting.name.to.set
该工具将提示您输入设置值。要通过stdin传递值,请使用--stdin
标志:
cat /file/containing/setting/value | bin/elasticsearch-keystore add --stdin the.setting.name.to.set
添加文件设置
您可以使用以下add-file
命令添加敏感文件,例如云插件的身份验证密钥文件。确保将文件路径作为参数包含在设置名称之后。
bin/elasticsearch-keystore add-file the.setting.name.to.set /path/example-file.json
要从密钥库中删除设置,请使用以下remove
命令:
bin/elasticsearch-keystore remove the.setting.name.to.remove
升级密钥库
有时,密钥库的内部格式会更改。从程序包管理器安装Elasticsearch时,将在程序包升级期间将磁盘上的密钥库升级到新格式。在其他情况下,Elasticsearch将在节点启动期间执行此类升级。这要求Elasticsearch对包含密钥库的目录具有写权限。或者,您可以使用以下upgrade
命令手动执行此类升级:
bin/elasticsearch-keystore upgrade
增值的安全设置
就像中的设置值一样elasticsearch.yml
,对密钥库内容的更改不会自动应用于正在运行的elasticsearch节点。重新读取设置需要重新启动节点。但是,某些安全设置被标记为可重载。可以重新读取此类设置并将其应用到正在运行的节点上。
所有安全设置(可重新加载或不可重新加载)的值在所有群集节点上必须相同。进行所需的安全设置更改后,使用以下bin/elasticsearch-keystore add
命令,调用:
POST _nodes/reload_secure_settings
该API将在每个群集节点上解密并重新读取整个密钥库,但是将仅应用可重载的安全设置。直到下次重新启动,对其他设置的更改才会生效。调用返回后,重新加载已完成,这意味着依赖于这些设置的所有内部数据结构均已更改。从头开始,所有设置看起来都应该具有新值。
更改多个可重新加载的安全设置时,请在每个群集节点上修改所有这些设置,然后发出reload_secure_settings
呼叫,而不是在每次修改后重新加载。
有以下可重新加载的安全设置:
记录配置
Elasticsearch使用Log4j 2进行日志记录。可以使用log4j2.properties文件配置Log4j 2。Elasticsearch公开三个属性${sys:es.logs.base_path}, ${sys:es.logs.cluster_name}以及${sys:es.logs.node_name}可以在配置文件中引用,以确定日志文件的位置。该属性${sys:es.logs.base_path}将解析为日志目录, ${sys:es.logs.cluster_name}将解析为群集名称(在默认配置中用作日志文件名的前缀),${sys:es.logs.node_name}并将解析为节点名称(如果显式设置了节点名称)。
例如,如果你的日志目录(path.logs
)是/var/log/elasticsearch
和您的群集名为production
然后${sys:es.logs.base_path}
将解析/var/log/elasticsearch
和${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
将解析/var/log/elasticsearch/production.log
。
######## Server JSON ############################
# 1 配置`RollingFile`附加器
appender.rolling.type = RollingFile
appender.rolling.name = rolling
# 2 登录到`/var/log/elasticsearch/production_server.json`
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json
# 3 使用JSON布局。
appender.rolling.layout.type = ESJsonLayout
# 4 `type_name`是填充`type`字段中的标志`ESJsonLayout`。解析日志时,可以更轻松地区分不同类型的日志。
appender.rolling.layout.type_name = server
# 5 将日志滚动到`/var/log/elasticsearch/production-yyyy-MM-dd-i.json`;日志将在每卷上压缩并`i`递增
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz
appender.rolling.policies.type = Policies
# 6 使用基于时间的滚动策略
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
# 7 每天滚动日志
appender.rolling.policies.time.interval = 1
# 8 在天数边界上对齐滚动(而不是每24小时滚动一次)
appender.rolling.policies.time.modulate = true
# 9 使用基于大小的滚动策略
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
# 10 256 MB后滚动日志
appender.rolling.policies.size.size = 256MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
# 11 滚动日志时使用删除操作
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
# 12 仅删除与文件模式匹配的日志
appender.rolling.strategy.action.condition.type = IfFileName
# 13 模式是仅删除主日志
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
# 14 仅当我们累积了太多压缩日志时才删除
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
# 15 压缩日志的大小条件为2 GB
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB
################################################
######## Server - old style pattern ###########
appender.rolling_old.type = RollingFile
appender.rolling_old.name = rolling_old
# 1 `old style`模式追加器的配置。这些日志将保存在`*.log`文件中,如果存档则将保存在文件中`* .log.gz`。请注意,应将其视为已弃用,并将在将来删除。
appender.rolling_old.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log
appender.rolling_old.layout.type = PatternLayout
appender.rolling_old.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n
appender.rolling_old.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.old_log.gz
Log4j 的配置解析被任何无关的空白混淆;如果您复制并粘贴此页面上的任何 Log4j 设置,或一般输入任何 Log4j 配置,请确保修剪前置空格和尾部空格。
请注意,您可以替换.gz
为.zip
inappender.rolling.filePattern
以使用zip格式压缩滚动日志。如果删除.gz
扩展名,则日志在滚动时将不会被压缩。
如果要在指定时间段内保留日志文件,则可以将过渡策略与删除操作一起使用。
# 配置`DefaultRolloverStrategy`
appender.rolling.strategy.type = DefaultRolloverStrategy
# 配置`Delete`用于处理翻转的操作
appender.rolling.strategy.action.type = Delete
# Elasticsearch日志的基本路径
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
# 处理过渡时适用的条件
appender.rolling.strategy.action.condition.type = IfFileName
# 从与glob匹配的基本路径中删除文件`${sys:es.logs.cluster_name}-*`;这是日志文件滚动到的位置;仅删除滚动的Elasticsearch日志,而不删除过时和慢速日志,这是必需的
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
# 嵌套条件适用于与glob匹配的文件
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified
# 保留日志七天
appender.rolling.strategy.action.condition.nested_condition.age = 7D
可以加载多个配置文件(在这种情况下,它们将被合并),只要它们被命名log4j2.properties并以Elasticsearch config目录作为祖先即可。这对于公开其他记录器的插件很有用。记录器部分包含Java软件包及其相应的日志级别。追加器部分包含日志的目标。可以在Log4j文档中找到有关如何自定义日志记录和所有受支持的附加程序的广泛信息 。
配置日志级别
- 通过命令行:(
-E <name of logging hierarchy>=<level>
例如,-E logger.org.elasticsearch.transport=trace
)。当您在单个节点上临时调试问题(例如,启动问题或开发过程中)时,这是最合适的。 - 通过
elasticsearch.yml
:(<name of logging hierarchy>: <level>
例如,logger.org.elasticsearch.transport: trace
)。当您临时调试问题但未通过命令行(例如,通过服务)启动Elasticsearch或希望更永久地调整日志记录级别时,这是最合适的。 -
通过集群设置:
PUT /_cluster/settings { "transient": { "<name of logging hierarchy>": "<level>" } }
例如:
PUT /_cluster/settings { "transient": { "logger.org.elasticsearch.transport": "trace" } }
当您需要动态调整正在运行的群集上的日志记录级别时,这是最合适的。
-
通过
log4j2.properties
:logger.<unique_identifier>.name = <name of logging hierarchy> logger.<unique_identifier>.level = <level>
例如:
logger.transport.name = org.elasticsearch.transport logger.transport.level = trace
当您需要对记录器进行细粒度控制时(例如,要将记录器发送到另一个文件,或以其他方式管理记录器;这是一种罕见的用例),这是最合适的。
弃用日志
除了常规日志记录外,Elasticsearch还允许您启用不赞成使用的操作的日志记录。例如,这使您可以及早确定是否将来需要迁移某些功能。默认情况下,在WARN级别启用弃用日志记录,该级别将发出所有弃用日志消息。
logger.deprecation.level = warn
这将在您的日志目录中创建每日滚动弃用日志文件。定期检查此文件,尤其是在您打算升级到新的主要版本时。
默认的日志记录配置已将弃用日志的滚动策略设置为在1 GB之后滚动和压缩,并最多保留五个日志文件(四个滚动日志和活动日志)。
通过将弃用日志级别设置为以下错误,可以在config/log4j2.properties
文件中禁用它:
logger.deprecation.name = org.elasticsearch.deprecation
logger.deprecation.level = error
如果X-Opaque-Id
用作HTTP标头,则可以确定触发过时功能的原因。用户ID包含X-Opaque-ID
在弃用JSON日志的字段中。
{
"type": "deprecation",
"timestamp": "2019-08-30T12:07:07,126+02:00",
"level": "WARN",
"component": "o.e.d.r.a.a.i.RestCreateIndexAction",
"cluster.name": "distribution_run",
"node.name": "node-0",
"message": "[types removal] Using include_type_name in create index requests is deprecated. The parameter will be removed in the next major version.",
"x-opaque-id": "MY_USER_ID",
"cluster.uuid": "Aq-c-PAeQiK3tfBYtig9Bw",
"node.id": "D7fUYfnfTLa2D7y-xw6tZg"
}
JSON日志格式
为了简化对Elasticsearch日志的解析,现在以JSON格式打印日志。这由Log4J布局属性配置appender.rolling.layout.type = ESJsonLayout
。此布局需要type_name
设置一个属性,该属性用于在解析时区分日志流。
appender.rolling.layout.type = ESJsonLayout
appender.rolling.layout.type_name = server
每行包含一个JSON文档,其属性在中配置ESJsonLayout。有关更多详细信息,请参见此类javadoc。但是,如果JSON文档包含异常,它将被打印在多行上。第一行将包含常规属性,随后的行将包含格式为JSON数组的stacktrace。
您仍然可以使用自己的自定义布局。为此,请appender.rolling.layout.type
使用其他布局替换该行。请参阅以下示例:
appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %.-10000m%n
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
审核设置
跨集群复制设置
转换设定
索引生命周期管理设置
许可设置
机器学习设置
监控设定
在Elasticsearch中监控设置
默认情况下,监控已启用,但数据收集已禁用。要启用数据收集,请使用 xpack.monitoring.collection.enabled
的设置。
您可以在elasticsearch.yml
文件中配置这些监控设置。您还可以使用集群更新设置API动态设置其中一些设置。
群集设置优先于elasticsearch.yml
文件中的设置。
要调整监控数据的显示方式,请配置 kibana.yml 中的 xpack.monitoring设置。要控制如何从 Logstash 收集监视数据,请配置 logtash.yml 中的 xpack.monitoring设置。
有关更多信息,请参阅监控集群。
常规监控设置
xpack.monitoring.enabled
设置为true
(默认值)以对节点上的Elasticsearch启用Elasticsearch X-Pack监控。
要启用数据收集,还必须将设置xpack.monitoring.collection.enabled
为true
。默认值为false
。
监控收集数据
这些xpack.monitoring.collection
设置控制如何从Elasticsearch节点收集数据。您可以使用集群更新设置API动态更改所有监视收集设置。
xpack.monitoring.collection.enabled
(动态)
[6.3.0] 在 6.3.0 中添加为 true,以便收集监控数据。当此设置为 false(默认)时,不会收集Elasticsearch监控数据,并且将忽略来自其他源(如 Kibana、Beats 和 Logstash)的所有监控数据。
xpack.monitoring.collection.interval
(动态)
从 7.0.0 开始,不再支持将设置为 -1 来禁用数据收集。在 6.3.0 中已弃用。使用 xpack.monitoring.collection.enabled
设置为 false
。
控制数据样本的收集频率。默认值为 10s。如果修改收集间隔,请将 kibana.yml 中的 xpack.min_interval_seconds 选项设置为相同的值。
xpack.monitoring.elasticsearch.collection.enabled
(动态)
控制是否应收集有关Elasticsearch集群的统计信息。默认为true
。这与xpack.monitoring.collection.enabled不同,后者允许您启用或禁用所有监视收集。但是,此设置只是禁用了Elasticsearch数据的收集,同时仍然允许其他数据(例如,Kibana,Logstash,Beats或APM Server监视数据)通过此群集。
xpack.monitoring.collection.cluster.stats.timeout
(动态)
(时间值)用于收集群集统计信息的超时。默认值为 10s。
xpack.monitoring.collection.node.stats.timeout
(动态)
(时间值)收集节点统计信息的超时时间。默认为10s
。
xpack.monitoring.collection.indices(动态)
控制监控从哪个索引收集数据。默认为所有索引。将索引名称指定为以逗号分隔的列表,例如test1,test2,test3
。名称可以包括通配符,例如test*
。您可以在前缀前明确排除索引-
。例如test*,-test3
将监测,与开始的所有索引test
除外test3
。系统索引(例如.security *或.kibana *)始终以开头.
,通常应对其进行监视。考虑添加.*
到索引列表中,以确保监视系统索引。例如.*,test*,-test3
xpack.monitoring.collection.index.stats.timeout
(动态)
时间值)用于收集索引统计信息的超时。默认为10s。
xpack.monitoring.collection.index.recovery.active_only
(动态)
控制是否收集所有回收率。设置为true
仅收集活动的恢复。默认为false
。
xpack.monitoring.collection.index.recovery.timeout
(动态)
(时间值)用于收集恢复信息的超时。默认为10s
。
xpack.monitoring.history.duration
(动态)
(时间值)保留期限,超过该期限后,将自动删除监视导出器创建的索引。默认为7d
(7天)。
此设置的最小值1d
(1天)以确保正在监视某些内容,并且不能将其禁用。
此设置目前仅影响本地类型的导出器。使用 http 导出器创建的索引不会自动删除。
xpack.monitoring.exporters
配置代理在何处存储监视数据。默认情况下,代理使用本地导出程序,该导出程序为安装了该群集的群集上的监视数据编制索引。使用HTTP导出器将数据发送到单独的监视群集。有关更多信息,请参阅本地导出器设置,HTTP导出器设置及其工作方式。
安全设定
SQL访问设置
观察者设置
重要的Elasticsearch配置
path.data 和 path.logs
如果使用 .zip 或 .tar.gz 存档,则数据和日志目录是 $ES_HOME 的子文件夹。如果这些重要文件夹保留在其默认位置,则在将elasticsearch升级到新版本时,它们被删除的风险很高。
在生产使用中,您几乎肯定会想要更改数据和日志文件夹的位置:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
RPM和Debian发行版已经设置数据和日志的自定义路径。
path.data 设置可以设置为多个路径,在这种情况下,所有路径都将用于存储数据(尽管属于单个分片的文件都将存储在相同的数据路径上):
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
cluster.name
节点只有在与群集中的所有其他节点共享其cluster.name时才能加入群集。默认名称是elasticsearch,但应将其更改为描述群集用途的适当名称。
cluster.name: logging-prod
请确保不要在不同的环境中重用相同的群集名称,否则最终可能会有节点加入错误的群集。
node.name
Elasticsearch使用node.name作为Elasticsearch的特定实例的可读标识符,因此它包含在许多 API 的响应中。它默认为计算机在Elasticsearch启动时具有的主机名,但可以在elasticsearch.yml 中显式配置,如下所示:
node.name: prod-data-2
network.host
默认情况下,Elasticsearch仅结合回环地址 - 例如127.0.0.1和[:: 1]。这足以在服务器上运行一个单一的开发节点。
事实上,不止一个节点可以从同一$ ES_HOME位置的单一节点上启动。这可能是用于测试Elasticsearch的能力,形成集群是有用的,但它是不推荐在产品的配置。
为了形成与其他服务器节点的集群,您的节点将需要绑定到一个非回送地址。虽然有许多网络设置,通常都需要配置为network.host:
network.host: 192.168.1.10
默认情况下,Elasticsearch假定您正在开发模式下工作。如果上述任何设置配置不正确,将发出警告写入日志文件,但您将能够启动并运行Elasticsearch节点。
一旦您配置网络设置(如 network.host),Elasticsearch就会假定您正在迁移到生产环境,并将上述警告升级到异常。这些异常将阻止Elasticsearch节点启动。这是一项重要的安全措施,可确保不会因服务器配置不当而丢失数据。
发现和集群形成设置
在投入生产之前,应配置两个重要的发现和集群形成设置,以便集群中的节点可以彼此发现并选举一个主节点。
discovery.seed_hosts
开箱即用,无需任何网络配置,Elasticsearch将绑定到可用的环回地址,并将扫描本地端口9300至9305,以尝试连接到在同一服务器上运行的其他节点。这提供了自动群集体验,而无需进行任何配置。
如果要与其他主机上的节点组成集群,则必须使用该discovery.seed_hosts设置来提供集群中其他主机 的列表,这些主机符合主机要求,并且可能处于活动状态且可联系,以播种发现过程。此设置通常应包含集群中所有符合主机要求的节点的地址。此设置包含主机数组或逗号分隔的字符串。每个值都应采用host:port或的形式host(如果未设置,则port 默认为设置的transport.profiles.default.port初始 值transport.port)。请注意,IPv6主机必须放在方括号中。此设置的默认值为127.0.0.1, [::1]。
cluster.initial_master_nodes
首次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,该步骤确定了在第一次选举中便对其票数进行计数的主资格节点的集合。在开发模式下,未配置发现设置,此步骤由节点自己自动执行。由于这种自动引导从本质上讲是不安全的,因此当您在生产模式下启动全新的集群时,必须显式列出符合资格的主机节点,并在第一次选举中对其投票进行计数。使用设置来cluster.initial_master_nodes
设置此列表。重新启动群集或将新节点添加到现有群集时,不应使用此设置。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11 #标识1
- seeds.mydomain.com #标识2
cluster.initial_master_nodes: #标识3
- master-node-a
- master-node-b
- master-node-c
标识1:如果未指定transport.profiles.default.port
,transport.port
则端口将默认为,并回退为
标识2:如果主机名解析为多个IP地址,则该节点将尝试在所有解析的地址处发现其他节点。
标识3:初始主节点应通过其标识 node.name,默认为其主机名。确保中的值 完全cluster.initial_master_nodes匹配node.name。如果您使用完全限定的域名(例如,将其 master-node-a.example.com用作节点名称),则必须在此列表中使用完全限定的名称。相反,如果node.name是裸机主机名而没有任何尾随限定符,则还必须省略中的尾随限定符cluster.initialmasternodes。
设置堆大小
默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1GB的堆。在进入生产阶段时,配置堆大小以确保Elasticsearch有足够可用的堆非常重要。
Elasticsearch将通过(最小堆大小)和(最大堆大小)设置分配jvm.options中指定的整个堆 。您应该将这两个设置设置为彼此相等。Xms Xmx
这些设置的值取决于服务器上可用的RAM数量:
- 设置Xmx和Xms你的物理内存不超过50%。Elasticsearch出于JVM堆以外的目的而需要内存,因此为此留出空间很重要。例如,Elasticsearch使用堆外缓冲区来进行有效的网络通信,依靠操作系统的文件系统缓存来有效地访问文件,而JVM本身也需要一些内存。观察Elasticsearch过程使用的内存多于该Xmx设置配置的限制,这是正常的。
Elasticsearch可用的堆越多,它可用于其内部缓存的内存就越多,但它留给操作系统用于文件系统缓存的内存就越少。同样,较大的堆可能导致较长的垃圾回收暂停。
以下是有关如何通过jvm.options文件设置堆大小的示例:
-Xms2g #1
-Xmx2g #2
- 将最小堆大小设置为2g。
- 将最大堆大小设置为2g。
也可以通过环境变量设置堆大小。这可以通过注释掉文件中的Xms和Xmx设置,jvm.options然后通过ES_JAVA_OPTS以下方式设置这些值来完成:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch #1
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch #2
- 将最小和最大堆大小设置为2GB。
- 将最小和最大堆大小设置为4000MB。
- Windows服务的堆配置与上述不同。可以为Windows服务初始填充的值可以如上所述配置,但在安装服务后会有所不同。有关其他详细信息,请查阅Windows服务文档。
重要的系统配置
虚拟内存
Elasticsearch mmapfs默认使用目录来存储其索引。默认的操作系统对mmap计数的限制可能太低,这可能会导致内存不足异常。
在Linux上,您可以通过运行以下命令来增加限制root
:
sysctl -w vm.max_map_count=262144
要永久设置此值,请更新中的vm.max_map_count
设置/etc/sysctl.conf
。要在重启后进行验证,请运行sysctl vm.max_map_count
。
RPM和Debian软件包将自动配置此设置。不需要进一步的配置。
线程数
Elasticsearch对不同类型的操作使用许多线程池。能够在需要时创建新线程很重要。确保Elasticsearch用户可以创建的线程数至少为4096。
这可以通过在开始Elasticsearch之前设置 ulimit-u 4096
,或者通过在/etc/security/limits.conf中将nproc
设置为4096
来实现,注意设置这些配置都要用root用户。
当作为服务运行时,程序包分发systemd
将自动为Elasticsearch进程配置线程数。无需其他配置。
引导检查
启动Elasticsearch
启动Elasticsearch的方法因您的安装方式而异。
存档包(.tar.gz)
如果您使用.tar.gz
软件包安装了Elasticsearch,则可以从命令行启动Elasticsearch。
在命令行中运行Elasticsearch
可以从命令行启动Elasticsearch,如下所示:
./bin/elasticsearch
默认情况下,Elasticsearch在前台运行,将其日志打印到标准输出(stdout
),可以通过按Ctrl-C
停止。
- 与Elasticsearch打包在一起的所有脚本都需要支持阵列的Bash版本,并假定Bash在以下位置可用
/bin/bash
。因此,Bash应该直接或通过符号链接在此路径上可用。
作为守护程序运行
要将Elasticsearch作为守护程序运行,请-d
在命令行上指定,然后使用以下-p
选项将进程ID记录在文件中:
./bin/elasticsearch -d -p pid
日志消息可以在$ES_HOME/logs/
目录中找到。
要关闭Elasticsearch,请终止pid
文件中记录的进程ID:
pkill -F pid
RPM和Debian软件包中提供的启动脚本负责为您启动和停止Elasticsearch进程。
存档包(.zip)
如果您在Windows上使用.zip软件包安装了Elasticsearch ,则可以从命令行启动Elasticsearch。如果您希望Elasticsearch在启动时自动启动而无需任何用户交互,则将Elasticsearch作为服务安装。
在命令行中运行Elasticsearch
可以从命令行启动Elasticsearch,如下所示:
.\bin\elasticsearch.bat
默认情况下,Elasticsearch在前台运行,将其日志打印到STDOUT
,可以通过按Ctrl-C
来停止。
Debian软件包
安装后,Elasticsearch不会自动启动。如何启动和停止Elasticsearch取决于您的系统使用的是SysVinit
还是systemd
(由较新的发行版使用)。您可以通过运行以下命令来确定正在使用哪个:
ps -p 1
使用SysV运行Elasticsearchinit
使用update-rc.d
命令将Elasticsearch配置为在系统启动时自动启动:
sudo update-rc.d elasticsearch defaults 95 10
可以使用以下service
命令启动和停止Elasticsearch:
sudo -i service elasticsearch start
sudo -i service elasticsearch stop
如果Elasticsearch由于任何原因启动失败,它将把失败原因打印到STDOUT。日志文件可以在/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服务不会在systemd
日志中记录信息。要启用日记记录,elasticsearch.service
文件中的 ExecStart
命令行中删除 --quiet
选项。
启用systemd
日志记录后,可以使用journalctl
命令提供日志记录信息:
停止Elasticsearch
Elasticsearch的有序关闭可确保Elasticsearch有机会清理和关闭未使用的资源。例如,以有序方式关闭的节点将其自身从群集中删除,将跨日志同步到磁盘,并执行其他相关的清理活动。您可以通过适当地停止Elasticsearch来帮助确保有序关闭。
将节点添加到集群
启动Elasticsearch实例时,将启动节点。Elasticsearch群集是具有相同cluster.name
属性的一组节点。当节点加入或离开群集时,群集会自动自行重组,以在可用节点之间均匀分布数据。
如果运行的是Elasticsearch的单个实例,则具有一个节点的群集。所有主分片都驻留在单个节点上。无法分配任何副本分片,因此群集状态仍为黄色。群集功能齐全,但发生故障时有数据丢失的风险。
将节点添加到群集以提高其容量和可靠性。默认情况下,节点既是数据节点,又有资格被选为控制群集的主节点。您还可以为特定目的配置新节点,例如处理引入请求。有关详细信息,请参阅Nodes。
向群集添加更多节点时,它会自动分配副本分片。当所有主分片和副本分片都处于活动状态时,群集状态将变为绿色。
要将节点添加到群集:
- 设置新的Elasticsearch实例。
- 在其
cluster.name
属性中指定群集的名称。例如,要将节点添加到日志记录程序集群,在Elasticsearch.yml
中设置cluster.name: "logging-prod"
。 - 启动Elasticsearch。节点自动发现并加入指定的群集。
有关发现和分片分配的更多信息,请参阅 发现和集群形成 以及分片分配和集群级路由。
全集群重新启动和滚动重启
在某些情况下,您需要执行全集群重启或滚动重启。在完全集群重新启动的情况下,您将关闭并重新启动集群中的所有节点,而在滚动重新启动的情况下,一次将仅关闭一个节点,因此服务不会中断。
全集群重启
1.禁用分片分配。
关闭节点时,分配过程将等待index.unassigned.node_left.delayed_timeout
一分钟(默认情况下为一分钟),然后开始将该节点上的分片复制到集群中的其他节点,这可能涉及大量I / O。由于该节点不久将要重新启动,因此该I / O是不必要的。您可以通过在关闭节点之前禁用副本分配来避免争分夺秒:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
2.停止索引并执行同步刷新。
执行同步刷新可加快分片恢复。
POST _flush/synced
执行同步刷新时,请检查响应以确保没有故障。响应正文中列出了由于挂起的索引操作而失败的同步刷新操作,尽管请求本身仍返回 200 OK 状态。如果失败,请重新发出请求。
3.暂时停止与活动机器学习作业和数据馈送关联的任务。(可选)
4.关闭所有节点。
如果您使用systemd运行Elasticsearch:
sudo systemctl stop elasticsearch.service
如果您使用 SysV init 运行Elasticsearch:
sudo -i service elasticsearch stop
如果您作为守护进程运行弹性搜索:
kill $(cat pid)
5.执行任何所需的更改。
6.重新启动节点。
如果您有专用的主节点,请先启动它们,然后等待它们形成集群并选举一个主节点,然后再继续处理数据节点。您可以通过查看日志来检查进度。
只要有足够的符合主机资格的节点相互发现,它们就会形成一个集群并选举一个主机。此时,您可以使用cat health和cat nodeAPI监视加入集群的节点:
GET _cat/health
GET _cat/nodes
_cat/health返回的状态列显示群集中每个节点的运行状况:red
、yellow
或green
。
7.等待所有节点加入群集,并报告黄色状态。
当节点加入群集时,它将开始恢复存储在本地的任何主分片。_cat/health API 最初报告status
为red
,表示并非所有主分片都已分配。
节点恢复其本地分片后,群集status
将切换到yellow
,指示已恢复所有主分片,但并非所有副本分片都已分配。这是预期的,因为您尚未重新启用分配。延迟副本的分配,直到所有节点都为yellow
,则允许主服务器分配给已具有本地分片副本的节点。
8.重新启用分配。
当所有节点都已加入集群并恢复了其主要分片后,可通过恢复cluster.routing.allocation.enable
为其默认值来重新启用分配:
当所有节点都已加入集群并恢复了其主分片后,可通过恢复cluster.routing.allocation.enable
为其默认值来重新启用分配:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
重新启用分配后,群集将开始向数据节点分配副本分片。此时可以安全地恢复索引和搜索,但如果可以等到成功分配所有主分片和副本分片且所有节点的状态为green
,则群集将恢复更快。
您可以使用_cat/health
和_cat/recovery
API监视进度:
GET _cat/health
GET _cat/recovery
9.重新启动机器学习作业。(可选的)
如果您暂时中止了与机器学习作业相关的任务,请使用 设置的升级模式API将它们恢复为活动状态:
POST _ml/set_upgrade_mode?enabled=false
如果在停止节点之前关闭了所有机器学习作业,则打开作业并从 Kibana 或使用打开的作业启动数据馈送,然后启动数据馈送 API。
滚动重启
1.禁用分片分配。
关闭节点时,分配过程将等待 index.unthe.node_left.delayed_timeout(默认情况下为一分钟),然后再开始将该节点上的分片复制到群集中的其他节点,这可能涉及大量 I/O。由于节点即将重新启动,因此无需此 I/O。在关闭节点之前,可以通过禁用副本的分配来避免争分夺秒:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
2.停止索引并执行同步刷新。
执行同步刷新可加快分片恢复。
POST _flush/synced
执行同步刷新时,请检查响应以确保没有故障。响应正文中列出了由于挂起的索引操作而失败的同步刷新操作,尽管请求本身仍返回 200 OK 状态。如果失败,请重新发出请求。
3.暂时停止与活动机器学习作业和数据馈送关联的任务。(可选)
机器学习功能需要白金许可证或更高版本。有关弹性许可证级别的详细信息,请参阅订阅页。
关闭群集时,有两个选项来处理机器学习作业和数据馈送:
-
暂时停止与机器学习作业和数据馈送关联的任务,并使用集的升级模式 API 防止打开新作业:
POST _ml/set_upgrade_mode?enabled=true
禁用升级模式时,作业将使用自动保存的最后一个模型状态恢复作业。此选项可避免在关闭期间管理活动作业的开销,并且比显式停止数据馈送和关闭作业更快。
- 停止所有数据馈送并关闭所有作业。此选项在关闭时保存模型状态。在群集重新启动后重新打开作业时,它们使用完全相同的模型。但是,保存最新模型状态所需的时间比使用升级模式要长,尤其是在具有大量具有大型模型状态的作业或作业时。
- 如果执行滚动重新启动,还可以使机器学习作业保持运行。关闭机器学习节点时,其作业会自动移动到另一个节点并还原模型状态。此选项使作业能够在关闭期间继续运行,但会增加群集的负载。
4.在滚动重新启动时关闭单个节点。
-
如果您使用
systemd
运行弹性搜索:sudo systemctl stop elasticsearch.service
-
如果您使用
SysV init
运行弹性搜索:sudo -i service elasticsearch stop
-
如果您作为守护进程运行弹性搜索:
kill $(cat pid)
5.执行任何所需的更改。
6.重新启动您更改的节点。
启动节点,并通过检查日志文件或提交_cat/nodes
请求确认它加入群集:
GET _cat/nodes
7.重新启用分片分配。
节点加入群集后,删除cluster.routing.allocation.enable
设置以启用分片分配并开始使用节点:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
8.在滚动重新启动时重复上述步骤。
当节点恢复且群集稳定时,对需要更改的每个节点重复这些步骤。
9.重新启动机器学习作业。(可选)
如果暂时停止与机器学习作业关联的任务,请使用设置的升级模式 API 将它们返回到活动状态:
POST _ml/set_upgrade_mode?enabled=false
如果在停止节点之前关闭了所有机器学习作业,则打开作业并从 Kibana 或使用打开的作业启动数据馈送,然后启动数据馈送 API。
升级Elasticsearch
聚合
指标聚合
Avg聚合
平均聚合
计算从聚合文档中提取的数值平均值的single-value
指标聚合。这些值可以从文档中的特定数字字段中提取,也可以由提供的脚本生成。
假设数据由代表学生考试成绩(介于 0 和 100 之间)的文档组成,我们可以用以下数据来平均他们的分数:
POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : { "avg" : { "field" : "grade" } }
}
}
上述聚合计算所有文档的平均等级。聚合类型为 avg
,field
设置定义将计算平均值的文档的数字字段。以上将返回以下内容:
{
...
"aggregations": {
"avg_grade": {
"value": 75.0
}
}
}
聚合的名称(avg_grade上面)也用作从返回的响应中检索聚合结果的键。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。