目录
启动 Elasticsearch
启动 Elasticsearch 的方法因安装方式而异。
存档包 ( .tar.gz
)
如果使用.tar.gz
包安装了 Elasticsearch ,可以从命令行启动 Elasticsearch。
从命令行运行ElasticSearch
Elasticsearch 可以从命令行启动,如下所示:
./bin/elasticsearch
默认情况下,Elasticsearch 在前台运行,将其日志打印到标准输出 ( stdout
),可以通过按Ctrl-C
停止。
NOTE
所有与 Elasticsearch 一起打包的脚本都需要一个支持数组的 Bash 版本。默认 Bash 在/bin/bash
. 因此,在此路径上Bash 应该直接或通过符号链接可用。
重要
macOS Gatekeeper 警告
Apple 推出更严格的公证要求影响了 7.6.2 Elasticsearch 相关组件的公证。如果 macOS Catalina 在第一次运行 Elasticsearch 时显示一个中断它的对话框,需要采取措施以允许它运行。
要防止 Gatekeeper 检查 Elasticsearch 文件,请在下载的
.tar.gz
存档或解压缩到的目录上运行以下命令:xattr -d -r com.apple.quarantine <archive-or-directory>
例如,如果
.tar.gz
文件被解压到默认的elasticsearch-7.6.2目录,则命令为:xattr -d -r com.apple.quarantine elasticsearch-7.6.2
另外,也可以同时为
jdk.app
和controller.app
增加安全覆盖,按照您的Mac安全打开的应用程序中如何打开尚未公证或者是从一个身份不明的开发者的应用程序的部分的说明进行处理。
作为守护进程运行
要将 Elasticsearch 作为守护进程运行,请在命令行中指定-d
,并使用以下-p
选项将进程 ID 记录在文件中:
./bin/elasticsearch -d -p pid
可在$ES_HOME/logs/
目录中找到日志消息。
要关闭 Elasticsearch,可终止pid
文件中记录的进程 ID :
pkill -F pid
存档包 ( .zip
)
如果使用.zip
软件包在 Windows 上安装 Elasticsearch ,可以从命令行启动 Elasticsearch。如果希望 Elasticsearch 在启动时自动启动而无需任何用户交互,可将 Elasticsearch 作为服务安装。
从命令行运行 Elasticsearch
Elasticsearch 可以从命令行启动,如下所示:
.\bin\elasticsearch.bat
默认情况下,Elasticsearch 在前台运行,将其日志打印到STDOUT
,并且可以通过按Ctrl-C
停止。
Debian 软件包
Elasticsearch 安装后不会自动启动。如何启动和停止 Elasticsearch 取决于系统是使用 SysV init
还是 systemd
(由较新的发行版使用)。通过运行以下命令来判断正在使用哪个:
ps -p 1
使用 SysV init
运行 Elasticsearch
使用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/
.目录的日志文件中。
默认情况下,systemd
下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以获取更多命令行选项。
Docker 镜像
如果安装了 Docker 镜像,则可以从命令行启动 Elasticsearch。根据使用的是开发模式还是生产模式,有不同的方法。请参阅Docker 运行。
MSI 包
如果使用.msi
软件包在 Windows 上安装 Elasticsearch ,可以从命令行启动 Elasticsearch。如果希望它在启动时自动启动而无需任何用户交互, 请将 Elasticsearch 安装为 Windows 服务。
从命令行运行 Elasticsearch
安装后,如果没有安装为服务并配置为安装完成时启动,Elasticsearch 可以从命令行启动,如下:
.\bin\elasticsearch.exe
命令行终端将显示类似于以下内容的输出:
默认情况下,Elasticsearch 在前台运行,将其日志打印到STDOUT,
并记录在LOGSDIRECTORY
目录的<cluster name>.log
文件中,可以通过按Ctrl-C
停止。
RPM 包
Elasticsearch 安装后不会自动启动。如何启动和停止 Elasticsearch 取决于系统是使用 SysV init
还是 systemd
(由较新的发行版使用)。您可以通过运行以下命令来判断正在使用哪个:
ps -p 1
使用 SysV init
运行 Elasticsearch
使用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/
.目录中。
默认情况下,systemd
下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
Elasticsearch 的有序关闭确保 Elasticsearch 有机会清理和关闭未完成的资源。例如,以有序方式关闭的节点将从集群中移除自身,将 translogs 同步到磁盘,并执行其他相关的清理活动。可以通过正确停止 Elasticsearch 来帮助确保有序关闭。
如果将 Elasticsearch 作为服务运行,则可以通过安装提供的服务管理功能停止 Elasticsearch。
如果直接运行 Elasticsearch或在控制台中运行 Elasticsearch,可以通过发送 control-C 来停止 Elasticsearch,或者POSIX 系统上发送SIGTERM
到Elasticsearch 进程。可以通过各种工具(例如ps
或jps
)获取要发送信号的 PID :
$ jps | grep Elasticsearch
14542 Elasticsearch
从 Elasticsearch 启动日志获取PID:
[2016-07-07 12:26:18,908][INFO ][node ] [I8hydUG] version[5.0.0-alpha4], pid[15399], build[3f5b994/2016-06-27T16:23:46.861Z], OS[Mac OS X/10.11.5/x86_64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_92/25.92-b14]
或者通过在启动时指定写入 PID 文件的位置 ( -p <path>
):
$ ./bin/elasticsearch -p /tmp/elasticsearch-pid -d
$ cat /tmp/elasticsearch-pid && echo
15516
$ kill -SIGTERM 15516
致命错误停止
在 Elasticsearch 虚拟机的生命周期中,可能会出现某些致命错误,使虚拟机处于可疑状态。此类致命错误包括内存不足错误、虚拟机内部错误和严重 I/O 错误。
当 Elasticsearch 检测到虚拟机遇到此类致命错误时,Elasticsearch 会尝试记录该错误,然后将暂停虚拟机。当 Elasticsearch 执行此类关闭时,它不会像上面描述的那样有序关闭。Elasticsearch 进程还将返回一个特殊的状态代码,指示错误的性质。
JVM 内部错误 | 128 |
内存不足错误 | 127 |
堆栈溢出错误 | 126 |
未知虚拟机错误 | 125 |
严重的 I/O 错误 | 124 |
未知的致命错误 | 1 |
向集群添加节点
当启动 Elasticsearch 实例时,实际是在启动一个node。Elasticsearch集群 是一组具有相同cluster.name
属性的节点。当节点加入或离开集群时,集群会自动重新组织自身以在可用节点之间均匀分布数据。
如果正在运行 Elasticsearch 的单个实例,则拥有一个包含一个节点的集群。所有主分片都驻留在单个节点上。无法分配副本分片,因此集群状态保持为黄色。集群功能齐全,但在发生故障时存在数据丢失的风险。
可以向集群添加节点以提高其容量和可靠性。默认情况下,一个节点既是数据节点,又有资格被选为控制集群的主节点。还可以为特定目的配置新节点,例如处理fetch请求。有关更多信息,请参阅 节点。
当向集群添加更多节点时,它会自动分配副本分片。当所有主分片和副本分片都处于活动状态时,集群状态变为绿色。
可以在本地机器上运行多个节点,以试验由多个节点组成的 Elasticsearch 集群的行为方式。要将节点添加到本地计算机上运行的集群:
- 设置一个新的 Elasticsearch 实例。
- 使用
elasticsearch.yml
中的cluster.name
设置指定集群的名称。例如,要将节点添加到logging-prod
集群,请将行cluster.name: "logging-prod"
添加到elasticsearch.yml
。 - 启动 Elasticsearch。节点自动发现并加入指定的集群。
要将节点添加到在多台机器上运行的集群,还必须设置discovery.seed_hosts以便新节点可以发现其集群的其余部分。
有关发现和分片分配的更多信息,请参阅 发现和集群形成以及分片分配和集群级路由。
全集群重启和滚动重启
在某些情况下,可能希望执行全集群重启或滚动重启。在全集群重启的情况下 ,关闭并重新启动集群中的所有节点,而在滚动重启的情况下 ,一次只关闭一个节点,因此服务不会中断。
全集群重启
-
禁用分片分配。
当关闭一个节点时,分配过程会等待
index.unassigned.node_left.delayed_timeout
(默认情况下,一分钟),然后才开始将该节点上的分片复制到集群中的其他节点,这可能涉及大量 I/O。由于节点即将重新启动,因此不需要此 I/O。可以通过在关闭节点之前禁用分配副本来避免时钟竞争 :PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "primaries" } }
-
停止索引并执行同步刷新。
执行同步刷新加速分片恢复。
POST _flush/synced
执行同步刷新时,请检查响应以确保没有失败。由于挂起的索引操作而失败的同步刷新操作列在响应正文中,尽管请求本身仍返回 200 OK 状态。如果失败,请重新发出请求。
请注意,同步刷新已在7.x版本标记为过期的,将在 8.0 中删除此功能。在 Elasticsearch 7.6 或更高版本上,刷新与同步刷新具有相同的效果。
-
暂时停止与活动机器学习作业和数据馈送相关的任务。(可选的)
机器学习功能需要白金许可证或更高版本。有关elasticsearch许可级别的更多信息,请参阅订阅页面。
关闭集群时,有两种选择来处理机器学习作业和数据馈送:
-
使用set upgrade mode API暂时停止与机器学习作业和数据馈送相关的任务,并防止打开新作业 :
POST _ml/set_upgrade_mode?enabled=true
当禁用升级模式时,作业将恢复到自动保存的最后一个模型状态。此选项避免了在关闭期间管理活动作业的开销,并且比显式停止数据馈送和关闭作业更快。
- 停止所有数据馈送并关闭所有作业。此选项保存关闭时的模型状态。在集群重新启动后重新打开作业时,它们使用完全相同的模型。但是,保存最新模型状态比使用升级模式需要更长的时间,尤其是当有大量作业或具有大型模型状态的作业时。
-
-
关闭所有节点。
-
如果使用
systemd
运行 Elasticsearch :sudo systemctl stop elasticsearch.service
-
如果使用 SysV
init
运行 Elasticsearch :sudo -i service elasticsearch stop
-
如果将 Elasticsearch 作为守护进程运行:
kill $(cat pid)
-
- 执行任何需要的更改。
-
重启节点。
如果有专用的主节点,请先启动它们并等待它们形成集群并选择一个主节点,然后再继续处理数据节点。可以通过查看日志来检查进度。
一旦有足够多的符合主节点条件的节点相互发现,它们就会形成一个集群并选举一个主节点。此时,可以使用cat health和cat nodes API 来监视加入集群的节点:
GET _cat/health GET _cat/nodes
该
status
列返回通过_cat/health
获取的每个节点在集群中的健康状态:red
,yellow
,或green
。 -
等待所有节点加入集群并报告黄色状态。
当一个节点加入集群时,它开始恢复本地存储的所有主分片。该_cat/healthAPI最初将报告
status为
red
,表明并非所有的主分片已被分配。一旦一个节点恢复了它的本地分片,集群
status
就会切换到yellow
,表明所有的主分片都已经恢复,但不是所有的副本分片都被分配了。这是意料之中的,因为尚未重新启用分配。延迟分配副本直到所有节点都yellow
后,主节点才将副本分配给已经具有本地分片副本的节点。 -
重新启用分配。
当所有节点都加入集群并恢复了它们的主分片后,通过恢复
cluster.routing.allocation.enable
到默认值来重新启用分配:PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": null } }
重新启用分配后,集群开始将副本分片分配给数据节点。此时恢复索引和搜索是安全的,但是如果可以等到所有主分片和副本分片成功分配并且所有节点的状态都为
green
,集群将恢复得更快。可以使用_cat/health和 _cat/recoveryAPI监控进度:
GET _cat/health GET _cat/recovery
-
重新启动机器学习作业。(可选的)
如果暂时停止了与机器学习作业关联的任务,请使用 set upgrade mode API将它们返回到活动状态:
POST _ml/set_upgrade_mode?enabled=false
如果在停止节点之前关闭了所有机器学习作业,请打开作业并从 Kibana 启动数据馈送,或者使用打开的作业和启动数据馈送API。
滚动重启
-
禁用分片分配。
当关闭一个节点时,分配过程会等待
index.unassigned.node_left.delayed_timeout
(默认情况下,一分钟),然后才开始将该节点上的分片复制到集群中的其他节点,这可能涉及大量 I/O。由于节点即将重新启动,因此此 I/O不是必须的。可以通过在关闭节点之前禁用副本分配来避免时钟竞争 :PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "primaries" } }
-
停止索引并执行同步刷新。
执行同步刷新可加速分片恢复。
POST _flush/synced
执行同步刷新时,请检查响应以确保没有失败。由于挂起的索引操作而失败的同步刷新操作列在响应正文中,尽管请求本身仍返回 200 OK 状态。如果失败,请重新发出请求。
请注意,同步刷新已在7.x版本标记为过期的,将在 8.0 中删除此功能。在 Elasticsearch 7.6 或更高版本上,刷新与同步刷新具有相同的效果。
-
暂时停止与活动机器学习作业和数据馈送相关的任务。(可选的)
机器学习功能需要白金许可证或更高版本。有关ElasticSearch许可级别的更多信息,请参阅订阅页面。
关闭集群时,有两种选择来处理机器学习作业和数据馈送:
-
使用set upgrade mode API暂时停止与机器学习作业和数据馈送相关的任务,并防止打开新作业 :
POST _ml/set_upgrade_mode?enabled=true
当禁用升级模式时,作业将恢复到自动保存的最后一个模型状态。此选项避免了在关闭期间管理活动作业的开销,并且比显式停止数据馈送和关闭作业更快。
- 停止所有数据馈送并关闭所有作业。此选项保存关闭时的模型状态。在集群重新启动后重新打开作业时,它们使用完全相同的模型。但是,保存最新模型状态比使用升级模式需要更长的时间,尤其是当有大量作业或具有大型模型状态的作业时。
- 如果执行滚动重启,还可以让机器学习作业继续运行。当关闭机器学习节点时,其作业会自动移动到另一个节点并恢复模型状态。此选项使作业能够在关闭期间继续运行,但会增加集群的负载。
-
-
在滚动重启的情况下关闭单个节点。
-
systemd
运行 Elasticsearch:sudo systemctl stop elasticsearch.service
-
SysV
init
运行 Elasticsearch :sudo -i service elasticsearch stop
-
Elasticsearch 作为守护进程运行:
kill $(cat pid)
-
- 执行任何需要的更改。
-
重新启动更改的节点。
启动节点并通过检查日志文件或提交
_cat/nodes
请求来确认它加入集群:GET _cat/nodes
-
重新启用分片分配。
节点加入集群后,删除
cluster.routing.allocation.enable
设置以启用分片分配并开始使用节点:PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": null } }
-
在滚动重启的情况下重复。
当节点恢复并且集群稳定后,对每个需要更改的节点重复这些步骤。
-
重新启动机器学习作业。(可选的)
如果暂时停止了与机器学习作业关联的任务,请使用 set upgrade mode API将它们返回到活动状态:
POST _ml/set_upgrade_mode?enabled=false
如果在停止节点之前关闭了所有机器学习作业,请打开作业并从 Kibana 启动数据馈送,或者使用打开的作业和启动数据馈送API。
设置 X-Pack
X-Pack 是一个 Elastic Stack 扩展,提供安全、警报、监控、报告、机器学习和许多其他功能。默认情况下,当安装 Elasticsearch 时,会安装 X-Pack。
如果想试用 X-Pack 的所有功能,可以30 天试用。在试用期结束时,可以购买订阅以继续使用 X-Pack 组件的全部功能。有关更多信息,请参阅 https://www.elastic.co/subscriptions。
配置 X-Pack Java 客户端
警告
在 7.0.0 中已弃用。
该
TransportClient
在Java的高级REST客户端中已标记为不推荐使用,将在Elasticsearch 8.0中删除。该迁移指南描述了所有需要迁移的步骤
如果要将 Java传输客户端与安装了 X-Pack 的集群一起使用,则必须下载并配置 X-Pack 传输客户端。
- 将 X-Pack 传输 JAR 文件添加到CLASSPATH。可以下载 X-Pack 发行版并手动提取 JAR 文件,也可以从 Elasticsearch Maven 存储库中获取。与任何依赖项一样,还需要其传递依赖项。下载离线使用时,请参考你的版本的 X-Pack POM 文件。
-
如果您使用 Maven,则需要在项目
pom.xml
文件中添加 X-Pack JAR 文件作为依赖项:<project ...> <repositories> <!-- add the elasticsearch repo --> <repository> <id>elasticsearch-releases</id> <url>https://artifacts.elastic.co/maven</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> ... </repositories> ... <dependencies> <!-- add the x-pack jar as a dependency --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>x-pack-transport</artifactId> <version>{version}</version> </dependency> ... </dependencies> ... </project>
-
如果您使用 Gradle,则需要将 X-Pack JAR 文件作为依赖项添加到
build.gradle
文件中:repositories { /* ... Any other repositories ... */ // Add the Elasticsearch Maven Repository maven { name "elastic" url "https://artifacts.elastic.co/maven" } } dependencies { compile "org.elasticsearch.client:x-pack-transport:{version}" /* ... */ }
-
如果在公司内使用诸如Nexus OSS之类的存储库管理器,则需要按照以下屏幕截图添加存储库:
然后在项目的
pom.xml
中,添加以下存储库和依赖项定义:<dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>x-pack-transport</artifactId> <version>{version}</version> </dependency> </dependencies> <repositories> <repository> <id>local-nexus</id> <name>Elastic Local Nexus</name> <url>http://0.0.0.0:8081/repository/elasticsearch/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
- 如果使用 Elastic Stack 安全功能,则有更多配置步骤。请参阅Java 客户端和安全性。
X-Pack 的引导程序检查
除了Elasticsearch 引导程序检查之外,还有特定于 X-Pack 功能的检查。
加密敏感数据检查
如果使用 Watcher 并选择加密敏感数据(通过设置 xpack.watcher.encrypt_sensitive_data
为true
),还必须在安全设置存储中放置一个密钥。
要通过此引导程序检查,必须在集群中的每个节点上设置xpack.watcher.encryption_key
。有关更多信息,请参阅在 Watcher 中加密敏感数据。
PKI 领域检查
如果使用 Elasticsearch 安全功能和公钥基础设施 (PKI) 领域,则必须在集群上配置传输层安全性 (TLS) 并在网络层(传输或 http)上启用客户端身份验证。有关更多信息,请参阅PKI 用户身份验证和在集群上设置 TLS。
要通过此引导程序检查,如果启用了 PKI 领域,则必须配置 TLS 并在至少一个网络通信层上启用客户端身份验证。
角色映射检查
如果使用native
或file
领域以外的领域对用户进行身份验证,则必须创建角色映射。这些角色映射定义了分配给每个用户的角色。
如果使用文件来管理角色映射,则必须配置一个 YAML 文件并将其复制到集群中的每个节点。默认情况下,角色映射存储在 ES_PATH_CONF/role_mapping.yml
. 也可以为每种类型的领域指定不同的角色映射文件,并指定其在elasticsearch.yml
文件中的位置。有关更多信息,请参阅 使用角色映射文件。
要通过此引导程序检查,角色映射文件必须存在且必须有效。角色映射文件中列出的专有名称 (DN) 也必须有效。
SSL/TLS 检查
如果启用 Elasticsearch 安全功能,除非有试用许可证,否则必须为节点间通信配置 SSL/TLS。
NOTE
使用环回接口的单节点集群没有此要求。有关详细信息,请参阅 加密通信。
要通过此引导程序检查,必须 在集群中设置 SSL/TLS。
令牌 SSL 检查
如果使用 Elasticsearch 安全功能并且启用了内置令牌服务,则必须将集群配置为对 HTTP 接口使用 SSL/TLS。需要 HTTPS 才能使用令牌服务。
特别是,如果在文件elasticsearch.yml
中设置xpack.security.authc.token.enabled
为true
,则还必须设置 xpack.security.http.ssl.enabled
为true
。有关这些设置的更多信息,请参阅安全设置和HTTP。
要通过此引导程序检查,必须启用 HTTPS 或禁用内置令牌服务。