如何安装和配置Elasticsearch在Ubuntu 14.04

介绍

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

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

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

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

先决条件

在遵循本教程之前,请确保您满足以下先决条件:

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

假设

本教程假定您的服务器使用的是像这里所描述的一个VPN: 如何使用Ansible和TINC VPN保护您的服务器基础架构 这将提供专用网络功能,而不管您的服务器正在使用的物理网络。

如果您使用共享专用网络(如DigitalOcean专用网络),则必须使用VPN才能保护Elasticsearch免受未经授权的访问。 每个服务器必须在同一个专用网络上,因为Elasticsearch没有在其HTTP接口中内置安全性。 不得与不信任的计算机共享专用网络。

第1步 - 安装Java

首先,您将需要在Droplet上使用Java运行时环境(JRE),因为Elasticsearch是用Java编程语言编写的。 Elasticsearch需要Java 7或更高版本。 Elasticsearch建议使用Oracle JDK版本1.8.0_73,但是用于JRE的本机Ubuntu OpenJDK本机包也是如此。

此步骤显示如何安装这两个版本,以便您可以决定哪个最适合您。

安装OpenJDK

用于JRE的本机Ubuntu OpenJDK本地包是免费的,良好支持,并通过Ubuntu APT安装管理器自动管理。

在使用APT安装OpenJDK之前,请通过运行以下命令更新Ubuntu Droplet上可用软件包的安装列表:

sudo apt-get update

之后,您可以使用以下命令安装OpenJDK:

sudo apt-get install openjdk-7-jre

要验证您的JRE是否已安装并可以使用,请运行以下命令:

java -version

结果应如下所示:

Output of java -versionjava version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

安装Java 8

当您使用Elasticsearch进行开发时,您开始寻找更好的Java性能和兼容性,您可以选择安装Oracle专有Java(Oracle JDK 8)。

添加Oracle Java PPA到apt:

sudo add-apt-repository -y ppa:webupd8team/java

更新apt包数据库:

sudo apt-get update

使用此命令安装最新稳定版本的Oracle Java 8(并接受弹出的许可协议):

sudo apt-get -y install oracle-java8-installer

最后,验证它是否已安装:

java -version

第2步 - 下载并安装Elasticsearch

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

在写这篇文章的时候,最新的Elasticsearch版本是1.7.2。 使用命令在您选择的目录中下载它:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

然后在平时的Ubuntu的方式与安装它dpkg这样的命令:

sudo dpkg -i elasticsearch-1.7.2.deb

提示:如果您想Elasticsearch最新发布的版本,去elastic.co找到链接,然后用wget将其下载到您的Droplet。 一定要下载deb包。

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

要确保Elasticsearch使用Droplet自动启动和停止,请使用以下命令将其init脚本添加到默认运行级别:

sudo update-rc.d elasticsearch defaults

第3步 - 配置Elastic

现在,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配置文件:

sudo nano /etc/elasticsearch/elasticsearch.yml

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

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

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

“Slaves”用作“workhorses”,可以加载数据任务。 即使“从”节点过载,集群健康不应受到严重影响,前提是有其他节点承担额外负载。

这就决定了服务器的角色设置被称为node.master 如果你只有一个Elasticsearch节点,应该让它保持它的默认值保留此选项注释掉true -也就是唯一的节点应该也是高手。 另外,如果您希望将节点配置为Minion,删除#在开始时性格node.master行,值更改为false

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

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

同样,如果你只有一个Elasticsearch节点,应该使其保持默认保留此设置注释掉true价值。 否则,禁止在本地存储数据,取消注释以下行和值更改为false

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

另外两个重要的选项是index.number_of_shardsindex.number_of_replicas 第一个确定索引将被分割成多少块(分片)。 第二个定义将在群集中分布的副本的数量。 拥有更多分片可提高索引编制性能,同时拥有更多副本可使搜索更快。

假设您仍然在单个节点上探索和测试Elasticsearch,最好只从一个分片开始,而不是从副本开始。 因此,它们的值应设置如下(请务必删除#在行的开头):

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

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

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

完成所有更改后,请保存并退出文件。 现在您可以使用命令第一次启动Elasticsearch:

sudo service elasticsearch start

请至少等待10秒钟才能使Elasticsearch完全启动,然后才能使用它。 否则,您可能会收到无法连接的错误。

第4步 - 保护弹性

Elasticsearch没有内置安全性,可以由任何可以访问HTTP API的人控制。 本节不是确保Elasticsearch安全的全面指南。 采取任何必要的措施,以防止未经授权的访问它和运行它的服务器/虚拟机。 考虑使用iptables的 ,以进一步保护您的系统。

第一个安全措施是防止公共访问。 要删除公共访问编辑的文件elasticsearch.yml

sudo nano /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.yml
...
network.bind_host: localhost
...

警告:由于Elasticsearch没有任何内置的安全性,这是非常重要的,你不要将此设置为是,你不控制或信任的任何服务器访问的IP地址。 不绑定Elasticsearch到公共或共享专用网络 IP地址!
此外,为了额外的安全性,您可以禁用用于评估自定义表达式的动态脚本。 通过制作自定义恶意表达式,攻击者可能会危及您的环境。

要禁用自定义表达式,添加下面一行是在年底/etc/elasticsearch/elasticsearch.yml文件:

/etc/elasticsearch/elasticsearch.yml
...
script.disable_dynamic: true
...

第5步 - 测试

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

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

您应该会看到以下响应:

Output of curl{
  "status" : 200,
  "name" : "Harry Leland",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.2",
    "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

如果您看到类似于上面的响应,Elasticsearch正常工作。 如果没有,请确保您已正确遵循安装说明,并允许Elasticsearch完全启动一段时间。

第6步 - 使用Elasticsearch

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

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

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

您应该会看到以下响应:

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}

使用curl,我们向Elasticseach服务器发送了一个HTTP POST请求。 请求的URI是/tutorial/helloworld/1 在此了解参数很重要:

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

您可以使用HTTP GET请求检索此第一个条目,如下所示:

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请求:

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

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

Output{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "created" : false
}

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

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

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

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

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

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

结论

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

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏