如何在UbuntuVPS上安装Elasticsearch

来自菜鸟教程
跳转至:导航、​搜索

状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


Elasticsearch 是一个分布式、RESTful 搜索和分析平台。 它可以根据需要进行扩展,您可以立即开始在单个 DigitalOcean 液滴上使用它。 在本教程中,我们将下载、安装并开始在 Ubuntu 上使用 Elasticsearch。 提供的步骤目前已在以下平台上进行了测试:Ubuntu 12.04.3 x64 和 Ubuntu 13.10 x64。

依赖项


首先,通过运行 apt-get update 更新可用软件包列表。

接下来,我们必须安装 Java 运行时。 这里有两个选项。

  • 安装 Ubuntu 提供的 OpenJDK 运行时。
  • 安装 Elasticsearch 推荐的 Java 运行时 Oracle Java。

如果您只是想尝试一下并熟悉 Elasticsearch 或运行一小部分节点,则第一个选项非常有效。 后一种选择是 Elasticsearch 推荐的,以保证兼容性。

OpenJDK


要完成第一个选项,我们可以简单地运行 apt-get install openjdk-6-jre

甲骨文Java


对于第二个选项,我们将按照 Elasticsearch 文档中的步骤进行操作。 首先,我们必须添加一个包含 Oracle Java 运行时的存储库

sudo add-apt-repository ppa:webupd8team/java

然后我们必须运行 apt-get update 从这个新的存储库中提取包信息。 完成后,我们可以安装 Oracle Java 运行时

sudo apt-get install oracle-java7-installer

执行上述命令时,您需要接受 Oracle 二进制许可证。 如果您不同意该许可,您可以改为安装 OpenJDK 运行时。

测试您的 Java 安装


然后,您可以通过运行 java -version 检查是否安装了 Java。

这就是我们现在需要的所有依赖项,让我们开始获取和安装 Elasticsearch。

下载并安装


Elasticsearch 可以 直接从他们的站点 以 zip、tar.gz、deb 或 rpm 包的形式下载。 您无需提前执行此操作,因为我们将在下面的文本中下载我们需要的文件。

安装


鉴于 Elasticsearch 提供的下载选项,我们有几个选项:

  • 从 zip 或 tar.gz 存档安装。
  • 从 deb 包安装。
  • 从 rpm 包安装。

最后一个选项不是 Ubuntu 的方式,所以我们将忽略它。

如果您只是想玩一下 Elasticsearch,最好从 zip 或 tar.gz 存档安装。 从这些选项中的任何一个进行安装只会使运行 Elasticsearch 所需的二进制文件可用。 从 deb 包安装会完全安装 Elasticsearch 并立即启动服务器运行。 这包括在 /etc/init.d/elasticsearch 安装一个 init 脚本,它会在启动时启动 Elasticsearch。 如果你只是想玩 Elasticsearch,我建议从 zip 或 tar.gz 安装。 这样,您可以在随意启动和停止服务器的同时发现 Elasticsearch。

从 zip 或 tar.gz 存档安装


zip 和 tar.gz 下载都包含 Elasticsearch 的预编译二进制文件。

首先,在方便的地方下载源代码。 提取存档后,您将能够直接从生成的目录运行二进制文件,因此您应该将它们放置在您希望访问 Elasticsearch 的每个用户都可以访问的地方。 对于本教程,我们将只下载到当前用户的目录。 如果您将它们下载到 /tmp,它们可能会在您重新启动 VPS 时消失。 如果这是您想要的,请继续并将下载文件放在那里。 您可以通过运行mktemp -d快速在/tmp中创建一个新的临时目录。

无论如何,在继续之前,请确保您位于要将 Elasticsearch 提取到的目录中。

下载档案


运行

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.zip

或者

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz

第一个命令下载 zip 存档,第二个命令下载 tar.gz 存档。 如果您下载了 zip 包,请确保您之前运行过 apt-get install unzip 然后运行

unzip elasticsearch-0.90.7.zip

或者,如果您已经下载了 tar.gz 包,请运行

tar -xf elasticsearch-0.90.7.tar.gz

任一选项都将创建目录 elasticsearch-0.90.7。 通过输入 cd elasticsearch-0.90.7 进入该目录,您将在 bin 文件夹中找到二进制文件。

从 Debian 软件包安装


为 Ubuntu 下载的最佳软件包是 deb 软件包。 RPM 可以工作,但需要先转换,这里不做介绍。 通过运行获取 deb 包

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.deb

直接从 Debian 软件包安装是通过运行

dpkg -i elasticsearch-0.90.7.deb

这会导致 Elasticsearch 正确安装在 /usr/share/elasticsearch 中。 回想一下,从 Debian 软件包安装还会在 /etc/init.d/elasticsearch 中安装一个 init 脚本,该脚本会在启动时启动 Elasticsearch 服务器。 服务器也将在安装后立即启动。

配置文件


如果从 zip 或 tar.gz 存档安装,则可以在结果目录的 config 文件夹中找到配置文件。 如果从 Debain 包安装,配置文件位于 /etc/elasticsearch

无论哪种情况,都会有两个主要的配置文件:elasticsearch.ymllogging.yml。 第一个配置 Elasticsearch 服务器设置,毫无疑问,后者配置 Elasticsearch 使用的记录器设置。

默认情况下,“elasticsearch.yml”将只包含注释。

“logging.yml”提供基本日志记录的配置。 您可以在 /var/log/elasticsearch 中找到生成的日志。

删除 Elasticsearch 公共访问

在继续之前,您需要配置 Elasticsearch,使其无法被公共 Internet 访问——Elasticsearch 没有内置的安全性,并且可以由任何可以访问 HTTP API 的人控制。 这可以通过编辑 elasticsearch.yml 来完成。 假设您随包一起安装,请使用以下命令打开配置:

sudo vi /etc/elasticsearch/elasticsearch.yml

然后找到指定 network.bind_host 的行,然后取消注释并将值更改为 localhost,如下所示:

network.bind_host: localhost

然后在文件中的某处插入以下行,以禁用动态脚本:

script.disable_dynamic: true

保存并退出。 现在重新启动 Elasticsearch 以使更改生效:

sudo service elasticsearch restart

稍后我们将介绍其他基本配置选项,但首先我们应该测试最基本的 Elasticsearch 安装。

测试您的 Elasticsearch 安装


您现在已经将 zip 或 tar.gz 存档解压缩到一个目录,或者从 Debian 包中安装了 Elasticsearch。 无论哪种方式,您都有可用的 Elasticsearch 二进制文件,并且可以启动服务器。 如果您使用 zip 或 tar.gz 存档,请确保您位于生成的目录中。 如果您使用 Debian 软件包安装,则 Elasticsearch 服务器应该已经在运行,因此您不需要启动服务器,如下所示。

让我们确保一切正常。 跑

 ./bin/elasticsearch

Elasticsearch 现在应该在端口 9200 上运行。 请注意,Elasticsearch 需要一些时间才能完全启动,因此立即运行下面的 curl 命令可能会失败。 开始响应的时间不应超过十秒,因此如果以下命令失败,则可能是其他错误。

通过运行确保服务器已启动

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

您应该看到以下响应

{
  "ok" : true,
  "status" : 200,
  "name" : "Xavin",
  "version" : {
    "number" : "0.90.7",
    "build_hash" : "36897d07dadcb70886db7f149e645ed3d44eb5f2",
    "build_timestamp" : "2013-11-13T12:06:54Z",
    "build_snapshot" : false,
    "lucene_version" : "4.5.1"
  },
  "tagline" : "You Know, for Search"
}

如果您看到与上述类似的响应,则说明 Elasticsearch 工作正常。 或者,您可以通过访问从浏览器查询您安装的 Elasticsearch :9200。 您应该看到与上面使用 curl 时看到的相同的 JSON。

如果您通过 zip 或 tar.gz 存档安装,则可以使用 RESTful API 停止服务器

curl -X POST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

当使用 Debian 软件包安装 Elasticsearch 时,上述命令也有效,但您也可以使用 service elasticsearch stop 停止服务器。 可以用对应的service elasticsearch start重启服务器。

使用弹性搜索


Elasticsearch 已启动并正在运行。 现在,我们将介绍一些基本配置和用法。

基本配置


当通过 zip 或 tar.gz 存档安装时,配置文件位于生成目录内的 config 文件夹中。 通过 Debian 软件包安装时,可以在 /etc/elasticsearch/ 中找到配置文件。 您会发现两个配置文件是 elasticsearch.ymllogging.yml。 第一个是通用的 Elasticsearch 配置。 提供的文件只包含注释,因此使用默认设置。 通读该文件将很好地概述这些选项,但我将在下面提出一些建议。 没有任何设置是必需的。 您可以在不执行以下任何操作的情况下使用 Elasticsearch,但这将是一个原始开发环境。

设置“cluster.name”是 Elasticsearch 提供自动发现的方法。 这意味着如果同一网络上的一组 Elasticsearch 服务器共享相同的集群名称,它们将自动发现彼此。 这就是扩展 Elasticsearch 的简单方法,但请注意,如果您保留默认集群名称,并且您的网络上还有其他 Elasticsearch 服务器不受您的控制,您可能会陷入糟糕的状态。

基本用法


让我们将一些数据添加到我们的 Elasticsearch 安装中。 Elasticsearch 使用 RESTful API,它响应常见的 CRUD 命令:创建、读取、更新和销毁。

添加条目

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

您应该看到以下响应

{“ok”:true,“_index”:“教程”,“_type”:“helloworld”,“_id”:“1”,“_version”:1}

我们所做的是向 Elasticserach 服务器发送一个 HTTP POST 请求。 请求的 URI 是 /tutorial/helloworld/1。 了解这里的参数很重要:

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

如果您看到上面对 curl 命令的响应,我们现在可以使用以下命令查询数据

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

应该回应

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

成功! 我们在 Elasticsearch 中添加和查询数据。

需要注意的一件事是,我们可以通过将 ?pretty=true 附加到查询中来获得更好的输出。 让我们试一试

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

哪个应该回应

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

这更具可读性。 如果您在 Elasticsearch 配置文件中设置了 format=yaml,则输出也将被漂亮地打印出来,而无需附加查询字符串。

结论


我们现在已经安装、配置并开始使用 Elasticsearch。 因为它响应基本的 RESTful API。 现在可以很容易地开始在您的应用程序中使用 Elasticsearch 添加和查询数据。

提交人:ckendell