當前位置:
首頁 > 最新 > 搭建Elasticsearch 5.4分散式集群階段一

搭建Elasticsearch 5.4分散式集群階段一

一.簡介

ElasticSearch是一個基於Lucene構建的開源,分散式,RESTful搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。支持通過HTTP使用JSON進行數據索引。

我們建立一個網站或應用程序,並要添加搜索功能,令我們受打擊的是:搜索工作是很難的。我們希望我們的搜索解決方案要快,我們希望有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索伺服器始終可用,我們希望能夠一台開始並擴展到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。Elasticsearch旨在解決所有這些問題和更多的。

1.基於Lucene構建ES

怎樣在Lucene之上構建一個分散式、高度伸縮、接近實時的搜索引擎呢?讓我們回顧一下在搜索引擎(基於lucene)伸縮性這條路上都做了那些嘗試,並且elasticsearch是如何嘗試並去解決這些挑戰的。

首先我們了解下最基礎的理論知識building blocks(這些理論基礎是構建分散式近實時搜索引擎的基礎)。接著我們研究一下到底哪種才是最佳的分區策略partitioning(將lucene索引文檔分割到多個分散式的分片中去)。 然後我們同樣需要決定使用哪種分區複製方式replication(複製能夠保證系統的高可用以及提高搜索的吞吐)。最後,我們再看一下事務日誌transaction log(事務日誌在elasticsearch裡面是一個保證數據一致性的非常酷的功能)。

二.ElasticSearch概念1.Cluster(集群)

代表一個集群,集群中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉

產生的,主從節點是對於集群內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何一個節點的通信和與整個es集群通信是等價的。

2.Node(節點)

一個節點是你集群中的一個伺服器,作為集群的一部分,它存儲你的數據,參與集群的索引和搜索功能。和集群類似,一個節點也是由一個名字來標識的,默認情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節點。這個名字對於管理工作來說挺重要的,因為在這個管理過程中,你會去確定網路中的哪些伺服器對應於Elasticsearch 集群中的哪些節點。

一個節點可以通過配置集群名稱的方式來加入一個指定的集群。默認情況下,每個節點都會被安排加入到一個叫做「elasticsearch」的集群中,這意味著,如果你在你的網路中啟動了若干個節點,並假定它們能夠相互發現彼此,它們將會自動地形成並加入到一個叫做「elasticsearch」的集群中。

在一個集群里,只要你想,可以擁有任意多個節點。而且,如果當前你的網路中沒有運行任何Elasticsearch節點,這時啟動一個節點,會默認創建並加入一個叫做「elasticsearch」的集群。

3.index(索引)

一個索引就是一個擁有幾分相似特徵的文檔的集合。比如說,你可以有一個客戶數據的索引,另一個產品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對對應於這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集群中,如果你想,可以定義任意多的索引。索引相當於資料庫

4.Type(類型)

在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區,其語義完全由你來定。通常,會為具有一組共同欄位的文檔定義一個類型。比如說,我們假設你運營一個博客平台並且將你所有的數據存儲到一個索引中。在這個索引中,你可以為用戶數據定義一個類型,為博客數據定義另一個類型,當然,也可以為評論數據定義另一個類型。類型相當於資料庫中的表

5.Document(文檔)

一個文檔是一個可被索引的基礎信息單元。比如,你可以擁有某一個客戶的文檔,某一個產品的一個文檔,當然,也可以擁有某個訂單的一個文檔。文檔以 JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存在的互聯網數據交互格式。

在一個index/type 裡面,只要你想,你可以存儲任意多的文檔。注意,儘管一個文檔,物理上存在於一個索引之中,文檔必須被索引/賦予一個索引的type。文檔相當於表中的一行記錄。

6.Shards(分片)

代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上。構成分散式搜索。分片的數量只能在索引創建前指定,並且索引創建後不能更改。

7.Replicas(副本分片

代表索引副本,es可以設置多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。

總之,每個索引可以被分成多個分片。一個索引也可以被複制 0 次(意思是沒有複製)或多次。一旦複製了,每個索引就有了主分片(作為複製源的原來的分片)和複製分片(主分片的拷貝)之別。分片和複製的數量可以在索引創建的時候指定。在索引創建之後,你可以在任何時候動態地改變複製的數量,但是你事後不能改變分片的數量。默認情況下,Elasticsearch 中的每個索引被分片5個主分片和1個複製,這意味著,如果你的集群中至少有兩個節點,你的索引將會有5個主分片和另外5個複製分片(1個完全拷貝),這樣的話每個索引總共就有10個分片。

GIF

三.集群搭建1.es安裝

1.下載並解壓即可

官網https://github.com/elastic/elasticsearch下載Elasticsearch6.0.tar(版本5.4以上)

在home文件夾下新建es文件夾,把壓縮包放在es文件夾中,命令解壓。

2.進入elasticsearch的bin目錄

3.執行./elasticsearch命令即可運行

4.瀏覽器中運行://ip:9200/如果出現以下畫面表示運行成功

2.es配置

1.以本人為例,在三台機器上安裝了es,來搭建集群

2進入elasticsearch的config目錄,打開並編輯elasticsearch.yml

# ======================== Elasticsearch Configuration =================

# NOTE: Elasticsearch comes with reasonable defaults for most settings.

# Before you set out to tweak and tune the configuration, make sure you

# understand what are you trying to accomplish and the consequences.

# The primary way of configuring a node is via this file. This template lists

# the most important settings you may want to configure for a production cluster.

# Please see the documentation for further information on configuration options:

#

# ---------------------------------- Cluster -----------------------------

# Use a descriptive name for your cluster:

#三台電腦cluster.name:保持一致cluster.name: my-askingdata

# ------------------------------------ Node ------------------------------

# Use a descriptive name for the node:

#三台電腦的node.name不能一樣node.name: node-1

# Add custom attributes to the node:

# node.rack: r1

# ----------------------------------- Paths ------------------------------

# Path to directory where to store the data (separate multiple locations by comma):

# path.data: /path/to/data

# Path to log files:

# path.logs: /path/to/logs

# ----------------------------------- Memory -----------------------------

# Lock the memory on startup:

# bootstrap.mlockall: true

# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory

# available on the system and that the owner of the process is allowed to use this limit.

# Elasticsearch performs poorly when the system is swapping the memory.

# ---------------------------------- Network -----------------------------

# Set the bind address to a specific IP (IPv4 or IPv6):

# ipnetwork.host: 192.168.1.106

# Set a custom port for HTTP:

#埠http.port: 9200

# For more information, see the documentation at:

#

# --------------------------------- Discovery ----------------------------

# Pass an initial list of hosts to perform discovery when new node is started:

# The default list of hosts is ["127.0.0.1", "[::1]"]

#寫入三台電腦的ipdiscovery.zen.ping.unicast.hosts: ["192.168.1.106", "192.168.1.108","192.168.1.109"]

# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):

四.集群管理1.elasticsearch-head插件安裝

elasticsearch-head是一個elasticsearch的集群管理工具,它是完全由html5編寫的獨立網頁程序,你可以通過插件把它集成到es。

安裝

1.在es的plugin目錄下新建head目錄

2.下載head並解壓進plugin/head目錄即可

3.分別啟動三台 機器的es

4. 打開http://192.168.1.106:9200/_plugin/head/

2.elasticsearch-head插件索引的操作

1、索引文檔的創建

將如下一條歌曲信息的數據提交到ES中創建索引:

url:http://127.0.0.1:9200/song001/list001/1

data:

{

"number":32768,

"singer":"楊坤",

"size":"5109132",

"song":"今夜二十歲",

"tag":"中國好聲音",

"timelen":319

}

索引名字是: song001;

索引的類型是: list001;

本記錄的id是:1

返回的信息可以看到創建是成功的,並且版本號是1;ES會對記錄修改進行版本跟蹤,第一次創建記錄為1,同一條記錄每修改一次就追加1。至此一條記錄就提交到ES中建立了索引,注意HTTP的方法是PUT,不要選擇錯了。

2、索引文檔的查詢

根據索引時的ID查詢的文檔的RESTful介面如下

url:http://127.0.0.1:9200/song001/list001/1

HTTP方法採用GET的形式。

3、索引文檔的更新

根據索引時的ID更新的文檔的內容其RESTful介面如下

url:http://127.0.0.1:9200/song001/list001/1

HTTP方法採用PUT的形式。

將歌手名由「楊坤」改成「楊坤獨唱」;

結果中的version欄位已經成了2,因為我們這是是修改,索引版本遞增;created欄位是false,表示這次不是新建而是更新。

更新介面與創建介面完全一樣,ES會查詢記錄是否存在,如果不存在就是創建,存在就是更新操作。

4、索引文檔的刪除

根據索引時的ID更新的文檔的內容其RESTful介面如下

url:http://127.0.0.1:9200/song001/list001/1

HTTP方法採用DELETE的形式。

刪除過後,再通過查詢介面去查詢將得不到結果。

Java社區

本文屬於原創,如有疑問請後台留言,如有轉載請標註原作 者,版權歸本公眾號所有。如果你喜歡我寫的文章請關注 java資源社區,歡迎大家繼續關注本公眾號的技術博文。如果您覺得本文章對你有所幫助的話,不妨點個贊,您的支持就是我堅持原創的動力。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 手集名品學習平台 的精彩文章:

TAG:手集名品學習平台 |