Elasticsearch簡介
Elasticsearch是一個(gè)高度可擴(kuò)展的開源全文搜索和分析引擎阵面。它允許您快速疚鲤,近實(shí)時(shí)地存儲(chǔ)腥寇,搜索和分析大量數(shù)據(jù)。它通常用作底層引擎/技術(shù)氮惯,為具有復(fù)雜搜索功能和要求的應(yīng)用程序提供支持叮雳。
Elasticsearch可用于以下場景:
- 您運(yùn)行在線網(wǎng)上商店,允許您的客戶搜索您銷售的產(chǎn)品妇汗。在這種情況下帘不,您可以使用Elasticsearch存儲(chǔ)整個(gè)產(chǎn)品目錄和庫存,并為它們提供搜索和自動(dòng)填充建議杨箭。
- 您希望收集日志或交易數(shù)據(jù)寞焙,并且希望分析和挖掘此數(shù)據(jù)以查找趨勢,統(tǒng)計(jì)信息互婿,摘要或異常捣郊。在這種情況下,您可以使用Logstash(Elasticsearch / Logstash / Kibana堆棧的一部分)來收集慈参,聚合和解析數(shù)據(jù)呛牲,然后讓Logstash將此數(shù)據(jù)提供給Elasticsearch。一旦數(shù)據(jù)在Elasticsearch中懂牧,您就可以運(yùn)行搜索和聚合來挖掘您感興趣的任何信息侈净。
- 您運(yùn)行價(jià)格警報(bào)平臺(tái),允許精通價(jià)格的客戶指定一條規(guī)則僧凤,例如“我有興趣購買特定的電子產(chǎn)品畜侦,如果小工具的價(jià)格在下個(gè)月內(nèi)從任何供應(yīng)商降至X美元以下,我希望收到通知” 躯保。在這種情況下旋膳,您可以刮取供應(yīng)商價(jià)格,將其推入Elasticsearch并使用其反向搜索(Percolator)功能來匹配價(jià)格變動(dòng)與客戶查詢途事,并最終在發(fā)現(xiàn)匹配后將警報(bào)推送給客戶验懊。
基本概念
近乎實(shí)時(shí)(Near Realtime)
Elasticsearch是一個(gè)近乎實(shí)時(shí)的搜索平臺(tái)。這意味著從索引文檔到可搜索文檔的時(shí)間有一點(diǎn)延遲(通常是一秒)尸变。
集群(Cluster)
集群是一個(gè)或多個(gè)節(jié)點(diǎn)(服務(wù)器)的集合义图,它們共同保存您的整個(gè)數(shù)據(jù),并提供跨所有節(jié)點(diǎn)的聯(lián)合索引和搜索功能召烂。集群有唯一名稱標(biāo)識(shí)碱工,默認(rèn)情況下為“elasticsearch”。此名稱很重要,因?yàn)槿绻?jié)點(diǎn)設(shè)置為按名稱加入群集怕篷,則該節(jié)點(diǎn)只能是集群的一部分历筝。
確保不要在不同的環(huán)境中重用相同的集群集名稱,否則最終會(huì)導(dǎo)致節(jié)點(diǎn)加入錯(cuò)誤的集群廊谓。
節(jié)點(diǎn)(Node)
節(jié)點(diǎn)是作為集群一部分的單個(gè)服務(wù)器梳猪,存儲(chǔ)數(shù)據(jù)并參與群集的索引和搜索功能。就像集群一樣蒸痹,節(jié)點(diǎn)由名稱標(biāo)識(shí)春弥,默認(rèn)情況下,該名稱是在啟動(dòng)時(shí)分配給節(jié)點(diǎn)的隨機(jī)通用唯一標(biāo)識(shí)符(UUID)电抚。如果不需要默認(rèn)值惕稻,可以定義所需的任何節(jié)點(diǎn)名稱竖共。此名稱對于管理目的非常重要蝙叛,您可以在其中識(shí)別網(wǎng)絡(luò)中哪些服務(wù)器與Elasticsearch集群中的哪些節(jié)點(diǎn)相對應(yīng)。
索引(Index)
索引是具有某些類似特征的文檔集合公给。例如借帘,您可以擁有客戶數(shù)據(jù)的索引,產(chǎn)品目錄的另一個(gè)索引以及訂單數(shù)據(jù)的另一個(gè)索引淌铐。索引由名稱標(biāo)識(shí)(必須全部小寫)肺然,此名稱用于在對其中的文檔執(zhí)行索引,搜索腿准,更新和刪除操作時(shí)引用索引际起。
在單個(gè)群集中,您可以根據(jù)需要定義任意數(shù)量的索引吐葱。
文檔(Document)
文檔是可以編制索引的基本信息單元街望。例如,您可以為單個(gè)客戶提供文檔弟跑,為單個(gè)產(chǎn)品提供另一個(gè)文檔灾前,為單個(gè)訂單提供另一個(gè)文檔。該文檔以JSON(JavaScript Object Notation)表示孟辑,JSON是一種普遍存在的互聯(lián)網(wǎng)數(shù)據(jù)交換格式哎甲。
在索引/類型中,您可以根據(jù)需要存儲(chǔ)任意數(shù)量的文檔饲嗽。請注意炭玫,盡管文檔實(shí)際上駐留在索引中,但實(shí)際上必須將文檔編入索引/分配給索引中的類型貌虾。
分片和副本(Shards & Replicas)
索引可能存儲(chǔ)大量可能超過單個(gè)節(jié)點(diǎn)的硬件限制的數(shù)據(jù)吞加。例如,占用1TB磁盤空間的十億個(gè)文檔的單個(gè)索引可能不適合單個(gè)節(jié)點(diǎn)的磁盤,或者可能太慢而無法單獨(dú)從單個(gè)節(jié)點(diǎn)提供搜索請求榴鼎。
為了解決這個(gè)問題伯诬,Elasticsearch提供了將索引細(xì)分為多個(gè)稱為分片的功能。創(chuàng)建索引時(shí)巫财,只需定義所需的分片數(shù)即可盗似。每個(gè)分片本身都是一個(gè)功能齊全且獨(dú)立的“索引”,可以托管在集群中的任何節(jié)點(diǎn)上平项。
分片很重要赫舒,主要有兩個(gè)原因:
- 它允許您水平拆分/縮放內(nèi)容量
- 它允許您跨分片(可能在多個(gè)節(jié)點(diǎn)上)分布和并行化操作,從而提高性能/吞吐量
分片的分布方式以及如何將其文檔聚合回搜索請求的機(jī)制完全由Elasticsearch管理闽瓢,對用戶而言是透明的接癌。
在可以隨時(shí)發(fā)生故障的網(wǎng)絡(luò)/云環(huán)境中,強(qiáng)烈建議使用故障轉(zhuǎn)移機(jī)制扣讼,以防分片/節(jié)點(diǎn)以某種方式脫機(jī)或因任何原因消失缺猛。為此,Elasticsearch允許您將索引的分片的一個(gè)或多個(gè)副本制作成所謂的副本分片或簡稱副本椭符。
副本集很重要荔燎,主要有兩個(gè)原因:
- 它在分片/節(jié)點(diǎn)發(fā)生故障時(shí)提供高可用性。因此销钝,請務(wù)必注意有咨,副本分片永遠(yuǎn)不會(huì)在與從中復(fù)制的原始/主分片相同的節(jié)點(diǎn)上分配。
- 它允許您擴(kuò)展搜索量/吞吐量蒸健,因?yàn)榭梢栽谒懈北旧喜⑿袌?zhí)行搜索座享。
總而言之,每個(gè)索引可以拆分為多個(gè)分片似忧。索引也可以復(fù)制為零(表示沒有副本)或更多次渣叛。復(fù)制后,每個(gè)索引都將具有主分片(從中復(fù)制的原始分片)和副本分片(主分片的副本)橡娄。
默認(rèn)情況下诗箍,Elasticsearch中的每個(gè)索引都分配了5個(gè)主分片和1個(gè)副本,這意味著如果群集中至少有兩個(gè)節(jié)點(diǎn)挽唉,則索引將包含5個(gè)主分片和另外5個(gè)副本分片(1個(gè)完整副本)滤祖,總計(jì)為每個(gè)索引10個(gè)分片。
每個(gè)Elasticsearch分片都是Lucene索引瓶籽。單個(gè)Lucene索引中可以包含最大數(shù)量的文檔匠童。截止LUCENE-5843,限制是2,147,483,519(= Integer.MAX_VALUE - 128)文檔塑顺。您可以使用_cat/shardsAPI 監(jiān)控分片大小汤求。
安裝(Installation)
Elasticsearch至少需要Java 8俏险,Java安裝教程請參考JavaPlatform, Standard Edition安裝指導(dǎo)。
在安裝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
一旦我們設(shè)置了Java竖独,我們就可以下載并運(yùn)行Elasticsearch。二進(jìn)制文件可以www.elastic.co/downloads與過去發(fā)布的所有版本一起提供挤牛。對于每個(gè)版本莹痢,您可以選擇zip或tar存檔,包DEB或RPM包墓赴,或Windows MSI安裝包竞膳。
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
然后它會(huì)在當(dāng)前目錄中創(chuàng)建一堆文件和文件夾坦辟。然后我們進(jìn)入bin目錄,如下所示:
cd elasticsearch-6.4.1/bin
現(xiàn)在我們準(zhǔn)備啟動(dòng)我們的節(jié)點(diǎn)和單個(gè)集群:
./elasticsearch
結(jié)果報(bào)錯(cuò)章办!
ES安裝問題
1.用戶授權(quán)問題
[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
因?yàn)榘踩珕栴}elasticsearch 不讓用root用戶直接運(yùn)行.
解決辦法:
新增用戶
useradd -m 用戶名
passwd 用戶名
輸入密碼
授權(quán)
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
接著執(zhí)行 sysctl -p
4.其他機(jī)器訪問失敗
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
//結(jié)果已成功挠日,顯示信息忽略。
本地訪問
默認(rèn) 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"
}
返回上述結(jié)果翰舌,即為成功。
外網(wǎng)訪問
先開啟阿里云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"
}
返回上述結(jié)果椅贱,即為成功。
參考資料
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
本篇到此結(jié)束只冻,感謝觀看