1、Elasticsearch简介与安装使用
一、Elastic Stack 是什么
Elastic Stack 是 ELK Stack 的更新換代產品,通過訪問官網,可以看到 Elastic 產品的生態分布情況,如圖所示:
“ELK”是三個開源項目的首字母縮寫,這三個項目分別是:Elasticsearch、Logstash和 Kibana。Elasticsearch 是一個搜索和分析引擎,通常簡寫成 ES;Logstash 是服務器端數據處理管道,能夠同時從多個來源采集數據,轉換數據,然后將數據發送到諸如 ES 等“存儲庫”中;Kibana 則可以讓用戶在 ES 中使用圖形和圖表對數據進行可視化。
接下來,將陸續更新ES、Logstash、Kibana等相關的內容,先從 Elasticsearch 開始吧。ES 的版本更新是相對較快的(最新為8.2),目前我從 Elastic中文社區下載 的 ES 版本為6.8,將用這個版本作為學習和使用的參考。
二、Elasticsearch 簡介
Elasticsearch 是一個分布式的基于 REST 風格的強大搜索引擎,底層是使用 Java 語言編寫并使用 Lucene 來建立索引并實現搜索功能,然而 ES 目的是通過簡單連貫的 RESTful API 讓全文搜索變得更加簡單并隱藏了 Lucene 的復雜性。
Lucene 又是啥呢?可以訪問它的官網一探究竟,官網上的大致介紹可知,Lucene 是 Apache下的一個子項目,是一個開放源代碼的全文檢索引擎工具包。注意,Lucene 不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,可以提供完整的查詢引擎和索引引擎,以及部分文本分析引擎等功能。
然而,Elasticsearch 不僅僅是 Lucene 和全文搜索引擎,ES 還提供了:分布式的實時文件存儲,每個字段都被索引并可被搜索;實時分析的分布式搜索引擎;可以擴展到上百臺服務器,處理 PB 級結構化或非結構化數據等功能。
總結下?Elasticsearch 的顯著特點:
- 支持多個索引、支持索引級別的配置(如分片數/索引存儲等);
- 支持分布式和高可用,在每個索引都使用可配置數量的分片進行完全分片,每個分片都可以有一個或多個副本,在任何副本分片上可執行讀取/搜索操作;
- 每個分片都是一個功能齊全的 Lucene 索引,Lucene 的所有功能都可以通過簡單的配置/插件輕松暴露;
- 支持多種 API,比如 HTTP RESTful API、Native Java API 等,所有 API 都執行自動節點操作重新路由;
- ES 是面向文檔進行數據存儲的,文檔是ES最小單元,支持多種數據類型,單文檔級操作具有原子性/一致性/隔離性和持久性,我們可以通過定義文檔結構而創建索引;
Elasticsearch?有許多基礎而重要的概念,例如集群(Cluster)、節點(Node)、分片(Shard)、副本(Replica)、索引(Index)、文檔(Document)、類型(type)等等,后面會詳細的介紹說明,它們的關系如圖所示:
?1、集群 Cluster
它由一個或多個節點 Node 組成,可通過其集群名稱進行標識,集群名稱可以在 config/elasticsearch.yml 文件中進行配置,默認為“elasticsearch”。一個 ES Cluster 的組成,如下圖所示:
?我們可以通過如下命令,查看集群的狀態信息:
GET _cluster/state?2、節點 Node
在上面 ES 集群的示意圖中可以看到有許多類型的節點 Node,通常根據功能和用途,Node 可分為以下幾種類型:
- master-eligible Node:如果成為主節點,將負責管理整個集群的設置和更新;
- data Node:數據節點;
- ngest Node:數據接入節點(比如 pipepline);
- machine learning Node:專有的機器學習節點。
通常,一個 Node 可具有上面的多種類型,而實際不會去這么配置。在 config/elasticsearch.yml 文件中,我們可以進行配置 Node 在集群中所扮演的角色,如圖所示:
?請注意,當配置文件沒有進行 Node 參數的任何配置時,則會認為該 Node 是一個 coordination node(協作節點,它可以接受外部的請求,并轉發到相應的節點來處理)。
在實際部署到現網時,最好是一臺服務器上運行一個 Node,我們可把請求發送給 data Node,而不是發送給 master Node。關于?data Node 在整個集群中的地位,如下圖所示:
?3、文檔?Document
文檔 Document 是 ES 索引或搜索的最小數據單元。通常,文檔之間是獨立的,并且用Json數據格式表示,如果類比關系型數據庫的話,ES 文檔相當于數據庫的表的行。
4、類型?type
類型 type 是文檔 Document?的邏輯容器,在默認的情況下是 _doc。在 ES 6.0 之后,一個索引只能含有一個類型 type,而這其中的原因是:相同索引的不同映射 type 中具有相同名稱的字段是相同的;在索引中,不同映射 type 中具有相同名稱的字段在 Lucene 中被同一個字段支持。在 ES 8.0 的版本中,type 將會被徹底刪除。這里呢,只做簡單了解即可。
5、分片?Shard 與 副本?Replica
ES 是分布式的,它會把一個索引拆成多份進行排列,這個拆成多份的能力稱為分片 shard。而創建索引的時候,是可以指定分片數量的,指定多個分片的話,ES 會自動管理這些分片的排列,并且還根據需要重新平衡分片,而我們無需擔心細節。
分片 shard?有兩種類型:主分片 primary shard 、副本分片 replica shard。索引可以包含一個或多個主分片 Primary shard,在索引創建后,是無法更改索引中的主分片數的。索引的每個文檔都存儲在一個Primary shard,當索引文檔時,首先在 Primary shard上編制索引,然后在此分片的所有副本上(replica)編制索引,從而保持了分片與副本的數據一致性。
每個主分片可以具有零個或多個副本分片 replica shard,replica 是主分片的副本,這樣設計的好處在于可以提高搜索查詢性能,及增加故障轉移能力。
默認情況下,ES 為每個索引創建一個主分片和一個副本分片,分配多個分片和副本分片是分布式搜索功能設計的本質,能提供高可用性和快速訪問索引中的文檔。請注意,ES 永遠不會在與其主分片相同的節點上啟動副本分片,如下圖所示:
?在最新的 ES 集群設計中,可使用 auto_expand_replica 這個配置來讓 ES 自動決定有多少個副本。當有一個節點時,通過這個選項設置,可能會得到0個副本?replica 從而保證整個集群的健康狀態。這里順便區分下,分片 shard 的健康標識:
- 紅色:集群中未分配至少一個主分片。
- 黃色:已分配所有主副本,但未分配至少一個副本。
- 綠色:分配所有分片。
6、索引 Indexes
ES 的索引是一個邏輯命名空間,它映射到一個或多個主分片,并且可以具有零個或多個副本分片。索引也是由一個或多個文檔 document 組成的,并且這些文檔 documents 可以分布于不同的分片之中。
?每當一個文檔進來后,根據文檔ID會自動進行 hash 計算,并存放于計算出來的 shard 實例中,這樣的結果可以使得所有的 shard 都比較有均衡的存儲:
shard_num?=?hash(_routing)?%?num_primary_shards請注意,這里的 _routing?是空文檔的?_id,且?shard 數目是不可以動態修改的,否則會找不到相應的?num_primary_shards,而副本 replica 的數目是可以動態修改的。
三、Elasticsearch 安裝、配置及簡單使用
Elasticsearch 支持在 Windows、MacOS、Linux 等系統上進行安裝,這里,我使用的是Linux的CentOS7.9系統。
1、Installing Elasticsearch
Elasticsearch 安裝教程,我參考的是官網提供的指南,地址如下:
Installing Elasticsearch | Elasticsearch Guide [6.8] | Elastic
Elasticsearch?中文社區的下載界面,提供了各種版本的下載鏈接:(這里,我選擇的是Linux64(TAR),6.8.10版本)
下載中心 - Elastic 中文社區
請注意,ES 是不允許使用 root 用戶安裝的,在解壓 tar.gz 之前,需要創建一個用戶:
# 暫定用戶myes,密碼為20220621 [root@localhost /]# useradd myes [root@localhost /]# passwd myes 更改用戶 myes 的密碼 。 新的 密碼: 無效的密碼:密碼未通過字典檢查 - 它沒有包含足夠的不同字符 重新輸入新的 密碼: passwd:所有的身份驗證令牌已經成功更新。 [root@localhost /]# su myes [myes@localhost?/]$完成上面的步驟后,將下載的 tar.gz 上傳到/home/myes/目錄,并解壓到該目錄下:
[myes@localhost?~]$?tar?-zxvf?elasticsearch-6.8.6.tar.gz #?查看es目錄 [myes@localhost elasticsearch-6.8.6]$ ll bin?? config?? lib?? LICENSE.txt?? logs?? modules?? NOTICE.txt?? plugins?? README.textile2、Configuring Elasticsearch
接著,可以對JVM、ES、日志等配置文件進行相關配置(這里我只配置單點):
[myes@localhost config]$ ls elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles# 修改jvm.options配置文件,比如調整JVM內存大小 [myes@localhost config]$ vi jvm.options#?修改elasticsearch.yml配置文件,可以設置集群,節點等,指定數據和日志目錄等 [myes@localhost?config]$?vi?elasticsearch.yml# ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): # path.data: /home/myes/elasticsearch-6.8.6/data # # Path to log files: # path.logs: /home/myes/elasticsearch-6.8.6/logs # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: 0.0.0.0 # # Set a custom port for HTTP: # #http.port: 9200 #3、Elasticsearch Bootstrap Checks
至此,可以對 ES 服務進行啟動檢查了。
<1>. 啟動es:
[myes@localhost?elasticsearch-6.8.6]$?./bin/elasticsearch?啟動時,這里出現了2個問題:文件權限不足、虛擬內存不足,解決方法如下:
[myes@localhost elasticsearch-6.8.6]$ su root 密碼:# 文件權限不足,增加以下四個配置: [root@localhost elasticsearch-6.8.6]# vi /etc/security/limits.conf #<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 * soft nofile 65535 * hard nofile 131072 * soft nproc 4096 * hard nproc 4096# 虛擬內存不足,增加以下內容 [root@localhost elasticsearch-6.8.6]# vi /etc/sysctl.conf # vm.max_map_count=524240# 重啟終端窗口 [root@localhost elasticsearch-6.8.6]# sysctl -p vm.max_map_count = 524240# 重新啟動es: [root@localhost elasticsearch-6.8.6]# su myes [myes@localhost elasticsearch-6.8.6]$ ./bin/elasticsearch問題解決后,啟動日志如下:
?當然,也可以通過 jps 命令查看 ES 進程是否在運行:
[myes@localhost elasticsearch-6.8.6]$ jps 30449 Elasticsearch 30974 Jps通過瀏覽器訪問宿主機的IP:9200,可以看到默認集群名稱為"elasticsearch"的信息,如下:
<2>. 運行守護進程:
如果希望 ES 進程以后臺方式運行,我們可以使用守護進程運行 ES,設置如下:
[myes@localhost elasticsearch-6.8.6]$ ./bin/elasticsearch -d[myes@localhost elasticsearch-6.8.6]$ jps 31347 Elasticsearch 31389 Jps最后
Elasticsearch 是開發常用的一種分布式搜索技術,這里對它的基礎而重要的概念進行了介紹說明,并使用6.8版本進行安裝、配置和使用的演示。下篇,將重點介紹?Elasticsearch 的分詞器及使用。
總結
以上是生活随笔為你收集整理的1、Elasticsearch简介与安装使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为虚拟机硬盘扩容(Oracle VM V
- 下一篇: 批量解压子目录下包含密码的压缩包