大数据课程M2——ELK的ELASTICSEARCH概述
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州
▲ 本章节目的
⚪ 了解ELK的ELASTICSEARCH概括;
⚪ 掌握ELK的ELASTICSEARCH核心概念;
一、ELASTICSEARCH概括
1. ES安装和启动
注意:如果使用达内云主机,无需安装es,直接配置yml启动即可。
1. 安装
下载ES最新版本的安装包。
截止到本笔记时间,最新版本是7.10.2,ES的更新速度非常之快,但是我们应该合理运用ES的官方文档帮助我们实现学习和深入。

上传到服务器解压安装。
这里我们准备3个服务器分别上传,并且进行解压.使用的软件是开源免费的finalshell。

调用命令解压:
[root@10-42-17-191 software]# tar -zxvf /home/resource/elasticsearch-7.10.2-linux-x86_64.tar.gz -C /home/software/
配置es根目录下的jdk环境。
当前版本的 es7.10.2,要求最推荐使用 jdk11 以上的环境,根目录已经准备好了 jdk15。
2. 启动
安装完成之后我们可以在服务器启动这个ES软件。
添加用户用户组。
ES拒绝root用户直接启动软件,需要创建新用户,并且赋权启动。
[root@10-9-182-139 config]# groupadd tedu
[root@10-9-182-139 config]# useradd tedu -g tedu
赋权。
[root@10-42-17-191 config]# chown -R tedu:tedu /home/software/elasticsearch-7.10.2
启动ES。
[tedu@10-42-17-191 elasticsearch-7.10.2]$ ./bin/elasticsearch
测试es进程。
发送一个http请求,查看es。
3. 配置集群启动
上述启动的是单节点进程,如果按照默认配置,实际上是多个服务器各自启动一个ES进程,想要将他们添加到同一个集群,需要进行配置.配置文件就是ES目录中的config/elasticsearch.yml文件:
cluster.name: es-cluster
node.name: es01
path.data: /home/software/elasticsearch-7.10.2/data
path.logs: /home/software/elasticsearch-7.10.2/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.42.129", "192.168.42.131","192.168.42.130"]
cluster.initial_master_nodes: ["192.168.42.129"]
http.cors.enabled: true
http.cors.allow-origin: "*"
集群名称,同一个服务器集群的节点实例的集群名称要一致。
节点名称,也就是你启动的每个es的进程的名字。
path.data:
数据路径,指定当前es进程节点的存储数据的文件夹。
注意:如果路径不在启动es用户的权限范围之内,启动会报错。
path.logs:
es启动的日志文件夹。
注意:如果路径不在启动es用户的权限范围之内,启动会报错。
bootstrap.memory_lock:
锁定物理内容,会造成性能降低,将其关闭。
bootstrap.system_call_filter:
系统调用过滤器主要是防止任意代码攻击漏洞的.将其关闭。
network.host:
es进程绑定的物理ip可以ipv4 可以ipv6,默认是localhost不允许外界访问。
http.port:
es进程绑定占用的http协议访问端口,默认9200。
transport.tcp.port:
es进程绑定单用的tcp协议访问端口,默认9300。
discovery.seed_hosts:
配置主机hosts名单,主要可以使用ip:port的方式来配置.有几个节点,就配置几个节点。
cluster.initial_master_nodes:
集群第一次启动初始化时,想要指定的主机节点是谁,一旦配置,初始主机节点就定了,后续可以将这个配置删除。
http.cors.enabled:
是否支持跨域访问,如果支持,有一些代理软件是可以访问es的比如head插件。
http.cors.allow-origin:
当设置了支持跨域后,允许的跨域域名都有哪些,默认是*。
案例:
将多个es节点按照需求配置完成所有内容,如下所示。
ES01节点:
cluster.name: es-cluster
node.name: es01
path.data: /home/software/elasticsearch-7.10.2/data
path.logs: /home/software/elasticsearch-7.10.2/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.42.129", "192.168.42.131","192.168.42.130"]
cluster.initial_master_nodes: ["192.168.42.129"]
http.cors.enabled: true
http.cors.allow-origin: "*"
ES02节点:
cluster.name: es-cluster
node.name: es02
path.data: /home/software/elasticsearch-7.10.2/data
path.logs: /home/software/elasticsearch-7.10.2/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.42.129", "192.168.42.131","192.168.42.130"]
cluster.initial_master_nodes: ["192.168.42.129"]
http.cors.enabled: true
http.cors.allow-origin: "*"
ES03节点:
cluster.name: es-cluster
node.name: es03
path.data: /home/software/elasticsearch-7.10.2/data
path.logs: /home/software/elasticsearch-7.10.2/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.42.129", "192.168.42.131","192.168.42.130"]
cluster.initial_master_nodes: ["192.168.42.129"]
http.cors.enabled: true
http.cors.allow-origin: "*"
最后将3个节点挨个启动.一个分布式的集群就搭建好了。
启动错误问题:
无!
4. 测试访问
我们可以连接任意一个节点的9200端口进行集群的测试。
http://192.168.42.129:9200 到返回结果。
{
"name" : "es01",
"cluster_name" : "es-cluster",
"cluster_uuid" : "h9ffNy1YRleRuimyJ0AXQA",
"version" : {
"number" : "7.10.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
2. ES的head插件
head插件是一个可以帮助用户代理访问es的,可以图形界面展示数据的插件.我们配置了es的跨域开启,所以为了方便观察,我们可以安装head插件。
1. node.js安装
head插件成功运行的语言环境就是node,需要提前安装,意义就类似于我们想运行tomcat就必须在jdk安装的前提下进行。
下载
wget https://nodejs.org/dist/v15.0.0/node-v15.0.0-linux-x64.tar.gz
在这里可以手动选择比较新的版本,node的环境也是对应操作系统的,所以这里选择Linux系统。
解压
[root@localhost resource]# tar -xf node-v15.0.0-linux-x64.tar.gz -C /home/presoft/
环境变量
1. 打开 /etc/profile。
[root@localhost resource]# vim /etc/profile
2. 编辑内容。
NODE_HOME=/home/presoft/node-15
PATH=PATH:./:/home/software/elasticsearch-7.10.2/jdk/bin:NODE_HOME/bin
export PATH NODE_HOME
3. 退出编辑内容,使得编辑生效。
[root@localhost resource]# source /etc/profile
验证node安装

2. head插件安装和启动
下载head插件
我们可以从git上下载head插件。
[root@localhost resource]# yum -y install git
[root@localhost resource]# git clone https://github.com/mobz/elasticsearch-head.git
npm安装
在head插件文件夹的根目录执行npm安装。
[root@localhost elasticsearch-head]#npm install -g grunt
[root@localhost elasticsearch-head]npm install
配置head文件(云主机必做)
在gruntFile.js中配置97(有可能版本不同有上下浮动)行内容,添加一个hostname。

启动head(云主机必做)
直接在 head 根目录运行命令启动,grunt server。

访问这个地址

二、ELASTICSEARCH核心概念
1. 索引(index)
类似于关系型数据中的库-database,一个es的集群中可以有多个索引,每个索引都是一批独立的存储数据,按照一定的数据结构保存,方便查询。
2. 类型(type)
类似于关系型数据库中的表格-table,一个索引中可以有多个类型,每个类型中的数据结构是一致的。
注意:6.x中使用类型,但是在7.x版本中,所有索引的类型只有一个叫做_doc,在8.x的版本将会彻底移除类型的概念.目的是提升索引的效率。
3. 映射(mapping)
类似于关系型数据库中定义的结构-schema,主要用来定义我们想要往es索引里存储的数据结构,到底是string还是数字,还是布尔等等。
4. 文档(document)
类似于关系型数据库中的行数据-rows,是es中存储数据的最小数据单元.每个文档都能根据数据的结构,有多个字段field存在.而field的类型,在存储数据时,是由mapping映射决定的。
5. 字段(field)
类似于关系型数据库中的列数据-columns,每个文档都由多个field组成。
6. 集群(cluster)
Es是天生分布式集群的结构,每个es进程都属于一个集群,即使只有一个Es进程在启动,它也是一个集群.不同集群由集群名称分开。
7. 节点(node)
每个ES进程都是一个节点,每个节点都有自己的名字。
8. 分片(shard)
单台机器存储数据量是有限的,es可以将一个index下的数据分为多个shard,存储在不同的机器上,横向扩展,存储更多的数据,而且可以让搜索,分析等操作分步到多个机器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。
9. 分片复制(Replica)
每台机器都可能会不可用,此时shard上的数据就可能会丢失。因此可以为每个shard建立多个副本,保证在一个shard不可用时还可以使用副本,且保证数据不丢失,还能提升查询性能。
注意:主分片的个数是在建立索引时定下的,不能修改,默认为5个,副本分片,可以随时修改,默认是1个。因为要保证高可用,所以每个分片的的主分片和副本分片不能在一台机器上,所以保证最小高可用配置,需要两台服务器。
10. 接近实时(Near Reatime-NRT)
从写入数据到可以被搜索到会有一些延时,大概1秒左右,基于es执行搜索和分析可以达到秒级。
