唸叨了兩天,第一篇安裝教程總算來啦!。好了,廢話很少說,關於elasticsearch是什麼這裏我就不作過多介紹了,我們直接上乾貨。html
elasticsearch的安裝要說是很是簡單的,能夠說沒有什麼安轉操做,直接下載相關文件,運行啓動命令便可,首先進入到下載頁面,選擇適合本身的版本下載,以下: node
有針對Windows的壓縮包zip,也有msi這種安裝引導程序,有針對mac和linux的deb以及rpm,讀者根據本身的操做系統選擇合適的壓縮包下載便可。 linux
在下載頁還有安裝步驟介紹,以下: 數據庫
由這段介紹能夠看出,下載解壓後直接運行bin/elasticsearch (Windows下運行binelasticsearch.bat)便可。運行成功後,在瀏覽器中訪問http://localhost:9200,查看是否啓動成功,啓動成功結果以下: bootstrap
能夠看到,啓動後,默認的節點名稱爲Huf6FQ-,默認的集羣名稱爲elasticsearch,固然,也能夠在啓動命令中自定義節點名稱和集羣名稱,以下:瀏覽器
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
執行結果以下: 網絡
小貼士:app
elasticsearch的運行基於Java,所以,電腦上須要安裝Java環境,推薦Java版本爲1.8.0_131及以上。
剛剛的啓動方式是前臺運行,用戶按下Ctrl+C,運行就中止了,這種運行方式適合測試和開發環境,生產環境,直接在後臺運行便可,啓動命令以下:框架
./elasticsearch -d
如此,使elasticsearch在後臺運行,在後臺運行的elasticsearch可使用jdk自帶的查看當前Java進程的工具jps命令查看運行情況,以下: jvm
固然也能夠直接使用Linux中的命令查看,以下:
ps aux|grep elasticsearch
無論哪種查看方式,查看後均可以獲取到elasticsearch的進程id,而後經過kill命令能夠關閉elasticsearch,以下:
kill 8423
操做結果以下:
elasticsearch下載以後,解壓後,能夠看到目錄結構以下:
目錄含義以下:
文件/文件夾 | 做用 |
---|---|
bin | 可執行文件存放目錄,例如啓動文件 |
config | 配置文件存放目錄 |
data | 數據存儲目錄 |
lib | 第三方依賴庫 |
logs | 運行日誌輸出目錄 |
modules | 依賴模塊目錄 |
plugins | 插件目錄 |
LICENSE.txt | LICENSE聲明文件 |
NOTICE.txt | 版權聲明文件 |
README.textile | 框架介紹信息 |
在config目錄下,主要有以下配置文件:
其中,咱們常常涉及到的有三個,elasticsearch.yml、log4j2.properties以及jvm.options,其中,elasticsearch.yml是elasticsearch的基本配置文件,log4j2是日誌輸出配置文件,jvm則是jvm基本參數配置。這裏主要來看看elasticsearch.yml配置文件,以下:
# ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # Before you set out to tweak and tune the configuration, make sure you # understand what are you trying to accomplish and the consequences. # # The primary way of configuring a node is via this file. This template lists # the most important settings you may want to configure for a production cluster. # # Please consult the documentation for further information on configuration options: # https://www.elastic.co/guide/en/elasticsearch/reference/index.html # # ---------------------------------- 集羣配置 ----------------------------------- # # Use a descriptive name for your cluster: #配置集羣名字,集羣名字默認爲elasticsearch, #elasticsearch會自動發如今同一網段下的elasticsearch節點。 #讀者在第一次啓動elasticsearch時,在瀏覽器中輸入http://localhost:9200, #在返回的數據中,就有集羣名字,默認即爲elasticsearch。 #cluster.name: my-application # # ------------------------------------ 節點配置 ------------------------------------ # # Use a descriptive name for the node: #配置節點名稱 #node.name: node-1 # # Add custom attributes to the node: #給節點添加自定義屬性 #node.attr.rack: r1 # # ----------------------------------- 路徑配置 ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): #數據存放目錄,默認是elasticsearch下的data目錄,能夠指定多個目錄,用,隔開,如: #path.data:/path/data1,/path/data2 #path.data: /path/to/data # # Path to log files: #日誌存放目錄,默認爲elasticsearch下的logs目錄 #path.logs: /path/to/logs # # ----------------------------------- 內存配置 ----------------------------------- # # Lock the memory on startup: #配置是否鎖住內存。當jvm開始swapping時,elasticsearch的效率下降,爲了不這種狀況,能夠設置爲true。 #bootstrap.memory_lock: true # # Make sure that the heap size is set to about half the memory available # on the system and that the owner of the process is allowed to use this # limit. # # Elasticsearch performs poorly when the system is swapping the memory. # # ---------------------------------- 網絡配置 ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): #設置綁定的ip地址 #network.host: 192.168.0.1 # # Set a custom port for HTTP: #配置對外提供服務的http端口號 #http.port: 9200 # # For more information, consult the network module documentation. # # --------------------------------- 集羣節點發現參數 ---------------------------------- # # Pass an initial list of hosts to perform discovery when new node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] #設置集羣中master節點的初始列表,經過這個配置能夠發現新加入的集羣的節點。 #discovery.zen.ping.unicast.hosts: ["host1", "host2"] # # Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1): #保證集羣中的節點能夠知道其餘n個有master資格的節點,防止出現split brain,默認爲1 #discovery.zen.minimum_master_nodes: # # For more information, consult the zen discovery module documentation. # # ---------------------------------- Gateway ----------------------------------- # # Block initial recovery after a full cluster restart until N nodes are started: #當n個節點啓動後,再開始集羣的恢復 #gateway.recover_after_nodes: 3 # # For more information, consult the gateway module documentation. # # ---------------------------------- Various ----------------------------------- # # Require explicit names when deleting indices: # #action.destructive_requires_name: true
固然這裏只是最基本的配置,更多配置讀者能夠參考官方文檔。
Elasticsearch安裝成功後,在正式啓動以前,還須要讀者瞭解Elasticsearch中幾個核心概念,掌握這些核心概念,有助於讀者更好的理解Elasticsearch。
Elasticsearch是一個接近實時(near real time)的搜索平臺,也就是說,從你創建索引,到這個索引能夠被搜索只須要很小的延遲,一般是1秒。
一個集羣就是由一個或多個節點組織在一塊兒, 這些節點共同持有所有的索引數據, 並共同提供索引和搜索功能。 一個集羣由一個惟一的名字標識(默認就是「elasticsearch」,在上文啓動過程當中,也像讀者展現瞭如何自定義集羣名稱)。 這個名字很重要, 由於一個節點只能經過指定某個集羣的名字,來加入這個集羣。在生產環境中顯式地設定這個名字是一個好習慣,可是使用默認值來進行測試/開發也是不錯的。開發者須要確認不要使用相同的集羣名字,以免節點加入到錯誤的集羣。須要注意的是,一個集羣中只包含一個節點是合法的。另外,你也能夠擁有多個集羣,集羣以名字區分。
一個節點就是集羣中的一個服務,做爲集羣的一部分,它能夠用來存儲數據,參與集羣的索引和搜索功能。和集羣相似,一個節點也是由一個名字來標識的,默認狀況下,這個名字是一個隨機的Universally Unique IDentifier (UUID),這個名字會在節點啓動時分配給節點。這個名字對於節點管理工做來講很重要,由於開發者須要肯定網絡中的哪些服務對應於Elasticsearch集羣中的哪些節點。
一個節點能夠經過配置集羣名稱的方式來加入一個指定的集羣。 默認狀況下,每一個節點都會被加入到一個叫作「elasticsearch」的集羣中,這意味着,若是開發者啓動了多個節點, 而且這些節點可以相互發現彼此,那麼這些節點會自動加入到一個叫作「elasticsearch」的集羣中。
在一個集羣裏能夠擁有任意多個節點。並且,若是當前網絡中沒有運行任何節點,這時啓動一個節點,會默認建立並加入一個叫作「elasticsearch」的單節點集羣。
一個索引就是一個擁有類似特徵的文檔的集合。例如,客戶數據能夠創建一個索引,產品目錄能夠創建一個索引,訂單數據能夠創建一個索引。一個索引由一個名字來標識(必須所有是小寫字母的),而且當咱們要對這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集羣中,能夠建立任意多個索引。
在一個索引中,你能夠定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區,其語義徹底由你來定。一般,會爲具備一組相同字段的文檔定義一個類型。好比說,咱們假設你運營一個博客平臺 而且將你全部的數據存儲到一個索引中。在這個索引中,你能夠爲用戶數據定義一個類型,爲博客數據定義另外一個類型,固然,也能夠爲評論數據定義另外一個類型。
注意:這是一個即將過時的概念,在Elasticsearch 6.0.0或更高版本中建立的索引只包含單個映射類型(type)。在具備多種映射類型的5.x中建立的索引將繼續像之前同樣在Elasticsearch 6.x中運行。映射類型將在Elasticsearch7.0.0中徹底刪除。
許多人喜歡將index比喻爲關係型數據庫中的database,將type比喻爲關係型數據庫中的table,實際上這個比喻很是不貼切。由於在關係型數據庫中,表中的字段都是獨立的,可是在Elasticsearch中,在不一樣的type中,若是filed具備相同的名字,則這些不一樣的filed其實是由相同的Lucene Filed提供支持的,所以這種比喻並不恰當;另外一方面,在同一索引中存儲具備不多或沒有共同字段的不一樣實體會干擾Lucene有效壓縮文檔的能力。
一個文檔是一個可被索引的基礎信息單元。例如,某一個客戶的文檔、某一個產品的一個文檔、某個訂單的一個文檔。文檔以JSON格式來表示。在一個index/type裏面,能夠存儲任意多的文檔。
一個索引能夠存儲超出單個節點硬件限制的大量數據。例如,一個具備10億文檔的索引佔據1TB的磁盤空間,而任一節點可能沒有這樣大的磁盤空間來存儲或者單個節點處理搜索請求,響應會太慢。
爲了解決這個問題,Elasticsearch提供了將索引劃分紅多片的能力,這些片叫作分片。當用戶建立一個索引的時候,能夠指定分片的數量(默爲5,可是在7.0版本中默認會變爲1)。每一個分片自己也是一個功能完善而且獨立的「索引」,這個「索引」 能夠被放置到集羣中的任何節點上。
分片之因此重要,主要有兩方面的緣由:
至於一個分片怎樣分佈,它的文檔怎樣聚合回搜索請求,是徹底由Elasticsearch管理的,對於用戶來講,這些都是透明的。在一個網絡/雲的環境裏,失敗隨時均可能發生。在某個分片/節點由於某些緣由處於離線狀態或者消失的狀況下,故障轉移機制是很是有用且強烈推薦的。爲此, Elasticsearch容許建立分片的一份或多份拷貝,這些拷貝叫作複製分片,或者直接叫複製。
複製之因此重要,有兩個主要緣由:
總之,每一個索引能夠被分紅多個分片,一個索引也能夠被複制0次或屢次。一旦複製了,每一個索引就有了主分片和複製分片。分片和複製的數量能夠在索引建立的時候指定。在索引建立以後,能夠在任什麼時候候動態地改變複製的數量,可是不能再改變分片的數量。
在Elasticsearch7.0版本以前,默認狀況下,Elasticsearch中的每一個索引分配5個主分片和1個複製。這意味着,若是你的集羣中至少有兩個節點,你的索引將會有5個主分片和另外5個複製分片(1個徹底拷貝),這樣每一個索引總共就有10個分片(根據官方文檔,在7.0版本上,默認的分片數量會有所變化)。
好了,今天的介紹就先到這裏。