目錄
Elasticseach集羣簡介
Elasticseach集羣是一個P2P類型(使用gossip協議)的分佈式系統,除了集羣狀態管理以外,其他所有的請求都可以發送到集羣內任意一臺節點上,這個節點可以找到需要轉發給哪些節點,並且直接跟這些節點通信。所以,從網絡架構及服務配置上來說,構建集羣所需要的配置及其簡單。
在Elasticseach2.0之前,無阻礙的網絡下,所有配置了相同cluster.name的節點都自動歸屬到一個集羣中。自2.0版本之後,基於安全的考慮避免開發環境過於隨便造成的麻煩,從2.0版本開始,默認的自動發現方式改爲了單播(unicast)方式。配置裏提供幾臺節點的地址,ES將其視作gossip router角色,藉以完成集羣的發現,由於這只是ES內一個很小的功能,所以goosip router角色並不需要單獨配置,每個ES節點都可以擔任。所以,採用單播方式的集羣,各節點配置相同的幾個節點列表作爲router即可。
集羣中節點數量沒有限制,大於等於2個節點就可以看做是集羣了。一般出於高性能及高可用方面來考慮集羣中節點數量都是3個以上。
集羣的相關概念
集羣cluster
一個集羣是由一個或多個節點組織在一起,他們共同持有整個的數據,並一起提供索引和搜索服務。一個集羣由一個唯一的名字表標識,默認是Elasticseach。這個名字是很重要的,因爲一個節點只能通過指定某個集羣的名字倆加入這個集羣。
節點node
一個節點是集羣中的一個服務,作爲集羣的一部分,它存儲數據,參與集羣的索引和搜索功能。和集羣類似,一個節點也是由一個名字來標識的。這個名字對於管理工作來說挺重要的,因爲在這個管理過程中,你會去確定網絡中的哪些服務對應於Elasticseach集羣中的哪些節點。
一個節點可以通過配置集羣名稱的方式來加入一個指定的集羣。默認情況下,每個節點都會被安排加入到一個叫做Elasticseach的集羣中,這就意味着,如果你在網絡中啓動了若干個節點,並假定它們能夠互相發現彼此,它們將會自動地形成並加入到一個叫做Elasticseach的集羣中。在一個集羣裏,只要你想,可以擁有任意多個節點。
分片和複製
高性能,高可用
爲了解決索引佔用空間過大(1TB以上)這個問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當你創建一個索引的時候,你可以指定你想要的分片的數量
爲了提高分片高可用,Elasticsearch允許創建分片的一份或多份拷貝,這些拷貝叫做複製分片,或者直接叫複製。
默認情況下,Elasticsearch中的每個索引被分片5個主分片和1個複製,這意味着,如果你的集羣中至少有兩個節點,你的索引將會有5個主分片和另外5個複製分片(1個完全拷貝),這樣的話每個索引總共就有10個分片
Elasticseach集羣的搭建
需要準備三臺Elasticseach服務器,因爲設備限制,我們都在本地創建。
修改每臺服務器配置
修改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"]
啓動三個Elasticseach服務,並開始配置索引和映射,在任一臺服務上添加都可以,其他幾臺會自動檢測到
添加索引和映射
請求方式:PUT
請求地址:http://localhost:9201/blog1
請求體
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "long",
"store": true,
"index":"not_analyzed"
},
"title": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"standard"
},
"content": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"standard"
}
}
}
}
}
添加文檔
請求地址:POST
請求地址:http://localhost:9201/blog1/article/1
請求體
{
"id":1,
"title":"Elasticsearch是一個基於Lucene的搜索服務器",
"content":"它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。"
}
使用Elasticseach查看集羣情況
當任一臺服務壞的後,其他兩臺仍能維持服務不斷。
至此,集羣搭建完成。
總結
Elasticseach的集羣搭建還算容易,但是作用卻很明顯。
能力尚淺,有待進步,如有不足,不吝賜教!