Elasticsearch是一个实时分布式搜索和分析数据的平台。它的流行是由于其易用性,强大的功能和可扩展性。
Elasticsearch支持RESTful操作。这意味着您可以将HTTP方法(GET,POST,PUT,DELETE等)与HTTP URI(/collection/entry
)结合使用来操作数据。直观的RESTful方法既开发人员又方便用户使用,这也是Elasticsearch流行的原因之一。
Elasticsearch是一个免费的开源软件,背后有一个坚实的公司:Elastic。这种组合使其适用于从个人测试到企业集成的任何地方。
本文将向您介绍Elasticsearch,并向您展示如何安装,配置,保护和开始使用它。
在学习本教程之前,您需要:
没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
除非另有说明,否则本教程中需要root权限的所有命令都应作为具有sudo权限的非root用户运行。
Elasticsearch可以直接从elastic.co下载zip
,tar.gz
,deb
,或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之前,请查看下一步有关建议的最低配置的信息。
现在已经安装了Elasticsearch及其Java依赖项,现在是时候配置Elasticsearch了。Elasticsearch配置文件位于/etc/elasticsearch
目录中。有两个文件:
elasticsearch.yml
配置Elasticsearch服务器设置。这是存储除日志记录之外的所有选项的地方,这就是我们对此文件最感兴趣的原因。logging.yml
提供日志记录配置。首先,您不必编辑此文件。您可以保留所有默认日志记录选项。您可以在默认情况下在/var/log/elasticsearch
中找到生成的日志。第一个在elasticsearch.yml
定制任何Elasticsearch服务器的变量是node.name
和cluster.name
。顾名思义,node.name
指定服务器(节点)的名称以及与之关联的集群。
如果不自定义这些变量,一个node.name
将根据腾讯云CVM主机名自动分配 。cluster.name
将被自动设置为默认的簇的名称。
Elasticsearch的自动发现功能使用cluster.name
值自动发现Elasticsearch节点并将其关联到集群。因此,如果不更改默认值,则可能在群集中的同一网络上找到了不需要的节点。
使用nano
或您喜欢的文本编辑器开始编辑主配置文件elasticsearch.yml
。
sudo nano /etc/elasticsearch/elasticsearch.yml
删除cluster.name
和node.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.data
为false
,就像这样:
. . .
node.data: false
. . .
在具有许多节点的较大Elasticsearch部署中,另外两个重要选项是index.number_of_shards
和index.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。否则,您可能会收到无法连接的错误。
默认情况下,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
。
到目前为止,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'
在上面命令的输出中,您可以查看并验证节点,集群,应用程序路径,模块等的所有当前设置。
要开始使用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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。