elasticsearch

elasticsearch

EFK.JPG

es单点部署(二进制方式)

1.配置java环境
# 下载oracle JDK
https://www.oracle.com/cn/java/technologies/downloads/

名称
jdk-8u381-linux-x64.tar.gz

mkdir -pv /opt/software/jdk
tar xf jdk-8u381-linux-x64.tar.gz -C /opt/jdk/
cd /opt/jdk && ln -sv jdk1.8.0_381 jdk
vim /etc/profile.d/elk-jdk.sh
#!/bin/bash
export JAVA_HOME=/opt/software/jdk
export PAHT=$PATH:$JAVA_HOME/bin

2.解压es
tar -xf elasticsearch-7.xx.x-x86_64.tar.gz -C /opt/software/

3.软连接
cd /otp/software && ln -sv elasticsearch-7.xx.x es

4.环境变量
cat << EOF >> /etc/profile.d/elk.sh
export ES_HOME=/opt/software/es
export PATH=$PATH:$ES_HOME/bin
EOF
source /etc/profile.d/elk.sh

5.创建用户,用于启动es
# su -c 方式启动es时shell不能为nologin
useradd es -s /sbin/nologin

6.修改配置文件,软件的安装目录就是/opt/software/es
vim /opt/software/es/config/elasticsearch.yml
...
cluster.name: myelk         # 配置集群名字
node.name: es1              # 当前主机名称
# 如果不指定,默认位置在es的安装目录,即/opt/software/es
path.data: /var/lib/elasticsearch   # 数据存储路径
path.logs: /var/lib/elasticsearch   # 日志存储路径
network.host: 192.168.1.10          # 监听地址
discovery.seed_hosts: ["192.168.1.10"] # 服务发现主机列表,单点部署时该字段与network.host一致
cluster.initial_master_nodes: ["192.168.1.10"]

7.修改文件权限
chown es:es -R /opt/software/elasticsearch-7.xx.x/

8.修改文件数量的限制,类似环境变量配置文件,目录中有总文件
cat <<EOF>> /etc/security/limits.d/elk.conf  
*    soft    nofile    65535
*    hard    nofile    131070
EOF

9.修改内核参数的内核映射信息
cat <<EOF>> /etc/sysctl.d/elk.conf
vm.max_map_count = 262144
EOF
sysctl -f /etc/sysctl.d/elk.conf
sysctl -q vm.max_map_count

10.启动服务(-d,后台启动)
# su -c 方式启动es时shell不能为nologin
su -c "elsasticsearch" es
su -c "elsasticsearch" -d es

11.验证
curl 192.168.1.10 9200

修改ES堆内存大小
jps介绍
作用:查看java相关的进程信息
常用参数:
-l:显示包名称
-v:显示进程的相关信息
-V:默认选项,简要信息
-q:只查看pid

jmap介绍
作用:查看java堆栈信息
常用参数:
-heap:查看堆内存的大小
-dump:下载堆内存的相关信息

1.修改堆内存大小
vim /opt/software/es/config/jvm.options
...
# 不建议超过32G
-Xms 256m
-Xmx 256m

2.重启服务
kill `jps | grep Elasticsearch | awk '{print $1}'`
su -c "elasticsearch" -d es

3.验证堆内存大小
jmap -heap `jps | grep Elasticsearch | awk '{print $1}'`

ES启动脚本
cat <<EOF>> /usr/lib/systemd/system/es.service
[Unit]
Description=elasticsearh
After=network.target

[Service]
Type=forking
ExecStart=/opt/software/es/bin/elasticsearch -d
Restart=no
User=es
Group=es
# 上面配置的/etc/security/limits.d/elk.conf可能在es启动时不生效
# 在此重新指定
LimitNOFILE=131070

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start es

es集群部署

1.创建数据目录和日志目录
mkdir -pv /es/{data, logs}
install -d /es/{data, logs}/es7 -o es -g es

2.修改配置文件
vim /opt/software/es/config/elasticsearch.yml
cluster.name: myelk        # 配置集群名字
node.name: se1             # 当前主机名称
network.host: 0.0.0.0      # 0.0.0.0 监听所有地址
discovery.zen.ping.unicast.hosts: ["esIP1","esIP2","esIP3"]
cluster.initial_master_nodes: ["esIP1","esIP2","esIP3"]

3.同步配置文件至其他节点
/es    数据和日志目录
/etc/security/limit.d/elk.conf   软硬连接限制
install -d /es/{data, logs}/es7 -o es -g es  同步权限
/etc/sysctl.d/elk.conf           内核参数配置
/usr/lib/systemd/system/es.service    启动脚本
/etc/profile.d/elk.sh      环境变量

4.其他节点创建es用户
useradd es
sysctl -f /etc/sysctl.d/elk.conf
sysctl -q vm.max_map_count
systemctl daemon-reload

5.启动集群
systemctl start es

curl -X GET http://172.21.16.17:9200/_cat               查看索引分片信息
curl -X GET http://172.21.16.17:9200/_cat/health?v      查看集群健康状态
curl -X GET http://172.21.16.17:9200/_cat/nodes?help    查看node的帮助
curl -X GET http://172.21.16.17:9200/_cat/indices?v     查看当前索引

ES端口

http协议      外部与集群通信使用9200端口
TCO协议       集群内部通信使用9300端口
重要配置文件
/usr/share/elasticsearch/config
elasticsearch.yml
jvm.options

一个分片只能属于一个节点

路由计算,文档ID经过hash计算后与主分片数取余得到分片编号

Elack Stack包含EFK,ELK

Beats组件

Packetbeat(搜集网络流量数据)
Metricbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集 Windows 事件日志数据)
Auditbeat( 轻量型审计日志采集器)
Heartbeat(轻量级服务器健康采集器)

es集群颜色

red:集群部分主分片无法访问
yellow:集群部分副本分片无法访问
green:集群主分片和副本分片都可以访问

主分片和副本分片的区别

主分片可读写,用于提高es集群的水平扩展和并行处理能力
副本分片只读,用于es集群的故障转移和负载均衡

es分片规则

主分片
主分片数量确定后不可修改。
主分片数量应该足够大,以适应数据的增长和并行处理需求。
主分片的数量可以小于、等于或大于节点的数量

副本分片
副本分片数量应该根据可用的硬件资源和对可用性的需求进行评估
每个分片(无论是主分片还是副本分片)都需要在集群的不同节点上存储。如果副本分片的总数超过了可用节点的数量,那么就无法为每个分片分配一个独立的节点来存储它们的副本

ES相关概念

文档(Document): 
文档是Elasticsearch中最小的基本数据单元。它是一条JSON格式的记录,可以是结构化的或非结构化的数据。文档通常表示实际的数据对象,例如一篇文章、一条日志记录、一个产品信息等。每个文档都有一个唯一的ID标识它,还可以包含一个或多个字段(Field)来存储数据。

分片(Shard): 
分片是将索引的数据拆分为多个部分的过程。在Elasticsearch中,索引(Index)是一组相关文档的集合,而分片是索引在物理上的分割。
每个分片都是一个独立的、自包含的索引,具有自己的倒排索引结构和磁盘存储。
分片的存在使得Elasticsearch可以水平扩展和并行处理数据。
分片在集群中的不同节点之间进行复制,以提供高可用性和故障恢复能力。
每个分片都有一个主分片(Primary Shard)和零个或多个副本分片(Replica Shard)。
主分片负责处理读写请求,而副本分片用于故障转移和负载均衡。
利用分片,Elasticsearch可以实现数据的分布式存储和查询,提高数据的可扩展性和性能。

主分片(Primary Shard):
* 每个索引都被划分为一个或多个主分片。
* 主分片负责存储索引的一部分数据。
* 每个主分片都是独立的、自包含的索引。
* 主分片处理索引的读写操作,并与客户端应用程序直接交互。
* 当索引被创建时,必须指定主分片的数量,该数量在索引的整个生命周期中是固定的。

副本分片(Replica Shard):
* 每个主分片可以有零个或多个副本分片。
* 副本分片是主分片的精确复制。
* 副本分片用于提供高可用性、故障恢复和负载均衡。
* 副本分片存储了与其对应的主分片相同的数据副本。
* 副本分片不直接参与读写操作,但当主分片不可用时,副本分片会自动接管服务。

ES的算法:倒排索引

https://www.zhihu.com/question/23202010

非数据库情形

准备工作
1.首先把所有的原始数据进行编号,形成文档列表
2.把文档数据进行分词,以得到的词条为索引,保存包含这些词条的文档的编号

搜索的过程:
当用户输入搜索数据时,将搜索的数据进行分词,将分词后得到的词条与倒排索引列表中的词条进行匹配,进而找到词条对应的文档编号,再根据文档编号去文档列表中找到文档

数据库情形

将搜索内容进行分词,分词与数据库中包含分词的数据的主键建立映射,形成倒排索引列表

用户搜索时,将搜索内容分词,根据分词去倒排索引列表中得到主键,根据主键返回数据

TF/IDF


ES常用插件

head插件
(1)查看ES集群的拓扑结构,可以进行索引(Index)和节点(Node)级别的操作
(2)它提供一组针对集群的查询API,并将结果以json和表格形式返回
(3)它提供一些快捷菜单,用以展现集群的各种状态

kopf插件
ES管理工具,可以查看索引

bigdesk插件
集群监控工具,CPU、内存、索引数据、搜索情况、http连接数等

常用方法 GET,POST,HEAD
其他方法 OPTIONS,PUT,DELETE,TRACE和CONNECT

ES常用:
PUT    --增
DELETE --删
POST   --改
GET    --查

curl
-X 设置请求方法
-i 显示返回头信息
posted @ 2024-05-24 11:37  立勋  阅读(5)  评论(0编辑  收藏  举报