目录
Elasticsearch 介绍
概述
Elasticsearch(ES) 在搜索和数据分析场景中的卓越表现越来越引人注目,它在很多互联网应用中起着非常关键的作用。
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。
Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎,它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段可以被索引与搜索;
- 一个分布式实时分析搜索引擎;
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。
场景
Elasticsearch 的使用场景非常丰富,甚至可以考虑使用 Elasticsearch 作为唯一的数据存储,以下罗列适合使用 Elasticsearch 的场景:
- 支持全文索引场景;
- 大数据存储和分析场景;
- 作为非关系型数据存储,例如日志的记录和分析,常和 Kibana 可视化配合使用;
- 数据不需要频繁更新、不需要强事务要求、数据之间关系较为简单。
Elasticsearch 基础
基本概念
Elasticsearch 主要包含如下几个基本概念:
- cluster(集群):一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能;
- node(节点):一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能;
- shard(分片):数据的最小单元块,创建一个索引的时候,可以指定分片的数量。每个分片是一个功能完善并且独立的“索引”,可以被放置到集群中的任何节点上;
- replica(副本):分片的一份或多份拷贝叫做复制分片,或者直接叫复制。
数据结构
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。数据结构包含:index(索引)、type(类型)、document(文档)、fields(字段)。
- index(索引):索引即数据,索引是文档的载体,相当于 MySQL 的 database;
- type(类型):在 Elasticsearch 7 版本中已经被废弃;
- document(文档):数据内容,相当 MySQL 的行,存储 JSON 非关系型数据;
- fields(字段):字段,相当 MySQL 的列,如果存储 JSON 结构,为 JSON 的属性。
为了方便理解,将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比。
Elasticsearch 安装
系统和软件
安装实验在 CentOS 系统进行,请提前准备,软件安装包 elasticsearch-7.8.0-linux-x86_64.tar.gz 这里获取。
- 操作系统:CentOS Linux release 7.9.2009 (Core)
- Elasticsearch:elasticsearch-7.8.0
安装说明
- 创建用户设置密码
elasticsearch-7.8.0 出于安全考虑,需要非 root 权限运行,使用 root 权限添加用户 es
useradd es && passwd es
此处输入两次密码即可
- 修改文件描述符数量和进程数量配置 /etc/security/limits.conf
## 将以下内容追加到文件最后
es soft nofile 65536
es hard nofile 65535
es soft nproc 4096
es hard nproc 4096
- 修改一个进程的虚拟内存数量 /etc/sysctl.conf
## 将以下内容追加到文件最后
vm.max_map_count=655360
##然后执行
sysctl -p
- 切换 es 账户
su es && cd ~
- 解压安装包
tar zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz && mv elasticsearch-7.8.0 es
- 添加配置 es/config/elasticsearch.yml
## 将以下内容追加到文件最后
cluster.name: elasticsearch
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
- 启动程序
bin/elasticsearch
[2022-10-25T23:56:02,784][INFO ][o.e.d.DiscoveryModule ] [node-1] using discovery type [zen] and seed hosts providers [settings]
[2022-10-25T23:56:04,315][INFO ][o.e.n.Node ] [node-1] initialized
[2022-10-25T23:56:04,316][INFO ][o.e.n.Node ] [node-1] starting ...
[2022-10-25T23:56:09,819][INFO ][o.e.t.TransportService ] [node-1] publish_address {192.168.0.2:9300}, bound_addresses {[::]:9300}
[2022-10-25T23:56:10,018][INFO ][o.e.b.BootstrapChecks ] [node-1] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2022-10-25T23:56:10,038][INFO ][o.e.c.c.Coordinator ] [node-1] setting initial configuration to VotingConfiguration{qATFpUAGRs-Y7L3j6sGuIw}
[2022-10-25T23:56:10,272][INFO ][o.e.c.s.MasterService ] [node-1] elected-as-master ([1] nodes joined)[{node-1}{qATFpUAGRs-Y7L3j6sGuIw}{-cJnjB3tTKKkdzqUT9QPZQ}{192.168.0.2}{192.168.0.2:9300}{dilmrt}{ml.machine_memory=1019572224, xpack.installed=true, transform.node=true, ml.max_open_jobs=20} elect leader, _BECOME_MASTER_TASK_, _FINISH_ELECTION_], term: 1, version: 1, delta: master node changed {previous [], current [{node-1}{qATFpUAGRs-Y7L3j6sGuIw}{-cJnjB3tTKKkdzqUT9QPZQ}{192.168.0.2}{192.168.0.2:9300}{dilmrt}{ml.machine_memory=1019572224, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]}
[2022-10-25T23:56:10,372][INFO ][o.e.c.c.CoordinationState] [node-1] cluster UUID set to [C45uu309Tf68UNw8ZAq4Gg]
[2022-10-25T23:56:10,458][INFO ][o.e.c.s.ClusterApplierService] [node-1] master node changed {previous [], current [{node-1}{qATFpUAGRs-Y7L3j6sGuIw}{-cJnjB3tTKKkdzqUT9QPZQ}{192.168.0.2}{192.168.0.2:9300}{dilmrt}{ml.machine_memory=1019572224, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]}, term: 1, version: 1, reason: Publication{term=1, version=1}
[2022-10-25T23:56:10,679][INFO ][o.e.h.AbstractHttpServerTransport] [node-1] publish_address {192.168.0.2:9200}, bound_addresses {[::]:9200}
[2022-10-25T23:56:10,680][INFO ][o.e.n.Node ] [node-1] started
Elasticsearch 使用
Rest Api
Elasticsearch提供了一个非常全面和强大的 REST API,开发者利用 REST API,可以实现与集群之间的交互,主要提供了如下几个功能:
- 检查集群、节点和索引的健康信息、状态以及各种统计信息;
- 管理集群、节点、索引数据以及元数据;
- 对索引进行 CRUD(创建、读取、更新和删除)和搜索操作;
- 执行高级的搜索操作, 例如分页、排序、过滤、脚本编写(scripting)、聚合(aggregations)以及其它操作。
集群操作
- 查看集群健康信息
curl -X GET "http://localhost:9200/_cat/health?v"
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1665584601 14:23:21 elasticsearch green 1 1 6 6 0 0 0 9 21.9h 100.0%
- 查看节点详细信息
curl -X GET "localhost:9200/_cat/nodes?v"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 19 39 0 dilmrt * LAPTOP-M4N1OUMV
索引操作
- 查看所有索引信息
curl -X GET "localhost:9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana-event-log-7.8.0-000001 BVN8w1jRSUC_NbZHnHAqeg 1 0 1 0 5.3kb 5.3kb
green open .apm-custom-link AaHmK0QgRRijvG3WpMtfiA 1 0 0 0 208b 208b
green open .kibana_task_manager_1 JZIHyd8WTIWceeTrdk40OA 1 0 5 1 30.3kb 30.3kb
green open .apm-