Elasticsearch是一个实时分布式搜索和分析数据的平台。它的流行是由于它的易用性,强大的功能和可扩展性。
Elasticsearch支持RESTful操作。这意味着您可以将HTTP方法(GET,POST,PUT,DELETE等)与HTTP URI(/ collection / entry)结合使用来操作数据。直观的RESTful方法既对开发人员友好,对用户也是友好的,这也是Elasticsearch流行的原因之一。
Elasticsearch是一个免费的开源软件,背后有一个坚实的公司 -Elastic。这种组合使其适用于从个人测试到企业集成的任何地方。
本文将向您介绍Elasticsearch,并向您展示如何安装,配置和开始使用它。
在学习本教程之前,请确保完成以下先决条件:
首先,您需要在腾讯CVM上使用Java Runtime Environment(JRE),因为Elasticsearch是用Java编程语言编写的。您可以将本机CentOS OpenJDK程序包用于JRE。此JRE是免费的,并且受到良好支持,并通过CentOS Yum安装管理器自动管理。
您可以使用以下命令安装最新的OpenJDK:
sudo yum install java-1.8.0-openjdk.x86_64
要验证是否已安装并可以使用JRE,请运行以下命令:
java -version
结果应如下所示:
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)
当您使用Elasticsearch并开始寻求更好的Java性能和兼容性时,您可以选择安装Oracle的专有Java(Oracle JDK 8)。
Elasticsearch可以直接从elastic.co下载zip,tar.gz,deb或rpm包。对于CentOS,最好使用本机rpm包,它将安装运行Elasticsearch所需的一切。
在撰写本文时,最新的Elasticsearch版本是1.7.3。使用以下命令将其下载到您选择的目录中:
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm
然后使用如下rpm
命令以通常的CentOS方式安装它:
sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm
这导致 在/usr/share/elasticsearch/
中安装Elasticsearch并将其配置文件放入/etc/elasticsearch
中并在/etc/init.d/elasticsearch
中添加其init脚本。
要确保Elasticsearch使用腾讯CVM自动启动和停止,请使用以下命令将其init脚本添加到默认运行级别:
sudo systemctl enable elasticsearch.service
现在已经安装了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
将根据腾讯CVM主机名自动分配 。同时cluster.name
将被自动设置为默认的集群的名称。
Elasticsearch的自动发现功能会使用该cluster.name
值来自动发现Elasticsearch节点并将其关联到集群。因此,如果不更改默认值,则可能在群集中的同一网络上找到了不需要的节点。
要开始编辑主elasticsearch.yml
配置文件:
sudo nano /etc/elasticsearch/elasticsearch.yml
删除node.name
和cluster.name
行开头的字符#
来取消注释,然后更改它们的值。您在/etc/elasticsearch/elasticsearch.yml
文件中的第一个配置更改应如下所示:
...
node.name: "My First Node"
cluster.name: mycluster1
...
另一个重要的设置是服务器的角色,可以是“主”或“从”。“大师”负责集群的健康和稳定。在具有大量群集节点的大型部署中,建议使用多个专用“主”。通常,专用的“主”不会存储数据或创建索引。因此,不应该有超载的可能性,从而可能危及群集健康。
“从属”被用作“workhorse”,可以加载数据任务。即使“从属”节点过载,也不应严重影响群集运行状况,前提是还有其他节点需要额外负载。
调用确定服务器角色的设置叫node.master
。如果您只有一个Elasticsearch节点,则应该将此选项注释掉,以使其保持其默认值true
- 即唯一节点也应该是主节点。或者,如果要将节点配置为从属节点,请删除该node.master
行开头的字符#
,并将值更改为false
:
...
node.master: false
...
另一个重要的配置选项是node.data
,该选项确定节点是否存储数据。在大多数情况下,此选项应保留其默认值(true
),但有两种情况您可能希望不在节点上存储数据。一个是节点是专用的“主”,正如我们已经提到的那样。另一种是当节点仅用于从节点获取数据和聚合结果时。在后一种情况下,节点将充当“搜索负载平衡器”。
同样,如果您只有一个Elasticsearch节点,则应将此设置注释掉,以便保留默认true
值。否则,要禁用本地存储数据,请取消注释以下行并将值更改为false
:
...
node.data: false
...
另外两个重要的选择是index.number_of_shards
和index.number_of_replicas
。第一个决定索引将分成多少个(分片)。第二个定义将在群集中分发的副本数。拥有更多分片可以提高索引性能,而拥有更多副本可以提高搜索速度。
假设您仍在单个节点上探索和测试Elasticsearch,最好只从一个分片开始,而不是复制品。因此,它们的值应设置为以下值(确保删除开头行的#
):
...
index.number_of_shards: 1
index.number_of_replicas: 0
...
您可能感兴趣的最后一个设置是path.data
,改设置确定数据存储路径。默认路径是/var/lib/elasticsearch
。在生产环境中,建议您使用专用分区和挂载点来存储Elasticsearch数据。在最好的情况下,此专用分区将是一个单独的存储介质,可提供更好的性能和数据隔离。您可以通过取消注释该path.data
行并更改其值来指定其他的path.data
路径:
...
path.data: /media/different_media
...
完成所有更改后,请保存并退出该文件。现在,您可以使用以下命令首次启动Elasticsearch:
sudo service elasticsearch start
在您使用Elasticsearch之前,请至少给它10秒钟让他完全启动。否则,您可能会收到无法连接的错误。
Elasticsearch没有内置安全性,可以由任何可以访问HTTP API的人控制。
第一个安全调整是防止公共访问。要删除公共访问,请编辑该elasticsearch.yml
文件:
sudo nano /etc/elasticsearch/elasticsearch.yml
找到包含network.bind_host
的行,通过删除开头行的字符#
取消注释,然后将值更改为localhost
,他将如下所示:
...
network.bind_host: localhost
...
警告:由于Elasticsearch没有任何内置安全性,因此不要将此设置为任何您无法控制或信任的服务器可访问的IP地址,这一点非常重要。不要将Elasticsearch绑定到公共或共享专用网络 IP地址!
此外,为了提高安全性,您可以禁用用于评估自定义表达式的动态脚本。通过制作自定义恶意表达式,攻击者可能会破坏您的环境。
要禁用自定义表达式,请在/etc/elasticsearch/elasticsearch.yml
文件末尾添加以下行:
...
script.disable_dynamic: true
...
要使上述更改生效,您必须使用以下命令重新启动Elasticsearch:
sudo service elasticsearch restart
到目前为止,Elasticsearch应该在端口9200上运行。您可以使用curl,命令行客户端URL传输工具和一个简单的GET请求来测试它,如下所示:
curl -X GET 'http://localhost:9200'
您应该看到以下响应:
{
"status" : 200,
"name" : "CentOS Node",
"cluster_name" : "mysqluster",
"version" : {
"number" : "1.7.3",
"build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682",
"build_timestamp" : "2015-10-15T09:14:17Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
如果您看到类似于上面的响应,则Elasticsearch正常工作。如果没有,请确保您已正确遵循安装说明,并且您已经有足够的时间让Elasticsearch完全启动。
要开始使用Elasticsearch,我们先添加一些数据。如前所述,Elasticsearch使用RESTful API,它响应常用的CRUD命令:Create,Read,Update和Delete。为了使用它,我们将再次使用curl。
您可以使用以下命令添加第一个条目:
curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该看到以下响应:
{"_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'
结果应如下所示:
{"_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,
"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 World!" }
}
到目前为止,我们已经在Elasticsearch中添加并查询了数据。要了解其他操作,请查看API文档。
这就是安装,配置和开始使用Elasticsearch的难易程度。一旦你玩了足够的手动查询,你的下一个任务就是从你的应用程序开始使用它。
更多CentOS教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Install and Configure Elasticsearch on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。