Elasticsearch是一个实时分布式搜索和分析数据的平台。其易使用,具有强大的功能和可扩展性。Elasticsearch支持RESTful操作。这意味着您可以将HTTP方法(GET,POST,PUT,DELETE等)与HTTP URI(/collection/entry
)结合使用来操作数据。直观的RESTful方法既开发人员又方便用户使用,这也是Elasticsearch流行的原因之一。
本文将向您介绍Elasticsearch,并向您展示如何安装,配置和使用它。还没有云服务器的同学可以到腾讯云官网点击产品中的云服务器,进行购买。您也可以到这里免费领取一台腾讯云服务器。双十二的促销力度非常大。
下载和安装Elasticsearch
Elasticsearch可以直接从elastic.co下载zip
,tar.gz
,deb
,或rpm
包。对于Ubuntu,最好使用deb
(Debian)软件包。
首先,更新您的包索引。
代码语言:javascript复制sudo apt-get update
下载最新的Elasticsearch版本。
代码语言:javascript复制wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb
然后用dpkg
安装它。
sudo dpkg -i elasticsearch-2.3.1.deb
这将安装Elasticsearch到 /usr/share/elasticsearch/
中,并将其配置文件放入/etc/elasticsearch
并添加其init脚本到/etc/init.d/elasticsearch
。
要确保Elasticsearch自动启动和停止服务器,请将其init脚本添加到默认运行级别。
代码语言:javascript复制sudo systemctl enable elasticsearch.service
在首次启动Elasticsearch之前,请查看下一节有关建议的最低配置的信息。
配置Elasticsearch
现在已经安装了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
将根据主机名自动分配a。在cluster.name
将被自动设置为默认的集群名称。
使用文本编辑器开始编辑elasticsearch.yml
主配置文件。
sudo nano /etc/elasticsearch/elasticsearch.yml
删除cluster.name
和node.name
开头行的#
字符,然后更新它们的值。您在/etc/elasticsearch/elasticsearch.yml
文件中的第一个配置更改应如下所示:
/etc/elasticsearch/elasticsearch.yml
代码语言:javascript复制. . .
cluster.name: mycluster1
node.name: "My First Node"
. . .
这些是您可以从使用Elasticsearch开始的最低设置。
Elasticsearch的一个特别重要的设置是服务器,即主服务器或从服务器。主服务器负责群集的运行状况和稳定性。在具有大量群集节点的大型部署中,建议使用多个专用主节点。通常,专用主服务器不会存储数据或创建索引。因此,不应该有超载的可能性,从而可能危及群集健康。
从服务器用作可以加载数据任务的工作。即使从属节点过载,也不应严重影响群集运行状况,前提是还有其他节点需要额外负载。
调用确定服务器角色的设置node.master
。默认情况下,节点是主节点。如果只有一个Elasticsearch节点,则应将此选项保留为默认true
值,因为始终至少需要一个主节点。或者,如果您希望将节点配置为从属节点,请为node.master
变量赋值false
,如下所示:
/etc/elasticsearch/elasticsearch.yml
代码语言:javascript复制. . .
node.master: false
. . .
另一个重要的配置选项是node.data
,其确定节点是否存储数据。在大多数情况下,此选项应保留其默认值(true
),但有两种情况您可能希望不在节点上存储数据。一种是当节点是专用主设备时。另一种是当节点仅用于从节点获取数据和聚合结果时。在后一种情况下,节点将充当搜索负载平衡器。
同样,如果您只有一个Elasticsearch节点,则不应更改此值。否则,禁止在本地存储数据:
/etc/elasticsearch/elasticsearch.yml
代码语言:javascript复制. . .
node.data: false
. . .
在具有许多节点的较大Elasticsearch部署中,另外两个重要选项是index.number_of_shards
和index.number_of_replicas
。第一个确定将索引分成多少个碎片。第二个定义将在群集中分发的副本数。拥有更多分片可以提高索引性能,而拥有更多副本可以提高搜索速度。
默认情况下,分片数为5,副本数为1。假设您仍在单个节点上探索和测试Elasticsearch,则只能从一个分片开始,不能使用副本。因此,它们的值应该设置如下:
/etc/elasticsearch/elasticsearch.yml
代码语言:javascript复制. . .
index.number_of_shards: 1
index.number_of_replicas: 0
. . .
您可能感兴趣的最后一个设置是path.data
,其确定数据存储路径。默认路径是/var/lib/elasticsearch
。在生产环境中,建议您使用专用分区和挂载点来存储Elasticsearch数据。在最好的情况下,此专用分区将是一个单独的存储介质,可提供更好的性能和数据隔离。您可以通过指定不同的路径来指定它:
/etc/elasticsearch/elasticsearch.yml
代码语言:javascript复制. . .
path.data: /media/different_media
. . .
完成所有更改后,保存并退出文件。现在您可以第一次启动Elasticsearch。
代码语言:javascript复制sudo systemctl start elasticsearch
测试Elasticsearch
到目前为止,Elasticsearch应该在端口9200上运行。您可以使用curl
命令行客户端URL传输工具和简单的GET请求来测试它。
curl -X GET 'http://localhost:9200'
您应该看到以下响应:
代码语言:javascript复制Output of curl{
"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执行更彻底的检查,请执行以下命令:
代码语言:javascript复制curl -XGET 'http://localhost:9200/_nodes?pretty'
在上面命令的输出中,您可以查看并验证节点,集群,应用程序路径,模块等的所有当前设置。
使用Elasticsearch
要开始使用Elasticsearch,我们先添加一些数据。如前所述,Elasticsearch使用RESTful API,它响应通常的CRUD命令:c reate,r ead,u pdate和d elete。为了使用它,我们将再次使用curl
。
您可以使用以下命令添加第一个条目:
代码语言:javascript复制curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该看到以下响应:
代码语言:javascript复制Output{"_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请求检索此第一个条目。
代码语言:javascript复制curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
结果应如下所示:
代码语言:javascript复制Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}
要修改现有条目,可以使用HTTP PUT请求。
代码语言:javascript复制curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
"message": "Hello People!"
}'
Elasticsearch的修改如下:
代码语言:javascript复制Output{
"_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'
现在响应将采用更好的格式:
代码语言:javascript复制Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"found" : true,
"_source" : {
"message" : "Hello People!"
}
}
到目前为止,我们已经在Elasticsearch中添加并查询了数据。要了解其他操作,请查看API文档。
结论
这就是安装,配置和开始使用Elasticsearch的所有流程。您也可以对您的服务器进行保护,可以先点击这里进行 SSL 证书的试用,在体验加密证书的优势之后再进行抉择。