在Ubuntu 14.04上安装和配置Elasticsearch的方法

打印 上一主题 下一主题

主题 656|帖子 656|积分 1970

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介

Elasticsearch 是一个用于实时分布式搜索和数据分析的平台。它因易用性、强盛功能和可扩展性而备受欢迎。
Elasticsearch 支持 RESTful 利用。这意味着您可以使用 HTTP 方法(GET、POST、PUT、DELETE 等)结合 HTTP URI(/collection/entry)来利用您的数据。直观的 RESTful 方法既方便开发人员又用户友好,这也是 Elasticsearch 受欢迎的缘故原由之一。
Elasticsearch 是一款免费且开源的软件,由 Elastic 公司提供支持。这种组合使其实用于从个人测试到企业集成的各种场景。
本文将介绍 Elasticsearch,并向您展示怎样安装、配置和开始使用它。
先决条件

在按照本教程利用之前,请确保您完成以下先决条件:


  • 一个 Ubuntu 14.04 Droplet
  • 一个非 root sudo 用户。详情请参阅《使用 Ubuntu 14.04 进行初始服务器设置》。
除非另有说明,本教程中必要 root 权限的所有命令都应该以具有 sudo 权限的非 root 用户身份运行。
假设

本教程假设您的服务器正在使用类似于此处描述的 VPN:《怎样使用 Ansible 和 Tinc VPN 保护您的服务器基础办法》。这将为服务器提供私有网络功能,无论其物理网络怎样。
假如您正在使用共享私有网络,比如 DigitalOcean 私有网络,则此安全功能将已经对同一团队或同一地区帐户中的服务器启用。这在使用 Elasticsearch 时尤为重要,由于它的 HTTP 接口中没有内置安全性。
步调 1 — 安装 Java

首先,您必要在 Droplet 上安装 Java 运行情况(JRE),由于 Elasticsearch 是用 Java 编写的。Elasticsearch 必要 Java 7 或更高版本。Elasticsearch 推荐使用 Oracle JDK 版本 1.8.0_73,但本地 Ubuntu OpenJDK JRE 包也可以正常工作。
本步调将向您展示怎样安装这两个版本,以便您可以决定哪个更适合您。
安装 OpenJDK

本地 Ubuntu OpenJDK JRE 包是免费的,得到精良支持,并通过 Ubuntu APT 安装管理器主动管理。
在使用 APT 安装 OpenJDK 之前,请运行以下命令更新您的 Ubuntu Droplet 上可用的安装包列表:
  1. sudo apt-get update
复制代码
之后,您可以使用以下命令安装 OpenJDK:
  1. sudo apt-get install openjdk-7-jre
复制代码
要验证您的 JRE 是否已安装并可用,请运行以下命令:
  1. java -version
复制代码
结果应如下所示:
  1. [secondary_label Output of java -version
  2. ]java 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:
  1. sudo add-apt-repository -y ppa:webupd8team/java
复制代码
更新您的 apt 包数据库:
  1. sudo apt-get update
复制代码
使用以下命令安装 Oracle Java 8 的最新稳固版本(并接受弹出的许可协议):
  1. sudo apt-get -y install oracle-java8-installer
复制代码
最后,验证它是否已安装:
  1. java -version
复制代码
步调 2 — 下载并安装 Elasticsearch

Elasticsearch 可以直接从 elastic.co 以 zip、tar.gz、deb 或 rpm 包的形式下载。对于 Ubuntu,最好使用 deb(Debian)包,它将安装运行 Elasticsearch 所需的一切。
在撰写本文时,最新的 Elasticsearch 版本是 1.7.2。使用以下命令在您选择的目录中下载它:
  1. wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb
复制代码
然后,以通常的 Ubuntu 方式使用 dpkg 命令安装它,如下所示:
  1. sudo dpkg -i elasticsearch-1.7.2.deb
复制代码
这将导致 Elasticsearch 安装在 /usr/share/elasticsearch/,其配置文件放置在 /etc/elasticsearch,并将其 init 脚本添加到 /etc/init.d/elasticsearch。
为确保 Elasticsearch 随 Droplet 主动启动和制止,使用以下命令将其 init 脚本添加到默认运行级别:
  1. sudo update-rc.d elasticsearch defaults
复制代码
步调 3 — 配置 Elastic

现在 Elasticsearch 及其 Java 依赖已经安装完成,是时间配置 Elasticsearch 了。
Elasticsearch 的配置文件位于 /etc/elasticsearch 目录下。主要有两个文件:


  • elasticsearch.yml — 配置 Elasticsearch 服务器设置。除了日志设置之外,几乎所有选项都存储在这里,这也是我们主要关注的文件。
  • logging.yml — 提供日志配置。一开始,您无需编辑此文件。您可以保留所有默认的日志选项。默认情况下,您可以在 /var/log/elasticsearch 目录下找到生成的日志。
在任何 Elasticsearch 服务器上自界说的第一个变量是 elasticsearch.yml 中的 node.name 和 cluster.name。正如它们的名称所示,node.name 指定服务器(节点)的名称,以及后者所关联的集群。
假如您不自界说这些变量,node.name 将根据 Droplet 主机名主动分配。cluster.name 将主动设置为默认集群的名称。
cluster.name 值被 Elasticsearch 的主动发现功能用于主动发现和关联 Elasticsearch 节点到一个集群。因此,假如您不更改默认值,您可能会在集群中发现不必要的节点,这些节点在同一网络上被找到。
要开始编辑主要的 elasticsearch.yml 配置文件:
  1. sudo nano /etc/elasticsearch/elasticsearch.yml
复制代码
删除 node.name 和 cluster.name 行开头的 # 字符以取消解释,然后更改它们的值。您在 /etc/elasticsearch/elasticsearch.yml 文件中的第一个配置更改应如下所示:
  1. ...
  2. node.name: "My First Node"
  3. cluster.name: mycluster1
  4. ...
复制代码
另一个重要的设置是服务器的脚色,可以是 “master” 或 “slave”。“Masters” 负责集群的康健和稳固性。在具有大量集群节点的大型摆设中,发起有多个专用 “master”。通常,专用 “master” 不会存储数据或创建索引。因此,不应该有被过载的机会,从而危及集群的康健。
“Slaves” 用作可以加载数据任务的 “工作马”。即使 “slave” 节点被过载,只要有其他节点来承担额外负载,集群康健就不应受到严重影响。
确定服务器脚色的设置称为 node.master。假如您只有一个 Elasticsearch 节点,应该将此选项保持解释状态,以保持其默认值 true — 即唯一节点也应该是主节点。大概,假如您渴望将节点配置为从节点,删除 node.master 行开头的 # 字符,并将值更改为 false:
  1. ...
  2. node.master: false
  3. ...
复制代码
另一个重要的配置选项是 node.data,它确定节点是否存储数据。在大多数情况下,此选项应保留其默认值(true),但有两种情况下您可能渴望不在节点上存储数据。一种情况是当节点是专用 “master” 时,正如我们已经提到的。另一种情况是当节点仅用于从其他节点获取数据和聚合结果时。在后一种情况下,节点将充当 “搜索负载均衡器”。
同样,假如您只有一个 Elasticsearch 节点,应该将此设置保持解释状态,以保持默认值 true。否则,要禁用本地存储数据,请取消解释以下行并将值更改为 false:
  1. ...
  2. node.data: false
  3. ...
复制代码
另外两个重要选项是 index.number_of_shards 和 index.number_of_replicas。前者确定索引将被分成多少片断(shards)。后者界说将在集群中分布的副本数量。拥有更多的分片可以进步索引性能,而拥有更多的副本可以加速搜索速度。
假设您仍在单个节点上探索和测试 Elasticsearch,最好从只有一个分片和没有副本开始。因此,它们的值应设置为以下内容(确保删除行开头的 #):
  1. ...
  2. index.number_of_shards: 1
  3. index.number_of_replicas: 0
  4. ...
复制代码
您可能有兴趣更改的另一个终极设置是 path.data,它确定数据存储的路径。默认路径是 /var/lib/elasticsearch。在生产情况中,发起为存储 Elasticsearch 数据使用专用分区和挂载点。在最佳情况下,这个专用分区将是一个单独的存储介质,它将提供更好的性能和数据隔离。您可以通过取消解释 path.data 行并更改其值来指定不同的 path.data 路径:
  1. ...
  2. path.data: /media/different_media
  3. ...
复制代码
完成所有更改后,请生存并退出文件。现在,您可以使用以下命令首次启动 Elasticsearch:
  1. sudo service elasticsearch start
复制代码
请至少等候 10 秒,以便 Elasticsearch 完全启动,然后才能使用它。否则,您可能会收到无法连接的错误。
第四步 —— 安全设置 Elastic

Elasticsearch 没有内置的安全机制,可以被访问 HTTP API 的任何人控制。本节不是一个全面的 Elasticsearch 安全设置指南。请采取须要的措施防止未经授权的访问以及保护其运行的服务器/假造机。思量使用 iptables 进一步保护您的体系。
第一个安全调整是防止公共访问。要移除公共访问,请编辑文件 elasticsearch.yml:
  1. sudo nano /etc/elasticsearch/elasticsearch.yml
复制代码
找到包罗 network.bind_host 的行,通过删除行首的 # 字符来取消解释,并将值更改为 localhost,使其如下所示:
  1. ...
  2. network.bind_host: localhost
  3. ...
复制代码
另外,为了加强安全性,您可以禁用用于评估自界说表达式的动态脚本。通过构造自界说恶意表达式,攻击者可能会危害您的情况。
要禁用自界说表达式,请在 /etc/elasticsearch/elasticsearch.yml 文件末尾添加以下行:
  1. ...
  2. script.disable_dynamic: true
  3. ...
复制代码
第五步 —— 测试

到现在为止,Elasticsearch 应该在 9200 端口上运行。您可以使用 curl 这个命令行客户端 URL 传输工具进行测试,实行一个简朴的 GET 哀求,如下所示:
  1. curl -X GET 'http://localhost:9200'
复制代码
您应该会看到以下响应:
  1. [secondary_label Output of curl]
  2. {
  3.   "status" : 200,
  4.   "name" : "Harry Leland",
  5.   "cluster_name" : "elasticsearch",
  6.   "version" : {
  7.     "number" : "1.7.2",
  8.     "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
  9.     "build_timestamp" : "2015-09-14T09:49:53Z",
  10.     "build_snapshot" : false,
  11.     "lucene_version" : "4.10.4"
  12.   },
  13.   "tagline" : "You Know, for Search"
  14. }
复制代码
假如您看到类似上面的响应,那么 Elasticsearch 正常工作。假如没有,请确保您已正确遵循安装说明,而且已答应 Elasticsearch 充分启动的时间。
第六步 —— 使用 Elasticsearch

要开始使用 Elasticsearch,让我们首先添加一些数据。如前所述,Elasticsearch 使用 RESTful API,响应通常包罗 CRUD 命令:创建、读取、更新和删除。我们将再次使用 curl 进行利用。
您可以使用以下命令添加第一条数据:
  1. curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
复制代码
您应该会看到以下响应:
  1. {"_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 哀求检索此第一条数据:
  1. curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
复制代码
结果应该如下所示:
  1. {"_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 应该会确认成功修改,如下所示:
  1. {
  2.   "_index" : "tutorial",
  3.   "_type" : "helloworld",
  4.   "_id" : "1",
  5.   "_version" : 2,
  6.   "created" : false
  7. }
复制代码
在上面的示例中,我们将第一条目的 message 修改为 “Hello People!”。因此,版本号已主动增加为 2。
您可能已经留意到上述哀求中的额外参数 pretty。它启用了人类可读的格式,因此您可以将每个数据字段写在新的一行上。在检索数据时,您也可以使结果更美观,如下所示:
  1. curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
复制代码
现在,响应将以更好的格式呈现:
  1. {
  2.   "_index" : "tutorial",
  3.   "_type" : "helloworld",
  4.   "_id" : "1",
  5.   "_version" : 2,
  6.   "found" : true,
  7.   "_source":{ "message": "Hello World!" }
  8. }
复制代码
到现在为止,我们已经向 Elasticsearch 添加了数据并进行了查询。要了解其他利用,请查看 API 文档。
结论

这就是安装、配置和开始使用Elasticsearch的简朴过程。一旦你对手动查询有了足够的了解,下一个任务将是从你的应用步调开始使用它。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表