Linux-ElasticSearch-7-3-0叢集部署
前置條件
1、
es
不能使用
root
使用者啟動,是以需要建立一個使用者。
sudo adduser es 建立賬号es
sudo passwd es 建立密碼 密碼是 [email protected]
2、本地的多個es節點之間不能使用相同的
data
和
log
目錄。
3、叢集之間的腦裂問題,叢集自己維護。
注意: 叢集最少有2節點
暫時關閉防火牆
systemctl stop firewalld
永久關閉防火牆
systemctl disable firewalld
使用者切換
su es
es的配置檔案
config/elasticsearch.yml 檔案
cluster.name: search-7.3.2 # 叢集名稱 (多個es之間這個名稱必須一緻,才能實作叢集)
path.data: /home/es/es/data/node-1 # 單機叢集資料存儲位置多節點不能一樣
path.logs: /home/es/es/log/node-1 # 單機叢集日志存儲位置多節點不能一樣
node.name: node-1 # 節點名稱 ->叢集需要不同
node.master: true # true:表示可以被選舉成為master節點.(不用修改)
node.data: true # true: 表示可以存儲資料。 (不用修改)
node.ingest: false # 文檔存入索引之前對文檔進行預處理 (不用修改)
network.host: 0.0.0.0 # 監聽位址,可以寫本地ip,通過此位址可以通路到es (不用修改)
http.port: 9200 # 監聽端口 單機叢集需要不同
transport.port: 9300 # 叢集監聽端口 單機叢集需要不同
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"] # 有資格成為主節點的位址清單
cluster.initial_master_nodes: ["node-1","node-2","node-3"] # 初始的候選master節點清單。必須和node.name的值一緻。
http.cors.enabled: true # true: 表示允許跨域。 (不用修改)
http.cors.allow-origin: "*" #表示支援所有域名 (不用修改)
config/jvm.options JVM的配置
預設是1G
-Xms300m
-Xmx300m
官方建議不要超過實體記憶體的百分之50 最大不要超過30g
啟動ES
進入到es目錄裡然後執行下面指令
前台啟動
./bin/elasticsearch
背景啟動
./bin/elasticsearch -d -p pid
關閉背景啟動的es
pkill -F pid
檢視ES節點狀态
搭建ES中遇到的問題
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決辦法
vi /etc/sysctl.conf
然後在檔案最後添加
vm.max_map_count=655360
然後執行 sysctl -p
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解決辦法
vi /etc/security/limits.conf
然後在檔案最後添加
* soft nofile 300000
* hard nofile 300000
* soft nproc 102400
* soft memlock unlimited
* hard memlock unlimited
master_not_discovered_exception#
主節點指定的名字要保證存在,别指定了不存在的節點名。
單機版ES叢集
最近在看
es
相關的知識,此處簡單記錄一下es叢集的搭建步驟。因為本地機器有限,此處模拟一下在同一台機器上搭建三個節點的叢集
不用你去網上下載下傳了,也不用你去配置了我直接給你配置好了,拿去就能用
7.3.0單機版ES叢集
連結:https://pan.baidu.com/s/10KI3BuqedbhlPRicaQOGCg
提取碼:1234
上傳到linux 上然後
unzip 7.3.0單機版ES叢集.zip
使用root使用者進入7.3.0單機版ES叢集目錄裡 ,給這些目錄加上權限
chown -R es elasticsearch-7.3.0-1
chown -R es elasticsearch-7.3.0-2
chown -R es elasticsearch-7.3.0-3
然後切換到 es 使用者,啟動這三個節點
注意: 我給ES的JVM預設配置的是300M 需要你自己根據業務調整
如果你覺得3個節點不夠那麼你可以把node-1節點複制一份改一改就行
多機版ES叢集
比單機叢集更簡單,就是把節點名稱改改就行了,其他的配置所有節點保持一緻
不用你去網上下載下傳了,也不用你去配置了我直接給你配置好了,拿去就能用
7.3.0多機版ES叢集
連結:https://pan.baidu.com/s/1yaFADoEQnrQKZ95xjvkYrg
提取碼:1234
上傳到linux 上然後
unzip 7.3.0多機版ES叢集.zip
使用root使用者進入7.3.0單機版ES叢集目錄裡 ,給這些目錄加上權限
chown -R es elasticsearch-7.3.0-1
chown -R es elasticsearch-7.3.0-2
chown -R es elasticsearch-7.3.0-3
然後切換到 es 使用者,啟動這三個節點
注意: 我給ES的JVM預設配置的是300M 需要你自己根據業務調整
如果你覺得3個節點不夠那麼你可以把node-1節點複制一份改一改就行
可視化工具
elasticsearch-head
yum -y install git
git clone git://github.com/mobz/elasticsearch-head.git //git下載下傳相關資源
cd elasticsearch-head //進入相關的目錄
npm install
npm run start
然後耐心等待,就可以了。
http://192.168.81.141:9100
kibana (版本必須和ES版本保持一緻) (推薦)
官方位址:https://www.elastic.co/cn/products/kibana
cd /usr/src
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-linux-x86_64.tar.gz
tar zxvf kibana-7.3.0-linux-x86_64.tar.gz
cd kibana-7.3.0-linux-x86_64
cd kibana-7.3.0-linux-x86_64/config
修改kibana.yml配置檔案
server.port: 5601 # 開啟預設端口号
server.host: "192.168.81.142" #寫目前kibana的ip 不然打不開kbana
i18n.locale: "zh-CN" #使用kibana中文
http://192.168.81.143:5601
IK 分詞器
介紹
為什麼要在elasticsearch中要使用ik這樣的中文分詞呢,那是因為es提供的分詞是英文分詞,對于中文的分詞就做的非常不好了,是以我們需要一個中文分詞器來用于搜尋和使用。
支援中文分詞的分詞器有很多,word分詞器、庖丁解牛、盤古
分詞、Ansj分詞等,但我們常用的還是下面要介紹的IK分詞器。
IKAnalyzer是一個開源的,基于java語言開發的輕量級的中文分詞工具包。從2006年12月推出1.0版開始,
IKAnalyzer已經推出 了3個大版本。最初,它是以開源項目Lucene為應用主體的,結合詞典分詞和文法分析算法的
中文分詞元件。新版本的IKAnalyzer3.0則發展為 面向Java的公用分詞元件,獨立于Lucene項目,同時提供了對
Lucene的預設優化實作。
IK分詞器特性如下:
1)采用了特有的“正向疊代最細粒度切分算法“,具有60萬字/秒的高速處理能力。
2)采用了多子處理器分析模 式,支援:英文字母(IP位址、Email、URL)、數字(日期,常用中文數量詞,羅馬數字,科學計數法),中文 詞彙(姓名、地名處理)等分詞處理。
3)對中英聯合支援不是很好,在這方面的處理比較麻煩.需再做一次查詢,同時是支援個人詞條的優化的詞典存儲,更小的記憶體占用。 4)支援使用者詞典擴充定義。 5)針對Lucene全文檢索優 化的查詢分析器IKQueryParser;采用歧義分析算法優化查詢關鍵字的搜尋排列組合,能極大的提高Lucene檢索的 命中率。
反向索引
倒排表以字或詞為關鍵字進行索引,表中關鍵字所對應的記錄表項記錄了出現這個字或詞的所有文檔,一個表項就是一個字表段,它記錄該文檔的ID和字元在該文檔中出現的位置情況。
由于每個字或詞對應的文檔數量在動态變化,是以倒排表的建立和維護都較為複雜,但是在查詢的時候由于可以一次得到查詢關鍵字所對應的所有文檔,是以效率高于正排表。在全文檢索中,檢索的快速響應是一個最為關鍵的性能,而索引建立由于在背景進行,盡管效率相對低一些,但不會影響整個搜尋引擎的效率。
安裝IK分詞器
cd /usr/src/elasticsearch-7.3.0-1/plugins
mkdir analysis-ik
cd analysis-ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip
yum -y install unzip
unzip -o elasticsearch-analysis-ik-7.3.0.zip
然後重新開機 elasticsearch-7.3.0 即可自動加載IK分詞器
當我們看到有這些的資訊 那麼 就表示 成功了
IK分詞器測試
IK提供了兩個分詞算法ik_smart 和 ik_max_word
其中 ik_smart 為最少切分,ik_max_word為最細粒度劃分
我們分别來試一下 :
先建立一個索引
PUT http://192.168.81.140:9200/test/
然後測試索引
POST
http://192.168.81.140:9200/test/_analyze
最少切分
{
"analyzer": "ik_smart",
"text": "我是中國人"
}
結果:
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "中國人",
"start_offset": 2,
"end_offset": 5,
"type": "CN_WORD",
"position": 2
}
]
}
POST
http://192.168.81.140:9200/test/_analyze
最細粒度劃分
{
"analyzer": "ik_max_word",
"text": "我是中國人"
}
結果
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "中國人",
"start_offset": 2,
"end_offset": 5,
"type": "CN_WORD",
"position": 2
},
{
"token": "中國",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 3
},
{
"token": "國人",
"start_offset": 3,
"end_offset": 5,
"type": "CN_WORD",
"position": 4
}
]
}
從上面我們就可以看出來 差別了吧 如果内容較為龐大的情況下不建議使用最細切分那樣會導緻速度非常慢
既然了解了 IK 那麼我們就将IK 映射到Mapping中吧
修改索引映射mapping
重建索引
删除原有blog2索引
使用DELETE請求 http://localhost:9200/blog2
建立blog2索引,此時分詞器使用
ik_max_word
使用PUT請求 http://localhost:9200/blog2
Body
{
"mappings":{
"article":{
"properties":{
"id":{
"type":"long",
"store":true,
"index":false
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"ik_max_word"
},
"content":{
"type":"text",
"store":true,
"index":true,
"analyzer":"ik_max_word"
}
}
}
}
}
建立索引blog2 和表article 以及表結構
elasticsearch-head裡 檢視索引資訊
使用POST請求 http://localhost:9200/blog2/article/1
向blog2索引内article表中添加 文檔id為1 的 一行資料
Body
{
"id":1,
"title":"ElasticSearch是一個基于Lucene的搜尋伺服器",
"content":"它提供了一個分布式多使用者能力的全文搜尋引擎,基于RESTful web接口。Elasticsearch是用Java 開發的,并作為Apache許可條款下的開放源碼釋出,是目前流行的企業級搜尋引擎。設計用于雲計算中,能夠達到實時 搜尋,穩定,可靠,快速,安裝使用友善。"
}
我們使用 最細切分 來看看 切分後的結果 然後在進行 query_string查詢 和 term查詢
http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=ElasticSearch是一個基于Lucene的搜尋伺服器
token "elasticsearch"
token "是"
token "一個"
token "一"
token "個"
token "基于"
token "lucene"
token "的"
token "搜尋"
token "伺服器"
token "服務"
token "器"
上面就是ik 分詞集
我們使用query_String查詢 看看有什麼變化
發送POST請求 http://localhost:9200/blog2/article/_search
Body
{
"query":{
"query_string":{
"default_field":"title",
"query":"搜尋伺服器"
}
}
}
結果 是能查詢到的 預設采用的是 or 比對 在ik分詞集裡 是能比對到的
然後我們在試試 将請求體
搜尋伺服器
字元串修改為
鋼索
,再次查詢 發現并沒有查詢到
因為 在ik分詞集裡沒有 鋼 或者 索 的詞
我們使用 term 查詢 看看有什麼變化
發送POST請求 http://localhost:9200/blog2/article/_search
Body
{
"query":{
"term":{
"title":"搜尋"
}
}
}
結果發現 是能查詢到的 因為在ik分詞集裡是能找到
搜尋
這個詞
點贊 -收藏-關注-便于以後複習和收到最新内容 有其他問題在評論區讨論-或者私信我-收到會在第一時間回複 如有侵權,請私信聯系我 感謝,配合,希望我的努力對你有幫助^_^