三臺服務器上搭建ElasticSearch,實操冷熱集羣架構

ES集羣理解

三臺服務器上搭建ElasticSearch,實操冷熱集羣架構


ES集羣是一個 P2P類型(使用 gossip 協議)的分佈式系統,除了集羣狀態管理以外,其他所有的請求都可以發送到集 羣內任意一臺節點上,這個節點可以自己找到需要轉發給哪些節點,並且直接跟這些節點通信。

所以,從網絡架構及 服務配置上來說,構建集羣所需要的配置極其簡單。在 Elasticsearch 2.0 之前,無阻礙的網絡下,所有配置了相同 cluster.name 的節點都自動歸屬到一個集羣中。

2.0 版本之後,基於安全的考慮避免開發環境過於隨便造成的麻煩, 從 2.0 版本開始,默認的自動發現方式改爲了單播(unicast)方式。配置裏提供幾臺節點的地址,ES 將其視作 gossip router 角色,藉以完成集羣的發現。由於這只是 ES 內一個很小的功能,所以 gossip router 角色並不需要單獨配 置,每個 ES 節點都可以擔任。

所以,採用單播方式的集羣,各節點都配置相同的幾個節點列表作爲 router 即可。 集羣中節點數量沒有限制,一般大於等於2個節點就可以看做是集羣了。一般處於高性能及高可用方面來考慮一般集 羣中的節點數量都是3個及3個以上。

集羣的相關概念

集羣 cluster

三臺服務器上搭建ElasticSearch,實操冷熱集羣架構


一個集羣就是由一個或多個節點組織在一起,它們共同持有整個的數據,並一起提供索引和搜索功能。一個集羣由一 個唯一的名字標識,這個名字默認就是“elasticsearch”。這個名字是重要的,因爲一個節點只能通過指定某個集羣的 名字,來加入這個集羣

節點 node

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

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

在一個集羣裏,只要你想,可以擁有任意多個節點。而且,如果當前你的網絡中沒有運行任何Elasticsearch節點,這 時啓動一個節點,會默認創建並加入一個叫做“elasticsearch”的集羣。

分片和複製 shards&replicas

一個索引可以存儲超出單個節點硬件限制的大量數據。比如,一個具有10億文檔的索引佔據1TB的磁盤空間,而任一 節點都沒有這樣大的磁盤空間;或者單個節點處理搜索請求,響應太慢。爲了解決這個問題,Elasticsearch提供了將 索引劃分成多份的能力,這些份就叫做分片。當你創建一個索引的時候,你可以指定你想要的分片的數量。每個分片 本身也是一個功能完善並且獨立的“索引”,這個“索引”可以被放置到集羣中的任何節點上。分片很重要,主要有兩方 面的原因: 1)允許你水平分割/擴展你的內容容量。 2)允許你在分片(潛在地,位於多個節點上)之上進行分佈式 的、並行的操作,進而提高性能/吞吐量。

至於一個分片怎樣分佈,它的文檔怎樣聚合回搜索請求,是完全由Elasticsearch管理的,對於作爲用戶的你來說,這 些都是透明的。

在一個網絡/雲的環境裏,失敗隨時都可能發生,在某個分片/節點不知怎麼的就處於離線狀態,或者由於任何原因消失,這種情況下,有一個故障轉移機制是非常有用並且是強烈推薦的。爲此目的,Elasticsearch允許你創建分片的 一份或多份拷貝,這些拷貝叫做複製分片,或者直接叫複製。

複製之所以重要,有兩個主要原因: 在分片/節點失敗的情況下,提供了高可用性。因爲這個原因,注意到複製分片 從不與原/主要(original/primary)分片置於同一節點上是非常重要的。擴展你的搜索量/吞吐量,因爲搜索可以在 所有的複製上並行運行。總之,每個索引可以被分成多個分片。一個索引也可以被複制0次(意思是沒有複製)或多 次。一旦複製了,每個索引就有了主分片(作爲複製源的原來的分片)和複製分片(主分片的拷貝)之別。分片和復 制的數量可以在索引創建的時候指定。在索引創建之後,你可以在任何時候動態地改變複製的數量,但是你事後不能 改變分片的數量。

默認情況下,Elasticsearch中的每個索引被分片5個主分片和1個複製,這意味着,如果你的集羣中至少有兩個節點, 你的索引將會有5個主分片和另外5個複製分片(1個完全拷貝),這樣的話每個索引總共就有10個分片。

集羣的搭建

準備三臺elasticsearch服務器

創建elasticsearch-cluster文件夾,在內部複製三個elasticsearch服務

修改每臺服務器配置

修改elasticsearch-cluster\node*\config\elasticsearch.yml配置文件

node1節點:

#節點1的配置信息:
#集羣名稱,保證唯一
cluster.name: my-elasticsearch
#節點名稱,必須不一樣
node.name: node-1
#必須爲本機的ip地址
network.host: 127.0.0.1
#服務端口號,在同一機器下必須不一樣
http.port: 9201
#集羣間通信端口號,在同一機器下必須不一樣
transport.tcp.port: 9301
#設置集羣自動發現機器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]

node2節點:

#節點2的配置信息:
#集羣名稱,保證唯一
cluster.name: my-elasticsearch
#節點名稱,必須不一樣
node.name: node-2
#必須爲本機的ip地址
network.host: 127.0.0.1
#服務端口號,在同一機器下必須不一樣
http.port: 9202
#集羣間通信端口號,在同一機器下必須不一樣
transport.tcp.port: 9302
#設置集羣自動發現機器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]

node3節點:

#節點3的配置信息:
#集羣名稱,保證唯一
cluster.name: my-elasticsearch
#節點名稱,必須不一樣
node.name: node-3
#必須爲本機的ip地址
network.host: 127.0.0.1
#服務端口號,在同一機器下必須不一樣
http.port: 9203
#集羣間通信端口號,在同一機器下必須不一樣
transport.tcp.port: 9303
#設置集羣自動發現機器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]

啓動各個節點服務器

雙擊elasticsearch-cluster\node*\bin\elasticsearch.bat

啓動節點1:

image.png


啓動節點2:

image.png


啓動節點3

image.png


集羣測試

添加索引和映射

PUT localhost:9200/blog1
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "long",
"index": false,
"store": true
},
"title": {
"type": "text",
"store": true,
"index": true,
"analyzer": "standard"
},
"content": {
"type": "text",
"store": true,
"index": true,
"analyzer": "standard"
}
}
}
}
}

添加文檔

POST localhost:9200/blog/article/1
{
              "id":1,
              "title":"ElasticSearch是一個基於Lucene的搜索服務器",
               "content":"它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。"
}

使用elasticsearch-header查看集羣情況

三臺服務器上搭建ElasticSearch,實操冷熱集羣架構


本文如有什麼不對或者需要關於更多elasticsearch方面的知識可以關注公衆號:程序零世界


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章