阿龙的学习笔记---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编辑工具,公众号编辑器哪个
- 下一篇: ASP.NET Ajax调用WCF服务示