目录
一、简介
1、全文检索
1、数据分类
2、非结构化数据搜索方法
2、什么是 Elasticsearch
3、用途
4、基本概念
二、下载配置,搭建集群
集群规划
解压
配置环境变量
es配置
由于es启动不能直接使用root用户
启动
三、常用集群命令
一、简介
1、全文检索
1、数据分类
我们生活中的数据总体分为三种:结构化数据,非结构化数据,半结构化数据
结构化数据:指具有固定格式或有限长度的数据,如数据库(mysql oracle ...),元数据等。
非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等
半结构化数据,如XML,HTML等
非结构化数据又一种叫法叫全文数据。
对结构化数据的搜索:如对数据库的搜索,用SQL语句。
对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。
对非结构化数据的搜索:如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。
2、非结构化数据搜索方法
顺序扫描:
比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。
如利用windows的搜索也可以搜索文件内容,只是相当的慢。如果你有一个500G硬盘,如果想在上面找到一个内容包含某字符串的文件,不花他几个小时,怕是做不到。Linux下的grep命令也是这一种方式。大家可能觉得这种方法比较原始,但对于小数据量的文件,这种方法还是最直接,最方便的。但是对于大量的文件,这种方法就很慢了。
全文检索(倒排索引es的核心):将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。(实际参考es中文档)
2、什么是 Elasticsearch
官网
Elastic — The Search AI Company | Elastic
Elasticsearch:官方分布式搜索和分析引擎 | Elastic
Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
3、用途
Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:
- 应用程序搜索
- 网站搜索
- 企业搜索
- 日志处理和分析
- 基础设施指标和容器监测
- 应用程序性能监测
- 地理空间数据分析和可视化
- 安全分析
- 业务分析
4、基本概念
Basic Concepts | Elasticsearch Reference [6.0] | Elastic
近实时 near realtime(nrt)
Elasticsearch是一个几乎实时的搜索平台。意思是,从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。
cluster 集群
群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分。
node 节点
节点是单个服务器实例,它是集群的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。
index 索引
索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。就像关系数据库中的“数据库”。它有一个定义多种类型的映射。索引是逻辑名称空间,映射到一个或多个主分片,并且可以有零个或多个副本分片。
document 文档
文档是可以被索引的信息的基本单位。也是全文搜索中被搜索的对象,可以对应一个网页,一篇txt文档或者一个商品。 相当于关系型数据库中的表中的一行记录。例如,您可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。es本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。似于关系数据库中的一行。
文档和索引的关系原理讲解:
文档(txt,doc,docx....):
1, 人生永远不可能复制,要珍惜每一份缘分 ..... 一共100000字 a.txt
2, 珍惜人生的每次相遇,就是缘分..... 一共10000字 b.txt
3, 生命中存在很多相遇和离别,都是缘分中的注定..... 人生 一共1000000字 c.txt
提取关键字(https://www.elastic.co/guide/cn/elasticsearch/guide/current/stopwords.html使用中文分词技术 排除停用词https://wenku.baidu.com/view/8927eede80eb6294dd886c46.html)
1, 人生 永远 复制 珍惜 缘分
2, 珍惜 人生 相遇 缘分
3, 人生 存在 相遇 离别 缘分 注定
创建索引
人生 -> 1,2,3
永远 -> 1
复制-> 1
珍惜 ->1,2
缘分 ->1,2,3
。。。。
倒排索引又叫反向索引,以字或词为文档中出现的位置情况。
shards replicas 碎片和副本
shards:分片数,一个索引分几个片存储,多个分片可以提升读写速度。索引可以存储大量的数据,这些数据可能(分片解决)超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。
replicas:
副本数量,分多个副本存储索引,好处是防止一个节点挂掉,数据丢失(防止单点故障)。
它在碎片/节点出现故障时提供高可用性(提高可用性)。
它允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索(提高搜索速度)。
二、下载配置,搭建集群
集群规划
192.168.37.195
192.168.37.196
192.168.37.197
解压
elasticsearch-6.4.0.tar:elasticsearch-6.4.0.tar资源-CSDN文库
#上传文件到vm中,解压
tar -xzvf /software/elasticsearch-6.4.0.tar.gz -C /usr/
#修改名称
mv /usr/elasticsearch-6.4.0/ /usr/elasticsearch/
配置环境变量
#编辑文件
vim /etc/profile
#添加配置
export ES_HOME=/usr/elasticsearch
#修改配置:
PATH=$PATH:$ES_HOME/bin
#让配置生效
source /etc/profile
#测试
echo $ES_HOME
es配置
1,在/usr/elasticsearch创建数据data,后面配置用到:
mkdir /usr/elasticsearch/data
2,在/etc/sysctl.conf最后添加(解决:max virtual memory areas vm.max_map_count [65530] is too low错误,vm.max_map_count单个JVM能开启的最大线程数)
sysctl.conf 文件是用于在系统启动时设置内核参数(也称为系统调用)的配置文件。这些参数控制了系统的各种行为,比如网络、内存管理、文件系统等
vim /etc/sysctl.conf
vm.max_map_count=655360
让文件生效:
sysctl -p
3,在/etc/security/limits.conf最后添加:(不配置缺省值:1024,解除 Linux 系统的最大进程数和最大文件打开数限制:* 代表针对所有用户 ues表示启动用户名称,与下面创建用户一致 noproc 是代表最大进程数 nofile 是代表最大文件打开数 )
limits.conf 限制登录用户的资源分配,比如最大打开文件数(文件描述符数量)、最大进程数等
vim /etc/security/limits.confues soft nofile 65536 ues hard nofile 131072 ues soft nproc 4096 ues hard nproc 4096
4,修改节点的配置文件jvm.options
vim /usr/elasticsearch/config/jvm.options (22行)
-Xms512m
-Xmx512m
原则:
最小堆的大小和最大堆的大小应该相等。
Elasticsearch可获得越多的堆,并且内存也可以使用更多的缓存。但是需要注意,分配了太多的堆给你的项目,将会导致有长时间的垃圾搜集停留。
设置最大堆的值不能超过你物理内存的50%,要确保有足够多的物理内存来保证内核文件缓存。
5,修改配置文件 ElasticSearch.yml
vim /usr/elasticsearch/config/elasticsearch.yml
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# Elasticsearch Guide | Elastic
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
# 17行
cluster.name: my-app
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#23行
node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
# 33
path.data: /usr/elasticsearch/data
#
# Path to log files:
# 37
path.logs: /usr/elasticsearch/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区
# 43 44
bootstrap.memory_lock: false
#是否支持过滤掉系统调用,Elasticsearch安装各种各样的系统调用过滤依赖于操作系统(如:Linux上的seccomp)。如果成功安装与启用了系统调用过滤,将能够防御一些对Elasticsearch调用的攻击行为。要想通过此检查,你必须根据日志来修复任何阻止系统调用过滤的系统错误,或者通过配置bootstrap.system_call_filter为false来禁用系统调用过滤然后你自己做风控。
bootstrap.system_call_filter: false
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#56
network.host: 192.168.23.30
#
# Set a custom port for HTTP:
#60
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#当启动新节点时,通过这个ip列表进行节点发现,组建集群 69
discovery.zen.ping.unicast.hosts: ["cr1", "cr2","cr3"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#通过配置这个参数来防止集群脑裂现象 (集群总节点数量/2)+1 73
discovery.zen.minimum_master_nodes: 2
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
因为配置文件中配置了集群节点的主机名称,所以在/etc/hosts添加下面配置:
vim /etc/hosts
192.168.170.131 es1
192.168.170.131 es2
192.168.170.131 es3
由于es启动不能直接使用root用户
#创建用户
useradd ues
tail -1 /etc/passwd
ls /home/
#赋权
tail -1 /etc/group #查看组 发现有ues组
chown -R ues:ues /usr/elasticsearch
查看:
ll /usr/ |grep elasticsearch
ll /usr
ll /usr/elasticsearch
#复习免密
ssh-keygen -t rsa 三次回车
ssh-copy-id es2 yes #输入密码:123456
ssh-copy-id es3 yes #输入密码:123456
启动
#在to All Sessions中切换到ues用户
su -l ues
#在to All Sessions中启动
elasticsearch -d;
#查看日志使用
cat /usr/elasticsearch/logs/my-app.log
三、常用集群命令
查看集群支持命令:
curl 192.168.23.30:9200/_cat
查看集群是否健康
curl 192.168.23.30:9200/_cat/health
curl 192.168.23.30:9200/_cat/health?v
绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示不可用
curl 192.168.23.30:9200/_cat/health?help
查看master:
curl 192.168.23.30:9200/_cat/master?v
命令支持help:
curl 192.168.23.30:9200/_cat/master?help
查看所有索引:
curl 192.168.23.30:9200/_cat/indices