elasticsearch基本使用

介绍

官网: https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-elastic-stack.html

elasticsearch: 借住于LuceneAPI 重新封装实现的搜索组件,增加更强大的能力,将Lucene提供的索引组建成shar形式,分片后分布于各节点上从而构建成分布式时时查询组件。 是一个基Lucene实现的开源、分布式、RestFul的全文本搜索引擎,此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索,也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理PB级的数据

概念
文档只有被索引后才能被索引,这个文档就放在一个叫索引的文件当中。
在Lucene中每一项相当于MYsql表中一行数据,多个项在一起就组成了索引,但是每个索引会尽量存储同类型数据

大索引的多个片分shard散到多个物理节点上去,可成完成读写负载均衡,分片节点挂了所有数据将丢失,但是分布式不应该这样,它还要通过主从副本实现分布解决单点故障问题。
写操作会自动分配到主分片完成写操作,副本分片只有读权限

索引: 文档的集合,类似于表,索引名只能是小写字母
类型(type): 类型是索引内部的逻辑分区,其意义完全取决于用户需求,一个索引内部可以定义一个或多个类型
拥有相同域的文档的预定义,类似于表的表结构,文档是schema free模式自由,

建议一个索引中只存一个类型的文档数据
文档: 是Lucene搜索和索引的原子单位,包含了一个或多个域,是域容器,基于json格式,每个域的组成部份:一个名字和一个或多个值,拥有多个值的域通常称为多值域


映射 (maping):  定义如何切词,指明一个文档中的数据在被存储之前的分析过程该如何执行,原始内容存储为文档之前事先需要分析,映射就 是定义此分析机制该如何实现
                 例如; 切词、过滤掉某些词、域中内容排序

elasticsearch集群组件:
     每一个物理节点必属于且只属于某ES集群   

    NODE: 运行了单个ES实例的主机即为节点,用于存储数据部份分片、参与集群索引及搜索操作、节点标识靠节点名(默认会生成字串,可自定义)

    shard分片: 把一个Luence大索引切分为底层物理数据,完成分割存储机制,或说将索引切割成为物理存储组件,但每一个shard都是一个独立且完整的索引,创建索引时,ES默认创建5个副本
               shard有2种类型: primary shard/Replicas shard
               Primary shard 如何切割定义好后不可更改,但是副本数是可以动态更改的

ES工作过程: 通过多播(default)或单播方式工作在9300/TCP查找同一集群的其它节点,并与之建立通信

集群中的所有节点会选举一个主节点负责管理整个集群状态,以及在集群范围内决定各shard分布方式,用户角度没有主从节点,各节点都可接收请求

安装

elasticsearch强制要求工作在普通用户模式下,不能root 直接./bin/elasticsearch启动服务,好像rpm安装没有此限制
同时启动也有很多限制,否则启动失败

修改系统参数达到启动服务要求

1
2
3
4
5
6
1 普通用户模式下安装
2 安装jdk,要求1.8以上,有人声称1.11以上更佳
3 打开文件数限制,包括系统级/etc/security/limits.conf 和ulimit -n 65535用户级
4 打开内核参数级限制,临时设置如下命令
sysctl -w vm.max_map_count=655350
sysctl -w fs.file-max=65536

配置文件修改

1
2
3
4
5
6
7
8
9
cat /home/stack/elasticsearch-7.11.2/config/elasticsearch.yml  | grep -v ^# | grep -v ^$
cluster.name: wxq-es
node.name: node-es3
bootstrap.memory_lock: false
network.host: 192.168.1.30
discovery.seed_hosts: ["192.168.1.30",] # 集群模式相应追加主机
cluster.initial_master_nodes: ["192.168.1.30",]
http.cors.enabled: true # 方便plugins head插件时跨站请求成功
http.cors.allow-origin: "*"

head 插件安装
安装好后直接访问 http://IP:9100/ 连接地址填入http://es-server:9200/正确

1
2
3
4
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start

1
./bin/elasticsearch # 直接启动即可

集群状态

1
2
3
4
5
6
green 可用状态
red: 不可用
yellow: 修复状态

ES参与集群事务的端口tcp/9300
ES接收请求的端口tcp/9200

API接口使用

1
2
3
4
5
6
确保集群正常; API接口9200
Restful接口API: 4类
1 检查集群节点索引健康与否,以及获取其相应状态
2 管理集群节点索引及元数据
3 执行CRUD操作
4 执行高级操作:例如paging 、filtering

1
2
3
4
5
6
7
8
9
10
11
12
13
所有_cat支持的API操作
[root@k8smaster ~]# curl http://192.168.1.40:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
。。。

v=verbose显示详细信息

1
2
3
4
5
6
7
8
9
10
11
http://192.168.1.30:9200/_cat/nodes
http://192.168.1.30:9200/_cat/nodes?v
http://192.168.1.30:9200/_cat/master
http://192.168.1.30:9200/_cat/master?v

例如:
[root@k8smaster ~]# curl http://192.168.1.40:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.21.0.5 36 98 14 0.22 0.60 1.09 cdfhilmrstw - es02
172.21.0.3 28 98 14 0.22 0.60 1.09 cdfhilmrstw * es01
172.21.0.4 61 98 14 0.22 0.60 1.09 cdfhilmrstw - es03

help查看某接口支持查询的详细字段

1
2
3
4
5
6
7
8
[root@k8smaster ~]# curl  http://192.168.1.40:9200/_cat/nodes?help
id | id,nodeId | unique node id
pid | p | process id
ip | i | ip address
port | po | bound transport port
http_address | http | bound http address
version | v | es version
。。。

查询某接口指定字段

1
2
3
4
# curl  http://192.168.1.40:9200/_cat/nodes?h=id,pid,ip,port,http_address,version,uptime
t_iA 6 172.21.0.5 9300 172.21.0.5:9200 7.12.0 56.8m
WIm1 6 172.21.0.3 9300 172.21.0.3:9200 7.12.0 56.8m
3bzJ 6 172.21.0.4 9300 172.21.0.4:9200 7.12.0 56.8m

health的green状态

1
2
3
# curl  http://192.168.1.40: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
1618470428 07:07:08 es-docker-cluster green 3 3 14 7 0 0 0 0 - 100.0%

总结

  • 带着概念参照官网安装还是挺简单的,练习接口可以了解学习集群及ES的概念