天天看點

Linux-ElasticSearch-7-3-0叢集部署Linux-ElasticSearch-7-3-0叢集部署

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裡 檢視索引資訊

Linux-ElasticSearch-7-3-0叢集部署Linux-ElasticSearch-7-3-0叢集部署

使用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分詞集裡是能找到

搜尋

這個詞

點贊 -收藏-關注-便于以後複習和收到最新内容 有其他問題在評論區讨論-或者私信我-收到會在第一時間回複 如有侵權,請私信聯系我 感謝,配合,希望我的努力對你有幫助^_^