ElasticSearch 是一個(gè)分布式猴贰、高擴(kuò)展、高實(shí)時(shí)的搜索引擎乔夯。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力款侵。充分利用ElasticSearch的水平伸縮性末荐,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。ElasticSearch 的實(shí)現(xiàn)原理主要分為以下幾個(gè)步驟新锈,首先用戶將數(shù)據(jù)提交到Elastic Search 數(shù)據(jù)庫中甲脏,再通過分詞控制器去將對應(yīng)的語句分詞,將其權(quán)重和分詞結(jié)果一并存入數(shù)據(jù),當(dāng)用戶搜索數(shù)據(jù)時(shí)候块请,再根據(jù)權(quán)重將結(jié)果排名娜氏,打分,再將返回結(jié)果呈現(xiàn)給用戶墩新,本文介紹如果通過Docker進(jìn)行安裝Elasticsearch單節(jié)點(diǎn)和集群
一贸弥、安裝單節(jié)點(diǎn)Elasticsearch
1、拉取Elasticsearch
docker pull elasticsearch:6.8.7
2海渊、創(chuàng)建數(shù)據(jù)卷
主要用于將容器內(nèi)的數(shù)據(jù)和宿主機(jī)進(jìn)行掛載绵疲,避免容器重啟和掛掉的時(shí)候數(shù)據(jù)丟失
- 創(chuàng)建目錄
# -p是創(chuàng)建多級(jí)目錄
mkdir -p /data/es
- 進(jìn)入剛剛創(chuàng)建的es目錄,創(chuàng)建數(shù)據(jù)存放目錄和日志存放目錄
# 進(jìn)入目錄
cd /data/es
# 創(chuàng)建數(shù)據(jù)目錄和日志目錄
mkdir data log
# 這兩個(gè)目錄的用戶權(quán)限要與啟動(dòng)es的用戶相同臣疑,否則會(huì)出現(xiàn)沒有權(quán)限讀取盔憨,這里為了方便直接給開放最大權(quán)限
chmod 777 data log
- 創(chuàng)建配置文件
vim es.yml
- 文件中加入以下內(nèi)容
cluster.name: elasticsearch-cluster
node.name: es-node
http.port: 9200
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
3、啟動(dòng)
docker run -d --name es -p 9200:9200 -p 9300:9300 --restart always -v /data/es/data/:/usr/share/elasticsearch/data -v /data/es/log/:/usr/share/elasticsearch/logs -v /data/es/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e "discovery.type=single-node" elasticsearch:6.8.7
- 最后通過瀏覽器測試是否啟動(dòng)成功
4讯沈、安裝IK分詞器
Elasticsearch分詞器郁岩,對中文分詞不是太友好。這里我們可以下載開源的IK
分詞器
- 進(jìn)入es容器
docker exec -it es bash
- 進(jìn)入plugin目錄并安裝分詞器
# 進(jìn)入目錄
cd plugins/
# 安裝分詞器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.7/elasticsearch-analysis-ik-6.8.7.zip
5芙盘、安裝Elasticsearch-Head
提供了操作Elasticsearch的界面
- 拉取鏡像
docker pull mobz/elasticsearch-head:5
- 運(yùn)行
docker run -d --name eshead -p 9100:9100 docker.io/mobz/elasticsearch-head:5
最后通過瀏覽器打開驯用,并進(jìn)行連接測試是否連接成功,這時(shí)候?qū)S集群進(jìn)行操作時(shí)會(huì)出現(xiàn)406
異常儒老,需要我們?nèi)ヅ渲孟?/p>
# 進(jìn)入head容器
docker exec -it eshead bash
# 編輯配置文件蝴乔,如果沒有vim命令自行安裝vim
vim _site/vendor.js
# 在未編輯的模式下使用以下命令查詢
/contentType
輸入i開啟編輯模式,application/x-www-form-urlencoded 改為 application/json;charset=UTF-8
# 按鍵盤的ESC健退出編輯模式驮樊,然后查詢下一個(gè)
/var inspectData = s.contentType
輸入i開啟編輯模式薇正,將application/x-www-form-urlencoded 改為 application/json;charset=UTF-8
# 輸入wq保存并退出,最后退出容器并重啟容器
exit
docker restart eshead
到此就安裝好單節(jié)點(diǎn)的Elasticsearch啦囚衔,但是有個(gè)地方要注意挖腰,ES的版本號(hào)一定要和分詞器的版本對應(yīng)
二、安裝集群版的Elasticsearch
這里只介紹如何安裝集群练湿,不再介紹安裝分詞器等猴仑。。
1肥哎、創(chuàng)建配置文件
這里還是延續(xù)安裝單節(jié)點(diǎn)辽俗,在/data/es
目錄中創(chuàng)建,如果服務(wù)器沒有該目錄就自行創(chuàng)建
vim es.yml
加入以下內(nèi)容
cluster.name: elasticsearch-cluster
node.name: es-node1
network.host: 0.0.0.0
network.publish_host: 192.168.1.97
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.97:9300","192.168.1.98:9300"]
discovery.zen.minimum_master_nodes: 2
- 在第二臺(tái)服務(wù)器也創(chuàng)建該配置文件并加入以下內(nèi)容
cluster.name: elasticsearch-cluster
node.name: es-node2
network.host: 0.0.0.0
network.publish_host: 192.168.1.98
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.98:9300","192.168.1.97:9300"]
discovery.zen.minimum_master_nodes: 2
以下為配置的描述
配置 | 描述 |
---|---|
cluster.name | 用于唯一標(biāo)識(shí)一個(gè)集群篡诽,不同的集群崖飘,其 cluster.name 不同,集群名字相同的所有節(jié)點(diǎn)自動(dòng)組成一個(gè)集群 |
node.name | 節(jié)點(diǎn)名杈女,默認(rèn)隨機(jī)指定一個(gè)name列表中名字朱浴。一個(gè)集群中node名字不能重復(fù)
|
network.host | 允許訪問的IP吊圾,默認(rèn)為0.0.0.0
|
network.publish_host | 設(shè)置其它結(jié)點(diǎn)和該結(jié)點(diǎn)交互的ip地址,如果不設(shè)置它會(huì)自動(dòng)判斷翰蠢,值必須是個(gè)真實(shí)的ip地址 |
http.port | 設(shè)置對外服務(wù)的http端口项乒,默認(rèn)為9200 |
transport.tcp.port | 設(shè)置節(jié)點(diǎn)之間交互的tcp端口,默認(rèn)是9300 |
http.cors.enabled | 是否允許跨域 |
http.cors.allow-origin | 允許的域名梁沧,* 表示所有 |
node.master | 該結(jié)點(diǎn)是否有資格被選舉為主結(jié)點(diǎn)(候選主結(jié)點(diǎn))板丽,用于處理請求和管理集群。如果結(jié)點(diǎn)沒有資格成為主結(jié)點(diǎn)趁尼,那么該結(jié)點(diǎn)永遠(yuǎn)不可能成為主結(jié)點(diǎn);如果結(jié)點(diǎn)有資格成為主結(jié)點(diǎn)猖辫,只有在被其他候選主結(jié)點(diǎn)認(rèn)可和被選舉為主結(jié)點(diǎn)之后酥泞,才真正成為主結(jié)點(diǎn) |
node.data | 配置該結(jié)點(diǎn)是數(shù)據(jù)結(jié)點(diǎn),用于保存數(shù)據(jù)啃憎,執(zhí)行數(shù)據(jù)相關(guān)的操作 |
discovery.zen.ping.unicast.hosts | 集群中節(jié)點(diǎn)的IP地址 |
discovery.zen.minimum_master_nodes | 自動(dòng)發(fā)現(xiàn)master節(jié)點(diǎn)的最小數(shù)芝囤,如果這個(gè)集群中配置進(jìn)來的master節(jié)點(diǎn)少于這個(gè)數(shù)目,es的日志會(huì)一直報(bào)master節(jié)點(diǎn)數(shù)目不足辛萍,甚至?xí)霈F(xiàn)主備切換時(shí)誤認(rèn)為有兩個(gè)激活的master節(jié)點(diǎn)悯姊。最好為主節(jié)點(diǎn)總數(shù) / 2 + 1 ,默認(rèn)1
|
2贩毕、運(yùn)行
分別運(yùn)行兩臺(tái)服務(wù)器中的Elasticsearch悯许,這里不在介紹拉取鏡像
docker run -d --name es -p 9200:9200 -p 9300:9300 --restart always -v /data/es/data/:/usr/share/elasticsearch/data -v /data/es/log/:/usr/share/elasticsearch/logs -v /data/es/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:6.8.7
這里的命令比安裝單節(jié)點(diǎn)少了個(gè)環(huán)境變量-e "discovery.type=single-node "
,運(yùn)行成功后通過head去測試下連接辉阶,如果都連接成功的話就算是成功啦先壕,如果失敗,就自己去看看哪里配置錯(cuò)了哦
本文到此就結(jié)束咯谆甜,有任何疑問歡迎在評論區(qū)發(fā)表