elasticsearch在NAS上的部署和使用

elasticsearch是一款企业级的全文搜素引擎,基于java的Lucene库开发,完全采用RESTful接口面向用户,对分布式搜索支持非常好!

部署环境

为了能实现分布式部署,我这里采用了两台群晖的nas,分别是x86和arm的架构,实践证明都是能运行起来的。

主机:群晖的DS415+,DS414j (https://www.synology.com)

版本:elasticsearch-1.5.0

安装

先从apache的官方网站上下载elasticsearch的程序包

https://www.elastic.co/downloads/elasticsearch

这里有4种下载包,tar/zip/deb/rpm,我这里选择zip,在nas中解压后就能直接执行了。

需要注意的是,因为elasticsearch是用java编写的,所以运行的环境必须要有java的解释器,在群晖nas上默认是没有的,需要安装java的管理器,然后去oracle的官方网站上下载jre来安装到nas中去。

运行

解压后,运行./bin/elasticsearch,过几秒钟就会把服务启动起来了,如果想要在background中运行,就采用./bin/elasticsearch -d的方式。

运行后,可以开打浏览器直接访问http://localhost:9200/  (这里localhost请替换成你的服务器地址)

运行成功可以看到如下内容:

elasticsearch在NAS上的部署和使用_第1张图片

顺便说一下,

如果想更加容易的去管理elasticsearch,那么就使用Marvel插件(太贵了1000刀一年了,用不起,自己开发)
该插件提供一下功能:
监控你的cluster状态
实时和历史分析elasticsearch的内部状态,存储历史记录,性能监控等
提供了一个call Elasticsearch's REST API的控制台
bin/plugin -i elasticsearch/marvel/latest
Stop and Start Elasticsearch
http://any-server-in-cluster:9200/_plugin/marvel
如果不想被监控,那么
echo 'marvel.agent.enabled: false' >> ./config/elasticsearch.yml 
如果是在foreground开启,那就直接ctrl+c就可以关闭node,如果不是,那么就用
http://localhost:9200/_shutdown 来关闭吧

和关系型数据库的关系

如果和RDB进行比较,那么
Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns
Elasticsearch ⇒ Indices ⇒ Types ⇒ Documents ⇒ Fields

数据读写

插入/更新数据

elasticsearch在NAS上的部署和使用_第2张图片

you see ? employee/1 要带上1,一般就是用key

抓取数据

GET /megacorp/employee/1*PUT插入数据,GET获取数据,DELETE删除数据,HEAD查询是否存在数据,更新数据?用PUT覆盖就行了

搜索数据

如果是搜索所有的记录,那么就
GET /megacorp/employee/_search

如果是要用轻量级的搜索,那么就
GET /megacorp/employee/_search?q=last_name:Smith

如果要用更加复杂一点的搜索方法,可以使用The domain-specific language (DSL)

elasticsearch在NAS上的部署和使用_第3张图片

对于全文搜索来说,会匹配相关度的。可以精确匹配,也可以让关键词高亮

甚至可以做聚合分析和搜索嵌套

cluster

集群是这个搜索引擎的重头戏啊,通过在不同node上的shard部署,可以做到分布式搜索和容灾备份

创建index的时候,就可以指定分多少个shard,要冗余多少份

elasticsearch在NAS上的部署和使用_第4张图片

这里就指定了shards和replicas的数量,shards只在创建时指定,而replicas可以事后再修改的,默认都是一份rep
直接启动第二node的elasticsearch,然后会自动寻找到主节点进行replicas的拷贝的,完成后如下

elasticsearch在NAS上的部署和使用_第5张图片

如果是1份拷贝,那么3台node就是

elasticsearch在NAS上的部署和使用_第6张图片

但是如果我们想scale更多,则可以提高rep的数量

elasticsearch在NAS上的部署和使用_第7张图片

如果是用URL方法去关闭某个node,则整个cluster就被关闭了,
如果是强制关闭某个node,那么就会降级成如下

elasticsearch在NAS上的部署和使用_第8张图片

集群会遇到些数据更新冲突等问题,

elasticsearch是通过_version这个metadata来检测是否出现更新冲突,如果冲突的就返回失败,由客户端自行决定

如何解决冲突,比如说再次获取最新数据,决定是否插入等。

因为引擎是为每个字段默认都建立了引索,所以如果是部分更新document,那么也是 retrieve-change-reindex process这个步骤 ,但是用自带update的API确保了在一个shards里完成这些步骤,减少到了网路耗时,这样也间接降低了更新冲突的可能性。

 

客户端

以下是目前官方所支持的客户端程序,通常都是封装好了,CRUD就像操作关系型数据库一样方便。

  • Clients & Integrations

    • Java API — 1.5 —  other versions
    • JavaScript API — 4.0 —  other versions
    • Groovy API — 1.5 —  other versions
    • .NET API
    • PHP API — 1.0 —  other versions
    • Perl API
    • Python API
    • Ruby API
    • Curator Index Management
    • Rivers — 1.5 —  other versions
    • Community contributions

你可能感兴趣的:(nas,群晖)