阿龙的学习笔记---ElasticSeach的学习与记录
一些博客资料
-
APIDoc:https://elasticsearch-py.readthedocs.io/en/7.10.0/api.html#cluster
-
官方集群相关startup文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html -
知乎Es入门:
https://zhuanlan.zhihu.com/p/104215274
https://zhuanlan.zhihu.com/p/54384152 -
深入分片:
https://www.jianshu.com/p/cc06f9adbe82 -
创建分片:
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/indices-split-index.html -
创建出错解决:{“acknowledged”=>true, “shards_acknowledged”=>false} 出错:
blog.csdn.net/Richar1/article/details/78582653 -
集群部署
https://www.cnblogs.com/ljhdo/p/4959412.html
https://cloud.tencent.com/developer/article/1189282
https://elk.abcops.cn/elasticsearch_cluster_cert/ -
移动分片:
https://blog.csdn.net/qq_36666651/article/details/83865606
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html
个人记录
-
简述
- Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 使用Lucene库作为其核心来实现。封装了简易的REST API。
- 全文搜索呢,大概是说非结构化数据,比如全文信息,相对于结构化的关系型数据库以及NoSQL来说检索较慢。那么将其中的一部分信息通过分词提取出来,重新组织,使其变得有一定结构的索引,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这种方式就构成了全文检索的基本思路。类似的开源搜索引擎还有Solr。
-
节点(Node)
- 一个节点是一个 Java 进程实例,一台机器可以运行多个实例,一般情况下一台机器只允许一个节点
- 一个集群有一个或者多个节点
- 通过启动参数 node.name 定义节点名称
- 每个节点都保存了集群的状态信息,只有 Master 节点可以修改集群的状态信息
- 集群状态信息包括:所有节点信息、索引、Mapping、Settings、分片路由等信息
- Master-eligible 节点:
- 每个节点启动,默认自己是一个 Master-eligible 节点
- 可以通过启动参数 node.master: false 禁止当前启动节点是 Master-eligible 节点
- 所有 Master-eligible 都可以参与选主流程,成为 Master 节点
- Data 节点:
- 保存分片数据的节点
- 在数据扩展上起了很大的作用
- 通过启动参数 node.data 设置
- Coordinating 节点
- 接收客户端请求,将请求分发到合适的节点,最终再对结果进行汇集
- 每个节点默认都是 Coordinating 节点
-
索引
- 一个集群下面可以新建多个索引,索引体现了逻辑空间概念
- 索引是一类相似文档的集合,是文档的容器,类比关系型数据库中的一张表的 Schema 的概念
- 每个索引有自己的 Mapping 用于定义文档的字段名和字段类型
- 每个索引有自己的 Settings 用于定义不同的数据分布,也就是索引使用分片的情况
-
分片(Shard)
- 分片是物理空间概念,索引中的数据都分布在分片上,把分片想象成数据的容器。文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,Elasticsearch 将会自动在节点间迁移分片,以使集群保持平衡。
- 分片分为主分片和副分片(也叫复制分片),一般主分片和副分片应该分布在不同的节点上保证可用性。
- 主分片用于解决数据水平扩展的问题,主分片的数目在索引创建后指定,后续不容许修改(number_of_shards)
- 副分片用来解决数据高可用问题,是主分片的拷贝,数量可以动态调整(number_of_replicas)
- 分片数的设定
- 分片数设置太小,影响后续水平扩展,单个分片数据量太大将导致数据重新分配耗时
- 分片数设置过大,影响搜索结果的相关性打分,影响搜索结果数据准确性
- 分片数设置过大,导致单个节点上会有过多的分片,资源浪费,浪费性能
-
文档(Document)
- 文档是所有可搜索数据的最小单位,类似关系数据库中某张表中的一行记录
- 文档会被序列化成 JSON 格式,JSON 对象由字段组成
- 每个字段都有对应的字段类型,类型可以自己指定,也可以使用 ElasticSearch 自动推算
- JSON 文档支持数组和嵌套
- 每个文档都有一个唯一性 ID,可以自己指定,也可以系统自动生成
使用时遇到的一些问题及解决
-
es开启问题:采用mmapfs会检查虚拟内存容量,但系统无法更改那个内核变量,所以换一个文件系统:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html
-
如果两个机器,两个分片,那么会自动分配到两个机器上去,每个机器只占一个分片的硬盘容量。
-
分片可以分布在不同机器上,但是大小不定,分片之后还有可能更大???还有可能两个分片加起来大于之前的一个???。原因跟segment有关。
-
强制merge segments之后,4个分片的大小就变成了基本一致的。
做法: 先分片,在强制merge -
有可能分片了,再强制合并之后,占用更大了,是delete_doc还在硬盘中,需要强制merge添加一个参数only_expunge_deletes=true,会对有删除过的segments进行合并,处理时间很长。
-
在某一台机器上面进行分片,然后再将单个分片复制到集群机器中可以。启动es的时候,可能是有自动分配。
-
2020.12.11:移动过去之后,开启并未载入那个索引,奇怪…是不是要加translog?
-
/data/es/data/nodes/0/_state 下保存了索引加载信息啥的,直接把索引的文件复制过来好像不太行,把_state复制过来,才会加载那个索引,但是这个机器之前的索引就没加载了。
-
将所有_state都删除,则重启可以有两个node,但是没有索引加载进去。加了索引里面的两个_state,还是没有。
-
成功的一个方法:将分片完成的索引带着translog和两个_state文件夹,拷贝到各个集群集群中。将原来机器nodes中的_state文件拷贝到某一个机子上作为master启动,然后其他机器从没有_state的状态启动。
-
上面这个方法测试结果ok。
-
在成功之后再设置复制分片就行。
一些用到的API操作命令:
-
cat
curl -X GET “9.54.141.98:10207/_cat” -
获取setting信息:
GET 索引名/_settings -
分片操作:
curl -X POST “9.54.141.98:10207/douyin-index-test/_split/douyin-index-test-4?pretty” -H ‘Content-Type: application/json’ -d ‘{ “settings”: { “index.number_of_shards”: 4 , “number_of_replicas” : 0 } }’ -
设置复制分片数:
curl -X PUT “9.54.141.98:10207/douyin-index-test-split2/_settings?pretty” -H ‘Content-Type: application/json’ -d’ { “index” : { “number_of_replicas” : 0 } } ’ -
取消索引只读:tmd要用null,而不能用false!!!
curl -X PUT -H ‘Content-Type: application/json’ “9.54.141.98:10207/douyin-index-test-split2/_settings?pretty” -d ‘{“index.blocks.read_only”: null}’ -
删除索引:
curl -X DELETE “9.54.141.98:10207/douyin-index-test-split2/” -
对segment强制merge合并:
curl -X POST “9.54.141.98:10207/douyin-index-test-4/_forcemerge” -
如果要把删除的remove掉,需要加上参数:
curl -X POST “127.0.0.1:9200/douyin-index-20201118-2/_forcemerge?only_expunge_deletes=true” -
搜索:用赵博的python的测试demo
总结
以上是生活随笔为你收集整理的阿龙的学习笔记---ElasticSeach的学习与记录的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 公众号html编辑工具,公众号编辑器哪个
- 下一篇: SCAU华南农业大学-数电实验-用74L