专栏首页云计算教程系列如何在Ubuntu 16.04上安装和配置Elasticsearch
原创

如何在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 腾讯云CVM ,包括创建一个可使用sudo权限的非root用户。
  • 安装了Oracle JDK 8。

没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

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

第1步 - 下载和安装Elasticsearch

Elasticsearch可以直接从elastic.co下载ziptar.gzdeb,或rpm形式的包。对于Ubuntu,最好使用deb(Debian)软件包,它将安装运行Elasticsearch所需的一切。

首先,更新您的包索引。

sudo apt-get update

下载最新的Elasticsearch版本。

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

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

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.yml定制任何Elasticsearch服务器的变量是node.namecluster.name。顾名思义,node.name指定服务器(节点)的名称以及与之关联的集群。

如果不自定义这些变量,一个node.name将根据腾讯云CVM主机名自动分配 。cluster.name将被自动设置为默认的簇的名称。

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

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

sudo nano /etc/elasticsearch/elasticsearch.yml

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

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

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

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

从属服务器用作可以加载数据任务的工作。即使从属节点过载,也不应严重影响群集运行状况,前提是还有其他节点需要额外负载。

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

. . .
node.master: false
. . .

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

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

. . .
node.data: false
. . .

在具有许多节点的较大Elasticsearch部署中,另外两个重要选项是index.number_of_shardsindex.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。

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列入白名单。

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,如下所示:

. . .
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命令:创建、读取、更新和删除。为了使用它,我们将再次使用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,我们已经向Elasticsearch服务器发送了一个HTTP POST请求。请求的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修改为“Hello People!”。这样,版本号自动增加到2

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

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中添加并查询了数据。

结论

这就是安装,配置和开始使用Elasticsearch的所有操作。一旦你玩了足够的手动查询,你的下一个任务就是从你的应用程序开始使用它。

想要了解更多关于安装和配置Elasticsearch的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Configure Elasticsearch on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Patroni和HAProxy创建高度可用的PostgreSQL集群

    PostgreSQL(Postgres)是一个开源的,完全符合ACID标准的关系数据库,可在所有主要操作系统上运行。虽然Postgres是一个功能丰富且功能强大...

    独木桥先生
  • 现代化Kubernetes的应用程序

    现代无状态应用程序的构建和设计可在Docker等软件容器中运行,并由Kubernetes等容器集群管理。它们使用Cloud Native和Twelve Fact...

    独木桥先生
  • 如何在Ubuntu 16.04上从源代码安装Go

    Go是由Google开发的一种现代开源编程语言。它很简单,并且拥有一组强大的库和工具,可以轻松搭建可靠,高效的应用程序。

    独木桥先生
  • 如何部署 ElasticSearch 服务

    Elasticsearch是一个实时分布式搜索和分析数据的平台。其易使用,具有强大的功能和可扩展性。Elasticsearch支持RESTful操作。这意味着您...

    大数据弄潮儿
  • Elasticsearch:是什么?你为什么需要他?

    Elasticsearch 是一个分布式的、开源的搜索分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化。

    dys
  • Elasticsearch 入门与实践系列

    Elasticsearch 是目前最流行的搜索引擎。为了能够让自己和小伙伴们更全面掌握 Elasticsearch 的原理与使用技巧,我打算根据自己的使用经验,...

    大数据技术架构
  • 终于有人把 Elasticsearch 原理讲透了!

    搜索是现代软件必备的一项基础功能,而 Elasticsearch 就是一款功能强大的开源分布式搜索与数据分析引擎。

    Spark学习技巧
  • Elasticsearch+Logstash+Kibana教程

    参考资料 累了就听会歌吧! Elasticsearch中文参考文档 Elasticsearch官方文档 Elasticsearch 其他——那些年遇到的坑 El...

    用户1154259
  • 没错,你离分布式搜索只差一个Elasticsearch入门,我是用心的

    学习真的是一件令人开心的事情,上次分享了 Redis 入门的文章后,收到了很多小伙伴的鼓励,比如说:“哎呀,不错呀,二哥,通俗易懂,十分钟真的入门了”。瞅瞅,瞅...

    沉默王二
  • Elasticsearch教程

    IT云清

扫码关注云+社区

领取腾讯云代金券