学习目标:
- 什么是ES,Es解决了什么问题
- 分布式存储与搜素功能对比 Lucene,solr,es
- es的基本术语
- ES集群架构原理
- Es如何解决脑裂问题
- es如何处理读写
学习内容:
- 什么是ES,Es解决了什么问题
ES是一种分布式搜索引擎,
解决了空格支持,拆词查询,搜索内容不能高亮,海量数据查库的问题
- 分布式存储与搜素功能对比 Lucene,solr,es
luncene是一个类库,里面的很多功能需要自己去实现
solr基于lucene做了很多的封装.现在国外很多大厂在用
Es也是基于lucene. 支持数据导到pb级别,目前市场占有率es大于solr.
- es的基本术语
es | mysql | |
index | 表 | |
文档cocument | 行 | |
字段fields | 列 |
es中的存储情况
stu_index
{
age:123,
name:'aber'
},
{
age:124,
name:'aber'
},
{
age:126,
name:'aber'
}
- 核心概念
映射mapping 表结构定义
近实时NRT 近实时
结点node 每一台服务器
shard replica 数据分片和备份
- ES集群架构原理
类似于kafuka的模式,首先将所有数据分散到每一个服务器上,然后会在其他设备上做一个replica. 需要注意的是只有shard提供查询,replica只有在shard挂起的时候才会启用.
倒排索引
es的安装
es的监控工具es head
首先查下github
可以得只三种方式, google浏览器插件 es head(推荐). 编译git hub代码. docker
https://github.com/zt1115798334/elasticsearch-head-master
There are multiple ways of running elasticsearch-head.
Running with built in server
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open http://localhost:9100/
This will start a local webserver running on port 9100 serving elasticsearch-head
中间可能会有nodejs的环境要求,需要安装好. 要node -v 和npm --v生效
访问的时候需要解决跨域问题修改elasticsearch,yml
新增配置打卡跨域功能
http.cors.enabled:true
http.cors.allow-origin:*
然后kill 进程,重启elasticsearch
访问http://ip:9200
- 集群宕机高可用
可以通过页面设置索引名称(表名).以及分片和副本数量.然后系统会随机布局.主分片在页面会有标志.
宕机时的分片重新生效
注意这里和卡夫卡有区别,kafka的恢复结点只能作为从节点, 而es恢复以后是可以作为主节点的
kafka同一个topic的数据可以按照partion(quene)的方式分在不同的broker(服务器里面).然后同步到其他分片,恢复时候使用的是通过设置的同步最大延迟判断设备是In sync replicas(ISR)和out sync replicas(OSR).然后从ISR里面选一个作为master.
而es是同一个index(表)只能在一个服务器里面.
集群脑裂
当宕机的服务器恢复的时候,没有和其他服务器一起组建集群.(比如通信故障).这个时候恢复的集群就会把自己投票成为master.因为这个master的往往没有所有的数据,就会造成内容不全
如何解决脑裂:
修改投票人数 :这个n代表着最开始设置结点的时候设置的值.在7.x的过程这个参数被取消,恢复时候预防脑裂的功能交给了es自己实现.
- 文档读写原理
当发生写文档的时候,首先找到协调结点(客户端访问哪台哪台就是,如果是域名那就是是负载句均衡发给谁谁就是.所以协调结点是个逻辑概念,不是物理概念)
这里和kafka完全不一致,kafka读写都只能在master
学习时间:
2021.0428
学习产出:
- es解决的什么问题,什么场景下使用
es解决的是传统数据库无法解决的搜索引擎的问题,也就是大数据量下的快速模糊搜索.
- es的存储方式和基本概念
es最核心的两个元素就是服务器(master/slave)和index(对应数据库的表). 在存储的时候会通过json存储原始内容, 通过分词生成倒排序序列. 在创建index的时候可以指定主节点分配地址和用几个replica.每个节点都是全量存储.
- es是如何进行读写的
写的时候首先访问到协调服务器(访问谁谁就是协调服务器).然后首先找到你index的master服务器(如果在本机就省了).先将内容写入master,然后将内容同步到slave.slave再反馈给协调服务器.协调服务器会在所有节点同步完再返回给客户端.
读的时候首先访问协调服务器,协调服务轮询分配一个master或者slave返回数据
- es的读写和kafka,rocket有什么区别
相同点二者都是有mater节点, 写的时候都是从master开始,二者脑裂都由内部解决
区别在于
- es的写完后会开始阻塞执行同步slave,等所有切片执行写操作成功后才会内容.而kafka不是,kafka的master操作完成异步同步slave,并且根据slave同步的速度区分出In sync replicas(ISR)和out sync replicas(OSR).所以主从同步速度对es影响远大于kafka
- es数据按照index存储,master和salve数据都是全量的. .而kafka同一个topic分为多个quene.每个quene存储一部分topic数据.
- es读的时候协调结点把请求轮询发送给master和slave,都可以输出内容,而kafka只能master结点输出
- es服务器恢复后可能作重新为master.kafka只能作为slave
下一篇: https://blog.csdn.net/habazhu1110/article/details/116237163