如何安装和配置Elasticsearch在Ubuntu 16.04

Elasticsearch是用于分布式搜索和实时数据进行分析的平台。它的流行是由于它的易用性,强大的功能和可扩展性。 Elasticsearch是一个自由和开源软件背后雄厚的公司:弹性。这种结合使得它适合于在从个人测试企业集成的任何地方使用。本文将向您介绍Elasticsearch并告诉你如何安装,配置,安全,并开始使用它。

介绍

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

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

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

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

先决条件

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

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

第1步 - 下载并安装Elasticsearch

Elasticsearch可以直接从下载elastic.coziptar.gzdebrpm包。 对于Ubuntu的,最好用deb这将安装你需要运行Elasticsearch一切(Debian)程序包。

首先,更新您的包索引。

sudo apt-get update

下载最新的Elasticsearch版本,在写作时是2.3.1。

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

然后在平时的Ubuntu的方式与安装它dpkg

sudo dpkg -i elasticsearch-2.3.1.deb

这导致Elasticsearch正在安装/usr/share/elasticsearch/与它的配置文件放在/etc/elasticsearch和增加它的init脚本/etc/init.d/elasticsearch

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

sudo systemctl enable elasticsearch.service

在首次启动Elasticsearch之前,请查看下一节有关建议的最低配置。

第2步 - 配置Elasticsearch

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

  • elasticsearch.yml配置Elasticsearch服务器设置。 这是所有选项,除了日志记录,存储,这就是为什么我们主要对这个文件感兴趣的地方。

  • logging.yml提供了日志配置。 开始时,您不必编辑此文件。 您可以保留所有默认日志记录选项。 您可以在所生成的日志/var/log/elasticsearch默认。

第一个变量,自定义任何Elasticsearch服务器上是node.namecluster.nameelasticsearch.yml 如它们的名字暗示, node.name指定服务器(节点)的名称和要后者相关联的簇。

如果不自定义这些变量, node.name会自动在对于Droplet主机分配。 cluster.name将被自动设置为默认集群的名称。

cluster.name值由Elasticsearch的自动发现功能来自动发现和准Elasticsearch节点到群集。 因此,如果不更改默认值,则可能会在群集中的同一网络上找到不需要的节点。

开始编辑的主要elasticsearch.yml与配置文件nano或您喜爱的文本编辑器。

sudo nano /etc/elasticsearch/elasticsearch.yml

删除#在该行的开头字符cluster.namenode.name取消注释它们,然后更新它们的值。 在你的第一个配置更改/etc/elasticsearch/elasticsearch.yml文件应该是这样的:

/etc/elasticsearch/elasticsearch.yml
. . .
cluster.name: mycluster1
node.name: "My First Node"
. . .

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

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

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

这就决定了服务器的角色设置被称为node.master 默认情况下,节点是主节点。 如果你只有一个Elasticsearch节点,你应该把这个选项为默认true ,因为总是需要至少一个主值。 另外,如果您希望将节点配置为Minion,分配一个false值变量node.master是这样的:

/etc/elasticsearch/elasticsearch.yml
. . .
node.master: false
. . .

另外一个重要的配置选项是node.data ,它决定一个节点是否将存储数据或没有。 在大多数情况下,这个选项应该留给它的默认值( true ),但有两种情况下,您可能希望不要将数据存储在节点上。 一种是当该节点是一个专用主“如前所述,当一个节点只用于从节点获取数据和聚合结果另一种是,在后一种情况下,节点将充当了作为搜索负载平衡器

同样,如果您只有一个Elasticsearch节点,则不应更改此值。 否则,禁止在本地存储数据,指定node.datafalse像这样:

/etc/elasticsearch/elasticsearch.yml
. . .
node.data: false
. . .

在较大的Elasticsearch部署有很多节点,另外两个重要的选项是index.number_of_shardsindex.number_of_replicas 第一个决定有多少件,或碎片 ,该索引将被分成。 第二个定义将在群集中分布的副本的数量。 拥有更多分片可提高索引性能,同时拥有更多副本可使搜索更快。

默认情况下,分片数为5,副本数为1.假设您仍在单个节点上探索和测试Elasticsearch,则只能从一个分片开始,而不能从任何副本开始。 因此,它们的值应该设置如下:

/etc/elasticsearch/elasticsearch.yml
. . .
index.number_of_shards: 1
index.number_of_replicas: 0
. . .

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

/etc/elasticsearch/elasticsearch.yml
. . .
path.data: /media/different_media
. . .

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

sudo systemctl start elasticsearch

给Elasticsearch几个完全启动之前,你尝试使用它。 否则,您可能会收到无法连接的错误。

第3步 - 保护Elasticsearch

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

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

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

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

sudo ufw allow 22

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

sudo ufw allow from TRUSTED_IP to any port 9200

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

sudo ufw enable

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

sudo ufw status

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

Status: active

To                         Action      From
--                         ------      ----
9200                       ALLOW       TRUSTED_IP
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

一旦您确认UFW已启用并保护Elasticsearch端口9200,则您可以允许Elasticsearch侦听外部连接。 要做到这一点,打开elasticsearch.yml重新配置文件。

sudo nano /etc/elasticsearch/elasticsearch.yml

查找包含行network.bind_host ,取消它通过删除#在该行的开头字符,然后将值更改为0.0.0.0 ,所以它看起来是这样的:

/etc/elasticsearch/elasticsearch.yml
. . .
network.host: 0.0.0.0
. . .

我们已经指定0.0.0.0使Elasticsearch所有接口和绑定IP地址进行侦听。 如果你想让它只监听特定的接口,你可以代替指定其IP 0.0.0.0

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

sudo systemctl restart elasticsearch

之后,尝试从受信任的主机连接到Elasticsearch。 如果您无法连接,请确保UFW是否工作正常, network.host变量已正确指定。

第4步 - 测试Elasticsearch

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

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

您应该会看到以下响应:

{
  "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的更彻底检查,请执行以下命令:

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

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

第5步 - 使用Elasticsearch

要开始使用Elasticsearch,让我们先添加一些数据。 如前所述,Elasticsearch使用一个RESTful API,这是为了响应通常的CRUD命令:C reate,R EAD,U PDATE和D elete。 对于它的工作中,我们将再次使用curl

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

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

您应该会看到以下响应:

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

随着cuel ,我们派出了一个HTTP POST请求到服务器Elasticsearch。 请求的URI是/tutorial/helloworld/1与几个参数:

  • tutorial是在Elasticsearch的数据的索引。
  • helloworld是类型。
  • 1是我们对上述指标和类型在条目的ID。

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

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

结果应如下所示:

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

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

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

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

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

在上面的例子中,我们已修改message的第一个条目到的“你好人们!”。 同的是,版本号已被自动增加到2

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

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

现在的响应将是一个更好的格式:

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

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

结论

这是安装,配置和开始使用Elasticsearch很容易。 一旦您使用手动查询播放足够,您的下一个任务将是开始从您的应用程序使用它。