安裝
elasticsearch單機(jī)版安裝
#創(chuàng)建elsearch用戶酱鸭,Elasticsearch不支持root用戶運(yùn)行
useradd elsearch
#解壓安裝包
tar -xvf elasticsearch-6.5.4.tar.gz -C /es/
#修改配置文件
vim conf/elasticsearch.yml
network.host: 172.16.55.185 #綁定的地址
#說(shuō)明:在Elasticsearch中如果,network.host不是localhost或者127.0.0.1的話哼勇,就會(huì)認(rèn)為是生產(chǎn)環(huán)
境蛙酪,會(huì)對(duì)環(huán)境的要求比較高,我們的測(cè)試環(huán)境不一定能夠滿足,一般情況下需要修改2處配置咪惠,如下:
#1:修改jvm啟動(dòng)參數(shù)
vim conf/jvm.options
-Xms128m #根據(jù)自己機(jī)器情況修改
-Xmx128m
#2:?jiǎn)蝹€(gè)進(jìn)程中的最大線程數(shù)
vim /etc/sysctl.conf
vm.max_map_count=655360
#啟動(dòng)ES服務(wù)
su - elsearch
cd bin
./elasticsearch 或 ./elasticsearch -d #后臺(tái)系統(tǒng)
# curl -X "GET" "http://localhost:9200"進(jìn)行測(cè)試,看到如下信息淋淀,就說(shuō)明ES啟動(dòng)成功了
{
"name" : "7ss4V6j",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "HTI7KMajQ6qtzXippnKSUw",
"version" : {
"number" : "6.5.4",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "d2ef93d",
"build_date" : "2018-12-17T21:17:40.758843Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
docker版本安裝
#拉取鏡像
docker pull elasticsearch:6.5.4
#創(chuàng)建容器
docker create --name elasticsearch --net host -e "discovery.type=single-node" -e "network.host=172.18.0.1" elasticsearch:6.5.4
#啟動(dòng)
docker start elasticsearch
#查看日志
docker logs elasticsearch
elasticsearch-head 插件工具安裝
- 源碼安裝遥昧,通過(guò)npm run start啟動(dòng)(不推薦)
- 通過(guò)docker安裝(推薦)
- 通過(guò)chrome插件安裝(推薦)
- 通過(guò)ES的plugin方式安裝(不推薦)
通過(guò)docker安裝
#拉取鏡像
docker pull mobz/elasticsearch-head:5
#創(chuàng)建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
#啟動(dòng)容器
docker start elasticsearch-head
由于前后端分離開(kāi)發(fā),所以會(huì)存在跨域問(wèn)題,需要在服務(wù)端做CORS的配置炭臭,如下:
vim elasticsearch.ymlhttp.cors.enabled: true
http.cors.allow-origin: "*"
chrome插件方式安裝
打開(kāi)chrome的應(yīng)用商店永脓,即可安裝 安裝鏈接
基本概念
索引
- 索引(index)是Elasticsearch對(duì)邏輯數(shù)據(jù)的邏輯存儲(chǔ),所以它可以分為更小的部分鞋仍。
- 可以把索引看成關(guān)系型數(shù)據(jù)庫(kù)的表常摧,索引的結(jié)構(gòu)是為快速有效的全文索引準(zhǔn)備的,特別是它不存儲(chǔ)原始值威创。
- 可以把Elasticsearch的索引看成MongoDB里的一個(gè)集合落午。
- Elasticsearch可以把索引存放在一臺(tái)機(jī)器或者分散在多臺(tái)服務(wù)器上,每個(gè)索引有一或多個(gè)分片(shard)肚豺,每個(gè)分片可以有多個(gè)副本(replica)溃斋。
文檔
- 存儲(chǔ)在Elasticsearch中的主要實(shí)體叫文檔(document)。用關(guān)系型數(shù)據(jù)庫(kù)來(lái)類比的話吸申,一個(gè)文檔相當(dāng)于數(shù)據(jù)庫(kù)表中的一行記錄梗劫。
- Elasticsearch和MongoDB中的文檔類似,都可以有不同的結(jié)構(gòu)呛谜,但Elasticsearch的文檔中在跳,相同字段必須有相同類型。
- 文檔由多個(gè)字段組成隐岛,每個(gè)字段可能多次出現(xiàn)在一個(gè)文檔里猫妙,這樣的字段叫多值字段(multivalued)。
每個(gè)字段的類型聚凹,可以是文本割坠、數(shù)值、日期等妒牙。字段類型也可以是復(fù)雜類型彼哼,一個(gè)字段包含其他子文檔或者
數(shù)組。
映射
- 所有文檔寫進(jìn)索引之前都會(huì)先進(jìn)行分析湘今,如何將輸入的文本分割為詞條敢朱、哪些詞條又會(huì)被過(guò)濾,這種行為叫
做映射(mapping)。一般由用戶自己定義規(guī)則。
文檔類型
- 在Elasticsearch中运挫,一個(gè)索引對(duì)象可以存儲(chǔ)很多不同用途的對(duì)象。例如蚓哩,一個(gè)博客應(yīng)用程序可以保存文章和評(píng)論。
- 每個(gè)文檔可以有不同的結(jié)構(gòu)上渴。
- 不同的文檔類型不能為相同的屬性設(shè)置不同的類型岸梨。例如喜颁,在同一索引中的所有文檔類型中,一個(gè)叫title的字段必須具有相同的類型曹阔。
elasticsearch 集群搭建
elasticsearch的集群是由多個(gè)節(jié)點(diǎn)組成的半开,通過(guò)cluster.name設(shè)置集群名稱,并且用于區(qū)分其他的集群赃份,每個(gè)節(jié)點(diǎn)通過(guò)node.name指定節(jié)點(diǎn)的名稱稿茉。
在elasticsearch中,節(jié)點(diǎn)的主要類型有4中:
- master節(jié)點(diǎn)
- 配置文件中node.master屬性為true(默認(rèn)為true)芥炭,就有資格被選為master節(jié)點(diǎn)。
- master節(jié)點(diǎn)用于控制整個(gè)集群的操作恃慧,比如創(chuàng)建或刪除索引园蝠,管理其他非master節(jié)點(diǎn)。
- data節(jié)點(diǎn)
- 配置文件中node.data屬性為true(默認(rèn)為true)痢士,就有資格被設(shè)置成data節(jié)點(diǎn)
- data節(jié)點(diǎn)主要用于執(zhí)行數(shù)據(jù)相關(guān)的操作彪薛,比如文檔的CRUD。
- 客戶端節(jié)點(diǎn)
- 配置文件中node.master屬性和node.data屬性均為false
- 該節(jié)點(diǎn)不能作為master節(jié)點(diǎn)怠蹂,也不能作為data節(jié)點(diǎn)善延。
- 可以作為客戶端節(jié)點(diǎn),用于響應(yīng)用戶的請(qǐng)求城侧,把請(qǐng)求轉(zhuǎn)發(fā)到其他節(jié)點(diǎn)
- 部落節(jié)點(diǎn)
- 當(dāng)一個(gè)節(jié)點(diǎn)配置tribe.*的時(shí)候易遣,它是一個(gè)特殊的客戶端,它可以連接多個(gè)集群嫌佑,在所有連接的集群上執(zhí)行搜索和其他操作豆茫。
使用docker搭建集群:
mkdir /home/es-cluster
cd /home/es-cluster
mkdir node01
mkdir node02
#復(fù)制安裝目錄下的elasticsearch.yml、jvm.option文件屋摇,作如下修改:
# node01的配置
cluster.name: es-cluster
node.name: node01
node.master: true
node.data: true
network.host: 172.18.0.1
discovery.zen.ping.unicast.hosts: ["172.18.0.1"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
#node02的配置:
cluster.name: es-itcast-cluster
node.name: node02
node.master: false
node.data: true
network.host: 172.18.0.1
http.port: 9201
discovery.zen.ping.unicast.hosts: ["172.18.0.1"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
#創(chuàng)建容器
docker create --name es-node01 --net host -v /home/es-cluster/node01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es-cluster/node01/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /home/es-cluster/node01/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
docker create --name es-node02 --net host -v /home/es-cluster/node02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es-cluster/node02/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /home/es-cluster/node02/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
#啟動(dòng)容器
docker start es-node01 && docker logs -f es-node01
docker start es-node02 && docker logs -f es-node02
#提示:?jiǎn)?dòng)時(shí)會(huì)報(bào)文件無(wú)權(quán)限操作的錯(cuò)誤揩魂,需要對(duì)node01和node02進(jìn)行chmod 777 的操作
sudo chmod 777 node01 -R
#啟動(dòng)報(bào)錯(cuò): “max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]”, 設(shè)置max_map_count值(Linux)
sudo sysctl -w vm.max_map_count=262144
故障測(cè)試
為了測(cè)試故障轉(zhuǎn)移炮温,需要再向集群中添加一個(gè)節(jié)點(diǎn)火脉,并且將所有節(jié)點(diǎn)的node.master設(shè)置為true。
docker create --name es-node03 --net host -v /home/es-cluster/node03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es-cluster/node03/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /home/es-cluster/node03/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
docker stop es-node01 es-node02
docker start es-node01 es-node02 es-node03
安裝IK分詞器
cd /home/es-cluster/ik
#將IK的zip壓縮包解壓到該目錄
#停止柒啤、刪除現(xiàn)有容器
docker stop es-node01 es-node02 es-node03
docker rm es-node01 es-node02 es-node03
#重新創(chuàng)建容器倦挂,注意ik目錄的掛載
docker create --name es-node01 --net host -v /home/es-cluster/node01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es-cluster/node01/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /home/es-cluster/ik:/usr/share/elasticsearch/plugins/ik -v /home/es-cluster/node01/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
docker create --name es-node02 --net host -v /home/es-cluster/node02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es-cluster/node02/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /home/es-cluster/ik:/usr/share/elasticsearch/plugins/ik -v /home/es-cluster/node02/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
docker create --name es-node03 --net host -v /home/es-cluster/node03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es-cluster/node03/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /home/es-cluster/ik:/usr/share/elasticsearch/plugins/ik -v /home/es-cluster/node03/data:/usr/share/elasticsearch/data elasticsearch:6.5.4
RESTful API
待完善......