如何在CentOS 7上安装和配置Elasticsearch

介绍

Elasticsearch是一个实时分布式搜索和分析数据的平台。它的流行是由于它的易用性,强大的功能和可扩展性。

Elasticsearch支持RESTful操作。这意味着您可以将HTTP方法(GET,POST,PUT,DELETE等)与HTTP URI(/ collection / entry)结合使用来操作数据。直观的RESTful方法既对开发人员友好,对用户也是友好的,这也是Elasticsearch流行的原因之一。

Elasticsearch是一个免费的开源软件,背后有一个坚实的公司 -Elastic。这种组合使其适用于从个人测试到企业集成的任何地方。

本文将向您介绍Elasticsearch,并向您展示如何安装,配置和开始使用它。

课程准备

在学习本教程之前,请确保完成以下先决条件:

第1步 - 安装Java

首先,您需要在腾讯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)。

第2步 - 下载和安装Elasticsearch

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

第3步 - 配置弹性

现在已经安装了Elasticsearch及其Java依赖项,现在是时候配置Elasticsearch了。

Elasticsearch配置文件位于/etc/elasticsearch目录中。有两个文件:

  • elasticsearch.yml - 配置Elasticsearch服务器设置。这是存储除日志记录之外的所有选项的地方,这就是我们对此文件最感兴趣的原因。
  • logging.yml - 提供日志记录配置。首先,您不必编辑此文件。您可以保留所有默认日志记录选项。您可以在默认情况下在/var/log/elasticsearch中找到生成的日志。

第一个可以在任何Elasticsearch服务器上来定制的变量是elasticsearch.yml中的 node.namecluster.name。顾名思义,node.name指定服务器(节点)的名称以及与之关联的集群。

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

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

要开始编辑主elasticsearch.yml配置文件:

sudo nano /etc/elasticsearch/elasticsearch.yml

删除node.namecluster.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_shardsindex.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秒钟让他完全启动。否则,您可能会收到无法连接的错误。

第4步 - 保护弹性

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

第5步 - 测试

到目前为止,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完全启动。

第6步 - 使用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》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王亚昌的专栏

用Evolution收发Mail啦!

     我有两个mailbox,sohu和gmail的,下面分别介绍设置方法。 I sohu的设置 1 . 点击Forw...

10720
来自专栏开发与安全

linux环境常用的性能监控和协助开发调试工具

linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作。下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的...

44610
来自专栏令仔很忙

Nginx虚拟主机配置

虚拟主机就是使用特殊的软硬件技术,把一台计算机主机分成多台“虚拟”的主机,每一台虚拟主机都具有独立的域名和IP地址(或共享的IP地址),具有完整的Intern...

98320
来自专栏黑泽君的专栏

day69_淘淘商城项目_02

  由于淘淘商城是基于soa的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。   如何实现远程通信?

37820
来自专栏Janti

记一次内存溢出的分析经历——thrift带给我的痛orz

说在前面的话 朋友,你经历过部署好的服务突然内存溢出吗? 你经历过没有看过Java虚拟机,来解决内存溢出的痛苦吗? 你经历过一个BUG,百思不得其解,头发一根一...

54980
来自专栏北京马哥教育

逼格高又实用的 Linux 高级命令,开发运维都要懂

30650
来自专栏大宽宽的碎碎念

聊聊BIO,NIO和AIO (1)到底什么是“IO Block”BIONIOIO多路复用用epoll实现的IO多路复用epoll的优势水平触发和边沿触发再来思考一下什么是“Block”总结

66080
来自专栏Python

linux每日命令(25):Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然...

20310
来自专栏佳爷的后花媛

如何使用Thinkphp搭建商城系统(一)

由于工作需要,我要使用Thinkphp框架,但是我对php不是很了解,我觉得想要快速掌握一门语言或者一个框架,最好的方法就是做出一个小作品,只有在自己做这个作品...

1.2K20
来自专栏Golang语言社区

PHP调用Go服务的正确方式 - Unix Domain Sockets

作者:枕边书 链接:http://www.cnblogs.com/zhenbianshu/p/7265415.html 來源:博客园 问题 可能是由于经验太少,...

47590

扫码关注云+社区

领取腾讯云代金券