Elasticsearch簡介
Elasticsearch是一個高度可擴展的開源全文搜索和分析引擎。它允許您快速,近實時地存儲,搜索和分析大量數據。它通常用作底層引擎/技術,為具有復雜搜索功能和要求的應用程序提供支持。
Elasticsearch可用於以下場景:
- 您運行在線網上商店,允許您的客戶搜索您銷售的產品。在這種情況下,您可以使用Elasticsearch存儲整個產品目錄和庫存,並為它們提供搜索和自動填充建議。
- 您希望收集日志或交易數據,並且希望分析和挖掘此數據以查找趨勢,統計信息,摘要或異常。在這種情況下,您可以使用Logstash(Elasticsearch / Logstash / Kibana堆棧的一部分)來收集,聚合和解析數據,然后讓Logstash將此數據提供給Elasticsearch。一旦數據在Elasticsearch中,您就可以運行搜索和聚合來挖掘您感興趣的任何信息。
- 您運行價格警報平台,允許精通價格的客戶指定一條規則,例如“我有興趣購買特定的電子產品,如果小工具的價格在下個月內從任何供應商降至X美元以下,我希望收到通知” 。在這種情況下,您可以刮取供應商價格,將其推入Elasticsearch並使用其反向搜索(Percolator)功能來匹配價格變動與客戶查詢,並最終在發現匹配后將警報推送給客戶。
基本概念
近乎實時(Near Realtime)
Elasticsearch是一個近乎實時的搜索平台。這意味着從索引文檔到可搜索文檔的時間有一點延遲(通常是一秒)。
集群(Cluster)
集群是一個或多個節點(服務器)的集合,它們共同保存您的整個數據,並提供跨所有節點的聯合索引和搜索功能。集群有唯一名稱標識,默認情況下為“elasticsearch”。此名稱很重要,因為如果節點設置為按名稱加入群集,則該節點只能是集群的一部分。
確保不要在不同的環境中重用相同的集群集名稱,否則最終會導致節點加入錯誤的集群。
節點(Node)
節點是作為集群一部分的單個服務器,存儲數據並參與群集的索引和搜索功能。就像集群一樣,節點由名稱標識,默認情況下,該名稱是在啟動時分配給節點的隨機通用唯一標識符(UUID)。如果不需要默認值,可以定義所需的任何節點名稱。此名稱對於管理目的非常重要,您可以在其中識別網絡中哪些服務器與Elasticsearch集群中的哪些節點相對應。
索引(Index)
索引是具有某些類似特征的文檔集合。例如,您可以擁有客戶數據的索引,產品目錄的另一個索引以及訂單數據的另一個索引。索引由名稱標識(必須全部小寫),此名稱用於在對其中的文檔執行索引,搜索,更新和刪除操作時引用索引。
在單個群集中,您可以根據需要定義任意數量的索引。
文檔(Document)
文檔是可以編制索引的基本信息單元。例如,您可以為單個客戶提供文檔,為單個產品提供另一個文檔,為單個訂單提供另一個文檔。該文檔以JSON(JavaScript Object Notation)表示,JSON是一種普遍存在的互聯網數據交換格式。
在索引/類型中,您可以根據需要存儲任意數量的文檔。請注意,盡管文檔實際上駐留在索引中,但實際上必須將文檔編入索引/分配給索引中的類型。
分片和副本(Shards & Replicas)
索引可能存儲大量可能超過單個節點的硬件限制的數據。例如,占用1TB磁盤空間的十億個文檔的單個索引可能不適合單個節點的磁盤,或者可能太慢而無法單獨從單個節點提供搜索請求。
為了解決這個問題,Elasticsearch提供了將索引細分為多個稱為分片的功能。創建索引時,只需定義所需的分片數即可。每個分片本身都是一個功能齊全且獨立的“索引”,可以托管在集群中的任何節點上。
分片很重要,主要有兩個原因:
- 它允許您水平拆分/縮放內容量
- 它允許您跨分片(可能在多個節點上)分布和並行化操作,從而提高性能/吞吐量
分片的分布方式以及如何將其文檔聚合回搜索請求的機制完全由Elasticsearch管理,對用戶而言是透明的。
在可以隨時發生故障的網絡/雲環境中,強烈建議使用故障轉移機制,以防分片/節點以某種方式脫機或因任何原因消失。為此,Elasticsearch允許您將索引的分片的一個或多個副本制作成所謂的副本分片或簡稱副本。
副本集很重要,主要有兩個原因:
- 它在分片/節點發生故障時提供高可用性。因此,請務必注意,副本分片永遠不會在與從中復制的原始/主分片相同的節點上分配。
- 它允許您擴展搜索量/吞吐量,因為可以在所有副本上並行執行搜索。
總而言之,每個索引可以拆分為多個分片。索引也可以復制為零(表示沒有副本)或更多次。復制后,每個索引都將具有主分片(從中復制的原始分片)和副本分片(主分片的副本)。
默認情況下,Elasticsearch中的每個索引都分配了5個主分片和1個副本,這意味着如果群集中至少有兩個節點,則索引將包含5個主分片和另外5個副本分片(1個完整副本),總計為每個索引10個分片。
每個Elasticsearch分片都是Lucene索引。單個Lucene索引中可以包含最大數量的文檔。截止LUCENE-5843,限制是2,147,483,519(= Integer.MAX_VALUE - 128)文檔。您可以使用_cat/shardsAPI 監控分片大小。
安裝(Installation)
Elasticsearch至少需要Java 8,Java安裝教程請參考JavaPlatform, Standard Edition安裝指導。
在安裝Elasticsearch之前,請先檢查Java版本:
java -version
echo $JAVA_HOME
[root@XXXX cusD]# java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode) [root@XXXX cusD]# echo $JAVA_HOME /usr/lib/jdk1.8.0_181
一旦我們設置了Java,我們就可以下載並運行Elasticsearch。二進制文件可以www.elastic.co/downloads與過去發布的所有版本一起提供。對於每個版本,您可以選擇zip或tar存檔,包DEB或RPM包,或Windows MSI安裝包。
RPM安裝參考 https://www.jianshu.com/p/da3c3612686a
Tar 安裝示例
為簡單起見,讓我們使用tar文件。
我們按如下方式下載Elasticsearch 6.4.1 tar:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz
然后提取如下:
tar -xvf elasticsearch-6.4.1.tar.gz
然后它會在當前目錄中創建一堆文件和文件夾。然后我們進入bin目錄,如下所示:
cd elasticsearch-6.4.1/bin
現在我們准備啟動我們的節點和單個集群:
./elasticsearch
結果報錯!
ES安裝問題
1.用戶授權問題
[root@izwz9fwifc2eniq3lbdzmgz bin]# ./elasticsearch [2018-09-27T16:45:56,071][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.1.jar:6.4.1] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.1.jar:6.4.1] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.1.jar:6.4.1] Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.1.jar:6.4.1] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.1.jar:6.4.1] ... 6 more
因為安全問題elasticsearch 不讓用root用戶直接運行.
解決辦法:
新增用戶
useradd -m 用戶名
passwd 用戶名
輸入密碼
授權
chown -R 用戶名 es的安裝目錄
切換用戶
su 用戶名
切換到es安裝目錄下
./elasticsearch
2.file descriptors too low
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
解決辦法:切換root賬戶
vi /etc/security/limits.conf
# End of file * soft nofile 65536 * hard nofile 65536
3.max virtual memory too low
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決辦法:切換root賬戶 vim /etc/sysctl.conf
增加一行 vm.max_map_count=505300
接着執行 sysctl -p
4.其他機器訪問失敗
Es安裝目錄/config/elasticsearch.yml文件
vi /config/elasticsearch.yml
# ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # #network.host: 192.168.0.1 # # Set a custom port for HTTP: # #http.port: 9200 # # For more information, consult the network module documentation. #
去掉network.host注釋,ip地址改為 0.0.0.0。
network.host: 0.0.0.0
檢測是否安裝成功
切換Es賬戶,切換到es安裝目錄下
./elasticsearch
[root@XXX bin]# useradd -m fan113 [root@XXX bin]# passwd fan113 Changing password for user fan113. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@XXXX bin]# chrow -R fan113 /cusD/elasticsearch-6.4.1 bash: chrow: command not found [root@XXXX bin]# chown -R fan113 /cusD/elasticsearch-6.4.1 [root@XXXX bin]# su fan113 //中間忽略 [fan113@izwz9fwifc2eniq3lbdzmgz bin]$ ./elasticsearch //結果已成功,顯示信息忽略。
本地訪問
默認 http://localhost:9200/?pretty
[root@XXXX ~]# curl http://localhost:9200/?pretty { "name" : "f1mValJ", "cluster_name" : "elasticsearch", "cluster_uuid" : "ugL60wjJQPaIZw3NRE9aKg", "version" : { "number" : "6.4.1", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "e36acdb", "build_date" : "2018-09-13T22:18:07.696808Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
返回上述結果,即為成功。
外網訪問
先開啟阿里雲9200端口映射。
[root@XXXX ~]# curl www.XXXX.cn:9200 { "name" : "f1mValJ", "cluster_name" : "elasticsearch", "cluster_uuid" : "ugL60wjJQPaIZw3NRE9aKg", "version" : { "number" : "6.4.1", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "e36acdb", "build_date" : "2018-09-13T22:18:07.696808Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
返回上述結果,即為成功。
參考資料
Linux命令大全
http://man.linuxde.net/userdel
http://man.linuxde.net/useradd
https://www.cnblogs.com/mingc/p/7591287.html
https://blog.csdn.net/m290345792/article/details/55002695
https://www.linuxidc.com/Linux/2013-07/87371.htm
Elasticsearch教程
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
https://blog.csdn.net/tototuzuoquan/article/details/75579476
http://www.cnblogs.com/duanxuan/p/6473005.html
https://blog.csdn.net/qq_21387171/article/details/53577115
https://help.aliyun.com/knowledge_detail/41334.html
https://www.cnblogs.com/zhi-leaf/p/8484337.html
本篇到此結束,感謝觀看