返回顶部

elasticsearch

Elasticsearch介绍

  Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合

Elasticsearch是一个基于Apache Lucene的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。

想要使用它,你必须使用

Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

mysql虽然也可以搜索,比如查询某个字符串%,需要全表扫描

Elasticsearch非常适合全文检索

Elasticsrarch 可以灵活的存储不同类型的数据

应用场景

  • 商城的商品搜索

  • 所有产品的评论

  • 高亮显示搜索内容

  • 收集展示各种日志

Elasticsearch 使用JavaScript Object Notation 或者JSON作为文档的序列化格式。JSON序列化被大多数编程语言所支持,并且已经成为 NoSQL领域的标准格式。 它简单、简洁、易于阅读。

考虑一下这个 JSON 文档,它代表了一个user对象:

{
"email": "john@smith.com", 
"first_name": "John",
"last_name": "Smith",
"info":
     { "bio": "Eco-warrior and defender of the weak", 
     "age": 25,
     "interests": [ "dolphins", "whales" ]
     },
"join_date": "2014/05/01" 
}

Elasticsearch安装部署

安装方式

优点

缺点

docker

1.部署方便

2.开箱即用

3.启动迅速

1.需要有docker的知识

2.修改配置麻烦,需要重新生成镜像

3.数据存储需要挂载目录

tar

1.部署灵活

2.对系统的侵占性小

1.需要自己写启动管理文件

2.目录提前需要规划好

Rpm|deb

1.部署方便

2.启动脚本安装即用

3.存放目录标准化

1.软件各个组件分散在不同的目录

2.卸载可能不干净

3.默认配置需要修改

ansible

1.极其的灵活

2.你想要的功能都有

3.批量部署速度快

1.需要学习ansible语法和规则

2.需要提前规划好所有的标准

3.需要专人维护

Elasticsearch安装部署-rpm安装

安装java

yum install -y java-1.8.0-openjdk.x86_64  

下载安装软件

mkdir -p /data/es_soft/
cd /data/es_soft/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
rpm -ivh elasticsearch-6.6.0.rpm

配置启动

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service

检查是否启动成功

ps -ef|grep elastic
lsof -i:9200

Elasticsearch目录文件说明

#查看elasticsearch软件安装了哪些目录
rpm -ql elasticsearch 

#查看elasticsearch的所有配置文件
rpm -qc elasticsearch	

配置文件说明

  • /etc/elasticsearch/elasticsearch.yml #配置文件

  • /etc/elasticsearch/jvm.options. #jvm虚拟机配置文件

  • /etc/init.d/elasticsearch #init启动文件

  • /etc/sysconfig/elasticsearch #环境变量配置文件

  • /usr/lib/sysctl.d/elasticsearch.conf #sysctl变量文件,修改最大描述符

  • /usr/lib/systemd/system/elasticsearch.service #systemd启动文件

  • /var/lib/elasticsearch # 数据目录

  • /var/log/elasticsearch #日志目录

  • /var/run/elasticsearch #pid目录

Elasticsearch配置说明-1

grep "^[a-z]" elasticsearch.yml 

/etc/elasticsearch/elasticsearch.yml (ip地址需要改一下)

cluster.name: db5
node.name: node-1
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 192.168.163.130
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.initial_master_nodes: ["node-1"] 

修改完配置文件后我们需要重启一下

mkdir /data/elasticsearch
chown -R elasticsearch:elasticsearch /data/elasticsearch/
systemctl restart elasticsearch
systemctl status elasticsearch

这个时候可能会启动失败,查看日志可能会发现是锁定内存失败

官方解决方案

  • https://www.elastic.co/guide/en/elasticsearch/reference/6.6/setup-configuration-memory.html

  • https://www.elastic.co/guide/en/elasticsearch/reference/6.6/setting-system-settings.html#sysconfig

修改启动配置文件或创建新配置文件

方法1: systemctl edit elasticsearch

方法2: vim /usr/lib/systemd/system/elasticsearch.service

增加如下参数

[Service]
LimitMEMLOCK=infinity

重新启动

systemctl daemon-reload
systemctl restart elasticsearch  

查看日志集群名称改为db5日志文件也跟着变动(坑)

tailf /var/log/elasticsearch/db5.log

Elasticsearch术语及概念

索引词

在elastiasearch中索引词(term)是一个能够被索引的精确值。foo,Foo,FOO几个单词是不同的索引词。索引词(term)是可以通过term查询进行准确的搜索。

文本(text)

文本是一段普通的非结构化文字。通常,文本会被分拆成一个个的索引词,存储在elasticsearch的索引库中。为了让文本能够进行搜索,文本字段需要事先进行分析了;当对文本中的关键词进行查询的时候,搜索引擎

应该根据搜索条件搜索出原文本。

分析(analysis)

分析是将文本转换为索引词的过程,分析的结果依赖于分词器。比如:FOO BAR,Foo-Bar和foo bar这几个词有可能会被分析成相同的索引词foo和bar,这些索引词存储在Elasticsearch的索引库中。

集群(cluster)

集群由一个或多个节点组成,对外提供服务,对外提供索引和搜索功能。在所有节点,一个集群有一个唯一的名称默认为“elasticsearch”.此名称是很重要的,因为每个节点只能是集群的一部分,当该节点被设置为相同

的集群名称时,就会自动加入集群。当需要有多个集群的时候,要确保每个集群的名称不能重复,,否则节点可能会加入到错误的集群。请注意,一个节点只能加入到一个集群。此外,你还可以拥有多个独立的集群,

每个集群都有其不同的集群名称。

节点(node)

一个节点是一个逻辑上独立的服务,它是集群的一部分,可以存储数据,并参与集群的索引和搜索功能。就像集群一样,节点也有唯一的名字,在启动的时候分配。如果你不想要默认名称,你可以定义任何你想要的节点名.这个

名字在理中很重要,在Elasticsearch集群通过节点名称进行管理和通信.一个节点可以被配置加入到一个特定的集群。默认情况下,每个节点会加人名为Elasticsearch 的集祥中,这意味着如果你在网热动多个节点,如果网络

畅通,他们能彼此发现井自动加人名为Elasticsearch 的一个集群中,你可以拥有多个你想要的节点。当网络没有集祥运行的时候,只要启动一个节点,这个节点会默认生成一个新的集群,这个集群会有一个节点。

分片(shard)

分片是单个Lucene 实例,这是Elasticsearch管理的比较底层的功能。索引是指向主分片和副本分片的逻辑空间。 对于使用,只需要指定分片的数量,其他不需要做过多的事情。在开发使用的过程中,我们对应的对象都是索

引,Elasticsearch 会自动管理集群中所有的分片,当发生故障的时候,Elasticsearch 会把分片移动到不同的节点或者添加新的节点。

一个索引可以存储很大的数据,这些空间可以超过一个节点的物理存储的限制。例如,十亿个文档占用磁盘空间为1TB。仅从单个节点搜索可能会很慢,还有一台物理机器也不一定能存储这么多的数据。为了解决这一问

题,Elasticsearch将索引分解成多个分片。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的单元,可以托管在集群中的任何节点。

主分片

每个文档都存储在一个分片中,当你存储一个文档的时候,系统会首先存储在主分片中,然后会复制到不同的副本中。默认情况下,一个索引有5个主分片。 你可以事先制定分片的数量,当分片一旦建立,则分片的数量不能修

改。 

副本分片

每一个分片有零个或多个副本。副本主要是主分片的复制,其中有两个目的:

- 增加高可用性:当主分片失败的时候,可以从副本分片中选择一个作为主分片。

- 提高性能:当查询的时候可以到主分片或者副本分片中进行查询。默认情況下,一个主分片配有一个副本,但副本的数量可以在后面动态地配置增加。副本分片必部署在不同的节点上,不能部署在和主分片相同的节点上。

分片主要有两个很重要的原因是:

  • - 允许水平分割扩展数据。

  • - 允许分配和井行操作(可能在多个节点上)从而提高性能和吞吐量。

  • 这些很强大的功能对用户来说是透明的,你不需要做什么操作,系统会自动处理。

索引(index)

索引是具有相同结构的文档集合。例如,可以有一个客户信息的索引,包括一个产品目录的索引,一个订单数据的索引。 在系统上索引的名字全部小写,通过这个名字可以用来执行索引、搜索、更新和删除操作等。在单个

集群中,可以定义多个你想要的索引。

类型(type)

在索引中,可以定义一个或多个类型,类型是索引的逻辑分区。在一般情况下,一种类型被定义为具有一组公共字段的文档。例如,让我们假设你运行一个博客平台,并把所有的数据存储在一个索引中。在这个索引中,你可以

定义一种类型为用户数据,一种类型为博客数据,另一种类型为评论数据。

文档(doc)

文档是存储在Elasticsearch中的一个JSON格式的字符串。它就像在关系数据库中表的一行。每个存储在索引中的一个文档都有一个类型和一个ID,每个文档都是一个JSON对象,存储了零个或者多个字段,或者键值对。

原始的JSON 文档假存储在一个叫作Sour的字段中。当搜索文档的时候默认返回的就是这个字段。

映射

映射像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或者在第一次存储文档的时候自动识别。

字段

文档中包含零个或者多个字段,字段可以是一个简单的值(例如字符串、整数、日期),也可以是一个数组或对象的嵌套结构。字段类似于关系数据库中表的列。每个字段都对应一个字段类型,例如整数、字符串、对象等。

字段还可以指定如何分析该字段的值。

主键

ID是一个文件的唯一标识,如果在存库的时候没有提供ID,系统会自动生成一个ID,文档的 index/type/id必须是唯一的。

复制

复制是一个非常有用的功能,不然会有单点问题。 当网络中的某个节点出现问题的时

候,复制可以对故障进行转移,保证系统的高可用。因此,Elasticsearch 允许你创建一个或多个拷贝,你的索引分片就形成了所谓的副本或副本分片。

复制是重要的,主要的原因有:

- 它提供丁高可用性,当节点失败的时候不受影响。需要注意的是,一个复制的分片不会存储在同一个节点中。

它允许你扩展搜索量,提高并发量,因为搜索可以在所有副本上并行执行。

每个索引可以拆分成多个分片。索引可以复制零个或者多个分片.一旦复制,每个索引就有了主分片和副本分片.分片的数量和副本的数量可以在创建索引时定义.当创建索引后,你可以随时改变副本的数量,但你不能改变分

片的数量.

默认情況下,每个索引分配5个分片和一个副本,这意味着你的集群节点至少要有两个节点,你将拥有5个主要的分片和5个副本分片共计10个分片.

每个Elasticsearch分片是一个Lucene 的索引。有文档存储数量限制,你可以在一个

单一的Lucene索引中存储的最大值为lucene-5843,极限是2147483519(=integer.max_value-128)个文档。你可以使用cat/shards API监控分片的大小。

所有其他语言可以使用RESTful API通过端口9200和Elasticsearch进行通信,你可以用你最喜爱的web客户端访问Elasticsearch.事实上,你甚至可以使用curl命令和Elasticsearch交互 。

一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:

  • curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>’

  • VERB: 适当的 HTTP 方法 或 谓词 : GET`、 `POST`、 `PUT`、 `HEAD 或者 `DELETE`。 PROTOCOL http 或者 https`(如果你在 Elasticsearch 前面有一个 `https 代理)

  • HOST : Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。

  • PORT : 运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。

  • PATH : API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如: _cluster/stats 和 _nodes/stats/jvm 。

  • QUERY_STRING: 任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)

  • BODY : 一个 JSON 格式的请求体 (如果请求需要的话)

Elasticsearch-交互

三种交互方式

curl命令:

  • 最繁琐

  • 最复杂

  • 最容易出错

  • 不需要安装任何软件,只需要有curl命令

es-head插件

  • 查看数据方便

  • 操作相对容易

  • 需要node环境

kibana

  • 查看数据以及报表格式丰富

  • 操作很简单

  • 需要java环境和安装配置kibana

Elasticsearch交互- head插件交互

集群状态颜色:

  • 绿色:所有条件都满足,数据完整,副本满足

  • 黄色:数据完整,副本不满足

  • 红色:有索引里的数据出现不完整了

  • 紫色:有分片正在同步中

  • 默认自己就是一个集群,默认的集群名称为:elasticsearch,在这里是db5

在谷歌浏览器扩展程序中下载 elasticsearch-head

创建索引(表)

curl -XPUT 10.0.0.41:9200/vipinfo?pretty

 

插入文档数据

curl -XPUT  10.0.0.41:9200/vipinfo/user/2?pretty -H 'Content-Type: application/json' -d '{
"first_name": "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums", "interests": [ "music" ]
}'

curl –XPUT 10.0.0.41:9200/vipinfo/user/3?pretty -H 'Content-Type: application/json' -d '{
"first_name": "Douglas", "last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets", "interests": [ "forestry" ]
}'

curl -XPUT 10.0.0.41:9200/vipinfo/user/1?pretty -H 'Content-Type: application/json' -d '
{
"first_name" : "John",
"last_name": "Smith",
"age" : 25,
"about" : "I love to go rock climbing", "interests": [ "sports", "music" ]
}'

一个文档不仅仅包含它的数据 ,也包含元数据 —— 有关文档的信息。 

三个必须的元数据元素如下: 

  • _index 文档在哪存放

  • _type 文档表示的对象类别

  • _id 文档唯一标识 

_index :一个 索引 应该是因共同的特性被分组到一起的文档集合。 例如,你可能存储所有的产品在索引 products 中,而存储所有销售的交易到索引 sales 中

_type:数据可能在索引中只是松散的组合在一起,但是通常明确定义一些数据中的子分区是很有用的。 例如,所 有的产品都放在一个索引中,但是你有许多不同的产品类别,比如 "electronics" 、 "kitchen" 和

"lawn- care" 这些文档共享一种相同的(或非常相似)的模式:他们有一个标题、描述、产品代码和价格。他们只是正 好属于“产品”下的一些子类。 Elasticsearch 公开了一个称为 types (类型)的特性,它允许您在索引中对

数据进行逻辑分区。不同 types 的文档可能有不同的字段,但最好能够非常相似。

_id:ID 是一个字符串, 当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创 建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成 

查询索引中所有的

curl -XGET '10.0.0.41:9200/vipinfo/user/_search?pretty'

查询指定文档数据

curl -XGET 10.0.0.41:9200/vipinfo/user/1?pretty
curl -XGET 10.0.0.41:9200/vipinfo/user/2?pretty  

按条件查询文档数据

查询索引中符合条件的数据:搜索姓氏为Smith的雇员

curl -XGET '10.0.0.41:9200/vipinfo/user/_search?q=last_name:Smith&pretty'

使用Query-string查询 结果同上

curl -XGET '10.0.0.41:9200/vipinfo/user/_search?pretty' -H 'Content-Type: application/json' -d '           
{

  "query" : { 

    "match" : {

        "last_name" : "Smith"

     }

  } 

}
'

使用过滤器查询

搜索姓氏为 Smith 的雇员,但这次我们只需要年龄大于 30 的。

查询需要稍作调整,使用过滤器 filter ,它支持高效地执行一个结构化查询

curl -XGET '10.0.0.41:9200/vipinfo/user/_search?pretty' -H 'Content-Type: application/json' -d '{ 

  "query" : { 

    "bool": { 

      "must": { 

        "match" : { 

          "last_name" : "smith" 

          } 

     }, 

     "filter": { 

        "range" : {"age" : { "gt" : 30 }  

          } 

        } 

      } 

    } 

 }'

 更新数据的两种方式

PUT更新,需要填写完整的信息

curl -XPUT '10.0.0.41:9200/vipinfo/user/1?pretty' -H 'Content-Type: application/json' -d '
{

    "first_name" : "John",

    "last_name": "Smith",

    "age" : 27,

    "about" : "I love to go rock climbing", "interests": [ "sports", "music" ]

}'

POST更新,只需要填写需要更改的信息 (会把没写入的字段制空)

curl -XPOST '10.0.0.41:9200/vipinfo/user/1?pretty' -H 'Content-Type: application/json' -d '
{

    "age" : 29

}'

 删除操作

 删除指定文档数据

curl -XDELETE '10.0.0.41:9200/vipinfo/user/1?pretty'

删除索引(表)

curl -XDELETE '10.0.0.41:9200/vipinfo?pretty'

Elasticsearch 集群

Elasticsearch 可以横向扩展至数百(甚至数千)的服务器节点,同时可以处理PB级数据 Elasticsearch 天生就是分布式的,并且在设计时屏蔽了分布式的复杂性。 Elasticsearch 尽可能地屏蔽了分布式系统的复杂性。

这里列举了一些在后台自动执行的操作:

分配文档到不同的容器 或 分片中,文档可以储存在一个或多个节点中

按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡

复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失

将集群中任一节点的请求路由到存有相关数据的节点

集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成,它们共同承担数据和负载的压力。

当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

当一个节点被选举成为主节点时,它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等.而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流

量的增加它也不会成为瓶颈.任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。

作为用户,我们可以将请求发送到 集群中的任何节点,包括主节点.每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点.无论我们将请求发送到哪个节点,它都能负责从各个包含

我们所需文档的节点收集回数据,并将最终结果返回給客户端. Elasticsearch 对这一切的管理都是透明的。


集群的安装部署和单机没有什么区别,区别在于配置文件里配置上集群的相关参数

  • cluster.name: dba6 #集群名称,一个集群内所有节点要一样

  • discovery.zen.ping.unicast.hosts: [”IP1”,” IP2”] #集群节点发现IP,只写其中的一个即可

  • discovery.zen.minimum_master_nodes: 1 #选举相关参数,有公式 master/2 +1

新增节点配置步骤

安装软件

rpm -ivh elasticsearch-6.6.0.rpm

修改配置文件

[root@db02 elasticsearch]# cat /etc/elasticsearch/elasticsearch.yml 
cluster.name: Linux
node.name: node-2
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.52,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]
discovery.zen.minimum_master_nodes: 2

修改内存锁定

[root@db02 ~]# systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity

创建数据目录并授权

mkidr /data/elasticsearch
chown =R elasticsearch:elasticsearch /data/elasticsearch

重启服务

systemctl daemon-reload
systemctl start elasticsearch

查看日志和端口

tail -f /var/log/elasticsearch/Linux.log
netstat -lntup:grep 9200

默认情况下

  • 主节点 :负责调度数据返回数据

  • 工作节点 :负责处理数据

2个节点,master设置为2的时候,一台出现故障导致集群不可用

解决方案:

把还存活的节点的配置文件集群选举相关的选项注释掉或者改成1

discovery.zen.minimum_master_nodes: 1

重启服务

结论:

  • 两个节点数据不一致会导致查询结果不一致

  • 找出不一致的数据,清空一个节点,以另一个节点的数据为准

  • 然后手动插入修改后的数据

增加第三台节点

安装软件

rpm -ivh elasticsearch-6.6.0.rpm

修改配置文件

cluster.name: Linux
node.name: node-3
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.53,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.53"]
discovery.zen.minimum_master_nodes: 2

修改内存锁定

[root@db02 ~]# systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity

创建数据目录并授权

mkdir /data/elasticsearch -p 
chown -R elasticsearch:elasticsearch /data/elasticsearch

重启服务

systemctl daemon-reload
systemctl start elasticsearch

查看日志和端口

tail -f /var/log/elasticsearch/Linux.log
netstat -lntup|grep 9200 

Elasticsearch 集群-查看集群信息

查看集群信息

curl -XGET 'http://localhost:9200/_nodes/procese?human&pretty'

查询节点的状态

curl -XGET 'http://localhost:9200/_nodes/_all/info/jvm,process?human&pretty'
curl -XGET 'http://localhost:9200/_cat/nodes?human&pretty' 
curl -XGET 'http://localhost:9200/_cluster/health?pretty'
curl -XPUT 'localhost:9200/_cat/indices?pretty'

Elasticsearch 集群-分片与复制

默认ES会创建5分片1副本的配置

curl -XPUT 'localhost:9200/index1?pretty'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "index1"
}

同时我们也可以手动分配分片数和副本数

curl -XPUT 'localhost:9200/index2?pretty' -H 'Content-Type: application/json' -d' 
{
"settings" : { 
"number_of_shards" : 3, 
"number_of_replicas" : 1
} 
}'

 调整福本数

分片数一旦创建就不能再更改了,但是我们可以调整副本数

curl -XPUT 'localhost:9200/index2/_settings?pretty' -H 'Content-Type: application/json' -d'         
{
"settings" : { 
  "number_of_replicas" : 2
 } 
}’

此时如果我们关闭一个节点,会发现集群状态发生了改变

在我们关闭 Node 1 的同时也失去了主分片 1 和 2 ,并且在缺失主分片的时候索引也不能正常工作。 如果 此时来检查集群的状况,我们看到的状态将会为 red :不是所有主分片都在正常工作。 幸运的是,在其它节点

上存在着这两个主分片的完整副本, 所以新的主节点立即将这些分片在 Node 2 和 Node 3 上对应的副本分片提升为主分片, 此时集群的状态将会为 yellow 。 这个提升主分片的过程是瞬间 发生的,如同按下一个开关

一般。

为什么我们集群状态是 yellow 而不是 green 呢? 虽然我们拥有所有的三个主分片,但是同时设置了每个主 分片需要对应2份副本分片,而此时只存在一份副本分片。 所以集群不能为 green 的状态,不过我们不必 过于

担心:如果我们同样关闭了 Node 2 ,我们的程序 依然 可以保持在不丢任何数据的情况下运行,因为 Node 3 为每一个分片都保留着一份副本。

如果我们重新启动 Node 1 ,集群可以将缺失的副本

  

Elasticsearch x-pack监控功能

x-pack为elasticsearch, logstash, kibana提供了监控,报警,用户认证等功能,属于一个集成的插件。

6.x以前是以插件形式存在

6.x以后默认安装的时候就集成在软件包里了

不过这些功能并不全是免费的,具体分为四个版本:开源,基础,黄金,铂金四个版本

默认安装的时候是基础版

不同版本功能对比网址:

  • https://www.elastic.co/subscriptions

由于x-pack存在可以破解的方法

索性,官方在6.3以后直接将监控功能免费了

也就是说,不用破解,默认的基础班就可以使用x-pack的官方监控,为官方点赞!

架构说明:

  • https://www.elastic.co/guide/en/elastic-stack-overview/6.6/how-monitoring-works.html

ES配置说明

  • https://www.elastic.co/guide/en/kibana/current/monitoring-kibana.html

开启数据监控参数

GET _cluster/settings 
PUT _cluster/settings { "persistent": { "xpack.monitoring.collection.enabled": true } }

修改ES配置文件,最后添加2行

  • xpack.monitoring.exporters.my_local:

  • type: local

Elasticsearch Search Guard 安装配置

由于x-pack里关于安全认证是收费功能,而我们又不想去破解

那么替代的方案就是Search Guard

相关网址:

  • https://docs.search-guard.com/latest/main-concepts

  • https://docs.search-guard.com/latest/demo-installer

  • https://docs.search-guard.com/latest/search-guard-versions

  • https://docs.search-guard.com/latest/search-guard-installation

Elasticsearch运维工具

https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html

  • 1.JVM最大最小内存调整

  • 2.关闭SWAP分区

  • 3. vm.max_map_count调整

  • 4.ulimit调整

  • 5.磁盘性能

Elasticsearch-dump

  • https://github.com/taskrabbit/elasticsearch-dump

Elasticsearch项目-中文分词器

所有节点都得安装中文分词器

官方地址

  • https://github.com/medcl/elasticsearch-analysis-ik

分词器安装

cd /usr/share/elasticsearch/bin
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip

分词器测试

创建索引

curl -XPUT http://localhost:9200/index

创建映射

curl -XPOST http://localhost:9200/index/fulltext/_mapping -H 'Content-Type:application/json' -d'
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
 
}'

创建一些文档

curl -XPOST http:// localhost:9200/index/fulltext/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http:// localhost:9200/index/fulltext/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http:// localhost:9200/index/fulltext/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/fulltext/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
‘

查询

curl -XPOST http:// localhost:9200/index/fulltext/_search?pretty  -H 'Content-Type:application/json' -d'
{
    "query" : { "match" : { "content" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
' 
posted @ 2020-03-17 22:10  Crazymagic  阅读(157)  评论(0编辑  收藏  举报