如何在 Ubuntu 16.04 上安装和配置 Elasticsearch如何在 Ubuntu 16.04 上安装和配置 Elasticsearch如何在 Ubuntu 16.04 上安装和配置 Elasticsearch如何在 Ubuntu 16.04 上安装和配置 Elasticsearch
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 16.04 上安装和配置 Elasticsearch

介绍

Elasticsearch 是一个实时分布式搜索和分析数据的平台。它的流行是由于它的易用性、强大的功能和可扩展性。

Elasticsearch 支持 RESTful 操作。这意味着您可以结合使用 HTTP 方法(GET、POST、PUT、DELETE 等)和 HTTP URI (/collection/entry) 来操作您的数据。直观的 RESTful 方法对开发人员和用户都很友好,这也是 Elasticsearch 流行的原因之一。

Elasticsearch 是一款免费的开源软件,背后有一家实力雄厚的公司:Elastic。这种组合使其适用于从个人测试到企业集成的任何地方。

本文将向您介绍 Elasticsearch,并向您展示如何安装、配置、保护和开始使用它。

先决条件

在学习本教程之前,您需要:

    <李> 按照 Ubuntu 16.04 的初始服务器设置设置的 Ubuntu 16.04 Droplet,包括创建 sudo 非根用户。 <李> 安装了 Oracle JDK 8,您可以按照此 Java 安装文章的“安装 Oracle JDK”部分进行操作

除非另有说明,否则本教程中所有需要 root 权限的命令都应以具有 sudo 权限的非 root 用户身份运行。

第 1 步 — 下载并安装 Elasticsearch

Elasticsearch 可以直接从 elastic.co 下载 zip、tar.gz、deb 或 rpm 包。对于 Ubuntu,最好使用 deb (Debian) 包,它将安装运行 Elasticsearch 所需的一切。

首先,更新您的包索引。

  1. sudo apt-get update

下载最新的 Elasticsearch 版本,在撰写本文时为 2.3.1。

  1. wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

然后使用 dpkg 以通常的 Ubuntu 方式安装它。

  1. sudo dpkg -i elasticsearch-2.3.1.deb

这导致 Elasticsearch 安装在 /usr/share/elasticsearch/ 中,其配置文件放置在 /etc/elasticsearch 中,其初始化脚本添加在 /etc/ 中init.d/弹性搜索。

为确保 Elasticsearch 随服务器自动启动和停止,请将其初始化脚本添加到默认运行级别。

  1. sudo systemctl enable elasticsearch.service

在第一次启动 Elasticsearch 之前,请查看下一节关于推荐的最低配置。

第 2 步 — 配置 Elasticsearch

现在已经安装了 Elasticsearch 及其 Java 依赖项,是时候配置 Elasticsearch 了。 Elasticsearch 配置文件位于 /etc/elasticsearch 目录中。有两个文件:

  • elasticsearch.yml 配置 Elasticsearch 服务器设置。这是存储所有选项(日志记录选项除外)的地方,这就是为什么我们对这个文件最感兴趣的原因。
  • logging.yml 提供日志配置。一开始,您不必编辑此文件。您可以保留所有默认日志记录选项。默认情况下,您可以在 /var/log/elasticsearch 中找到生成的日志。

在任何 Elasticsearch 服务器上自定义的第一个变量是 elasticsearch.yml 中的 node.name 和 cluster.name。顾名思义,node.name 指定服务器(节点)的名称以及后者关联的集群。

如果您不自定义这些变量,将根据 Droplet 主机名自动分配一个 node.name。 cluster.name 将自动设置为默认集群的名称。

cluster.name 值由 Elasticsearch 的自动发现功能使用,以自动发现 Elasticsearch 节点并将其关联到集群。因此,如果您不更改默认值,您的集群中可能会在同一网络上发现不需要的节点。

使用 nano 或您喜欢的文本编辑器开始编辑主 elasticsearch.yml 配置文件。

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

删除 cluster.name 和 node.name 行开头的 # 字符以取消注释,然后更新它们的值。 /etc/elasticsearch/elasticsearch.yml 文件中的第一个配置更改应如下所示:

. . .
cluster.name: mycluster1
node.name: "My First Node"
. . .

这些是您可以开始使用 Elasticsearch 的最低设置。但是,建议继续阅读配置部分,以便更透彻地理解和微调 Elasticsearch。

Elasticsearch 的一个特别重要的设置是服务器的角色,它是主或从。 主服务器 负责集群的健康和稳定性。在具有大量集群节点的大型部署中,建议拥有多个专用主节点。通常,专用主控器不会存储数据或创建索引。因此,不应该有过载的机会,因为过载可能会危及集群的健康。

从服务器 用作负载数据任务的主力。即使从节点过载,集群的健康也不应该受到严重影响,只要有其他节点来承担额外的负载。

确定服务器角色的设置称为 node.master。默认情况下,节点是主节点。如果您只有一个 Elasticsearch 节点,则应将此选项保留为默认 true 值,因为始终需要至少一个主节点。或者,如果您希望将节点配置为从节点,请将 false 值分配给变量 node.master,如下所示:

. . .
node.master: false
. . .

另一个重要的配置选项是 node.data,它决定了节点是否存储数据。在大多数情况下,此选项应保留为其默认值 (true),但在两种情况下您可能不希望在节点上存储数据。一种是节点是前面提到的“专用主节点”。另一种是节点仅用于从节点获取数据和聚合结果。在后一种情况下,节点将充当搜索负载平衡器。

同样,如果您只有一个 Elasticsearch 节点,则不应更改此值。否则,要禁止在本地存储数据,请将 node.data 指定为 false,如下所示:

. . .
node.data: false
. . .

在具有许多节点的大型 Elasticsearch 部署中,另外两个重要选项是 index.number_of_shards 和 index.number_of_replicas。第一个决定索引将被分成多少块或分片。第二个定义将分布在集群中的副本数。拥有更多分片可以提高索引性能,而拥有更多副本可以加快搜索速度。

默认情况下,分片数为 5,副本数为 1。假设您仍在单节点上探索和测试 Elasticsearch,则可以仅从一个分片开始,不设置副本。因此,它们的值应该这样设置:

. . .
index.number_of_shards: 1
index.number_of_replicas: 0
. . .

您可能有兴趣更改的最后一项设置是 path.data,它决定了数据存储的路径。默认路径是 /var/lib/elasticsearch。在生产环境中,建议您使用专门的分区和挂载点来存储 Elasticsearch 数据。在最好的情况下,这个专用分区将是一个单独的存储介质,它将提供更好的性能和数据隔离。您可以像这样指定一个不同的 path.data 路径:

. . .
path.data: /media/different_media
. . .

完成所有更改后,保存并退出文件。现在您可以首次启动 Elasticsearch。

  1. sudo systemctl start elasticsearch

在尝试使用 Elasticsearch 之前,先给 Elasticsearch 一些以使其完全启动。否则,您可能会收到有关无法连接的错误。

第 3 步 — 保护 Elasticsearch

默认情况下,Elasticsearch 没有内置安全性,任何可以访问 HTTP API 的人都可以控制它。这并不总是存在安全风险,因为 Elasticsearch 仅侦听只能在本地访问的环回接口(即 127.0.0.1)。因此,只要所有服务器用户都受到信任或者这是一个专用的 Elasticsearch 服务器,就不可能进行公共访问,并且您的 Elasticsearch 足够安全。

尽管如此,如果您希望加强安全性,首先要做的是启用身份验证。身份验证由商业 Shield 插件提供。不幸的是,这个插件不是免费的,但是有一个 30 天的免费试用期可以用来测试它。它的官方页面有很好的安装和配置说明。此外,您可能唯一需要知道的是 Elasticsearch 插件安装管理器的路径是 /usr/share/elasticsearch/bin/plugin。

如果你不想使用商业插件,但你仍然必须允许远程访问 HTTP API,你至少可以使用 Ubuntu 的默认防火墙 UFW(简单防火墙)来限制网络暴露。默认情况下,UFW 已安装但未启用。如果您决定使用它,请按照下列步骤操作:

首先,创建一个规则以允许任何需要的服务。您至少需要允许 SSH 才能登录服务器。要允许全球访问 SSH,请将端口 22 列入白名单。

  1. sudo ufw allow 22

然后允许访问受信任的远程主机的默认 Elasticsearch HTTP API 端口 (TCP 9200),例如 TRUSTED_IP,如下所示:

  1. sudo ufw allow from TRUSTED_IP to any port 9200

只有在那之后使用命令启用 UFW:

  1. sudo ufw enable

最后,使用以下命令检查 UFW 的状态:

  1. sudo ufw status

如果您已正确指定规则,则输出应如下所示:

Output of java -version
Status: active To Action From -- ------ ---- 9200 ALLOW TRUSTED_IP 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

一旦您确认 UFW 已启用并保护 Elasticsearch 端口 9200,您就可以允许 Elasticsearch 侦听外部连接。为此,再次打开 elasticsearch.yml 配置文件。

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

找到包含 network.bind_host 的行,通过删除行开头的 # 字符取消注释,并将值更改为 0.0.0.0 所以它看起来像这样:

. . .
network.host: 0.0.0.0
. . .

我们指定了 0.0.0.0,以便 Elasticsearch 侦听所有接口和绑定的 IP。如果你想让它只监听一个特定的接口,你可以指定它的 IP 来代替 0.0.0.0。

要使上述设置生效,请使用以下命令重新启动 Elasticsearch:

  1. sudo systemctl restart elasticsearch

之后尝试从可信主机连接到 Elasticsearch。如果无法连接,请确保 UFW 正在运行并且已正确指定 network.host 变量。

第 4 步 — 测试 Elasticsearch

到目前为止,Elasticsearch 应该在端口 9200 上运行。您可以使用 curl、命令行客户端 URL 传输工具和一个简单的 GET 请求来测试它。

  1. curl -X GET 'http://localhost:9200'

您应该看到以下响应:

Output of curl
{ "name" : "My First Node", "cluster_name" : "mycluster1", "version" : { "number" : "2.3.1", "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39", "build_timestamp" : "2016-04-04T12:25:05Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search" }

如果您看到与上面类似的响应,则 Elasticsearch 工作正常。如果没有,请确保您已正确按照安装说明进行操作,并且您已预留一些时间让 Elasticsearch 完全启动。

要对 Elasticsearch 执行更彻底的检查,请执行以下命令:

  1. curl -XGET 'http://localhost:9200/_nodes?pretty'

在上述命令的输出中,您可以查看并验证节点、集群、应用程序路径、模块等的所有当前设置。

第 5 步 — 使用 Elasticsearch

要开始使用 Elasticsearch,让我们先添加一些数据。如前所述,Elasticsearch 使用 RESTful API,它响应通常的 CRUD 命令:创建、读取、更新和删除。为了使用它,我们将再次使用 curl。

您可以使用以下命令添加您的第一个条目:

  1. curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

您应该看到以下响应:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

通过 curl,我们向 Elasticsearch 服务器发送了一个 HTTP POST 请求。请求的 URI 是 /tutorial/helloworld/1 有几个参数:

  • tutorial是Elasticsearch中数据的索引。
  • helloworld 是类型。
  • 1是我们在上述索引和类型下的条目的id。

您可以使用 HTTP GET 请求检索第一个条目。

  1. curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

结果应如下所示:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}

要修改现有条目,您可以使用 HTTP PUT 请求。

  1. curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  2. {
  3. "message": "Hello People!"
  4. }'

Elasticsearch 应该确认修改成功,如下所示:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "created" : false }

在上面的示例中,我们将第一个条目的 message 修改为 \Hello People!。这样,版本号已自动增加到 2。

您可能已经注意到上述请求中的额外参数 pretty。它启用人类可读格式,以便您可以将每个数据字段写入新行。您还可以在检索数据时“美化”您的结果并获得更好的输出,如下所示:

  1. curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'

现在响应将采用更好的格式:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "found" : true, "_source" : { "message" : "Hello People!" } }

到目前为止,我们已经在 Elasticsearch 中添加和查询了数据。要了解其他操作,请查看 API 文档。

结论

这就是安装、配置和开始使用 Elasticsearch 的简单之处。一旦您玩够了手动查询,您的下一个任务就是开始在您的应用程序中使用它。

©2015-2025 艾丽卡 support@alaica.com