es概念
2019-07-15 本文已影响0人
swoft_
文档地址:https://es.xiaoleilu.com/
倒排索引
对比:
-
正排索引 文档id到文档内容和文档单词的关联
-
倒排索引 单词到文档id的关联
-
正排索引 - 目录页
-
倒排索引 - 索引页(书的最后会有单词对应的出现位置)
举例:
id | 文档内容
-|-|-
1 | elaset search
2 | hello search
3 | word search
转成倒排索引
word | count | id:position |
---|---|---|
elastic | 1 | 1:0 |
hello | 1 | 2:0 |
word | 1 | 3:0 |
search | 3 | 1:1,2:1,3:1 |
概念
- 文档 数据库中的具体一条记录
- type 7.0之前一个索引会有多个type,一个type会有多个相同结构的文档。7.0之后一个索引只有一个文档_doc
- 索引 一类文档的集合
- 分片 创建索引的时候可以指定分片数量。
- 节点 一个节点是一个es实例,是一个java进程
分布式系统的可用性和高扩展性
- 可用性:允许部分服务宕机
- 数据可用性:部分节点数据丢失,不会丢失数据
- 可扩展性:数据增多,数据可以分布到不同机器
节点
一个es的实例,就是java的一个进程。每一个节点都有一个名字,启动的时候制定,每个节点在启动之后会生成一个uid保存在data目录下。不同的节点可以承担不同的角色
- 每个节点启动后默认是master-eligible,可以在启动的时候指定 (node.master = true)。
- master-eligible可以参加选主流程,成为主节点
- 第一个节点启动的时候,默认为主节点
- 每个节点都保存了集群的状态,只有master可以修改集群的状态
- 集群状态
- 所有节点的信息
- 所有的索引和相关的setting和mapping
- 分片的路由信息
- 任意阶段如果都能修改会导致集群的不一致性
- 集群状态
data节点
可以存储数据的节点,负责保存分片上的数据(node.data=true)
coordinate节点
负责接受client请求,将请求发送到合适的节点,然后把结果汇集起来。
每个节点都默认起到coordinate node的职责
冷热节点...
配置节点类型
- 开发环境一个节点可以承担多个角色
- 生成环境应该设置成单一的角色
分片
- 主分片 用来解决数据水平扩展问题,通过主分片,可以将数据复制到集群内的所有节点上
- 一个分片就是一个Lucene实例
- 主分片在创建索引的时候指定,后续不允许修改。
- 副本分片 用来解决高可用的问题,是主分片的copy
- 数量可以动态调整
- 分片设定
- 过小导致后续无法增加分片实现水平扩展(添加分片无效)
- 单个分片数据量过大,导致数据重新分配耗时
目录
- bin 启动脚本 安装插件 运行统计数据
- config
- Data 数据文件
- lib java 类库
- logs
- Modules 包含所有es模块
- Plugins 包含已经安装的插件
- 查看哪些插件 ./elasticsearch-plugin list
使用插件可以搞一些安全策略来保护数据
多实例部署命令
搭建elk环境进行测试
elasticsearch启动
./bin/elasticsearch -E node.name=node1 -E cluster.name=cluster_group -E path.data=node1_data -d
./bin/elasticsearch -E node.name=node2 -E cluster.name=cluster_group -E path.data=node2_data -d
./bin/elasticsearch -E node.name=node3 -E cluster.name=cluster_group -E path.data=node3_data -d
- cluster_group 为集群名称,集群是通过名称来区分的。默认名称为elasticsearch,一个集群可以有多个节点
- path.data 为数据存储位置
kibana启动(版本要一致)
kibana 端口 5601
依赖es,所以先启动es
7.0 支持汉化:kibana.yml 中加入 i18n.locale: "zh-CN"
启动:./bin/kibana
GET _cluster/health
GET _cat/nodes
GET _cat/shards
GET blogs/_mapping
GET blogs/_settings