elasticsearch集羣(多機版)

前言:由於考慮到elasticsearch單節點的不穩定性和服務的高可用性,隨着用戶量和數據量的增加,elasticsearch需要搭建集羣,集羣的優點這裏就不贅述了。

一、準備環境

1.192.168.11.24 和192.168.11.25(需要安裝java環境)

2.elastisearch安裝包:elasticsearch-6.2.2.tar.gz,

3.兩個服務器上需要創建es權限的非root用戶,以上不會的可以參考我之前的博客:centos服務器配置elasticsearch

在服務器上將安裝包拷貝出來一份,我的es安裝目錄在/usr/local下,所以我在該目錄下建立一個slave目錄用於存放需要集羣的es。

二、搭建集羣環境

1.集羣概況:

服務器ip 節點名稱 是否爲主節點 是否爲數據節點
192.168.11.24 master
192.168.11.25 slave-1
192.168.11.25 slave-2

 

2.配置主節點

##集羣名稱,每個節點配置成一樣的名稱才能形成正確的集羣
cluster.name: htflsys
##節點名稱,每個節點配置不同名稱
node.name: master
##是否主節點
node.master: true       
##是否數據節點        
node.data: true       
##單機最大節點數          
node.max_local_storage_nodes: 3
##索引數據的存儲路徑(可自定義,我這裏不設置就默認安裝路徑)
#path.data: /usr/local/es/data
##日誌文件的存儲路徑(可自定義,我這裏不設置就默認安裝路徑)
#path.logs: /usr/local/es/logs
##啓動時鎖定內存,設置爲true來鎖住內存。因爲內存交換到磁盤對服務器性能來說是致命的,當jvm開始swapping時es的效率會降低,所以要保證它不swap
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
##綁定的ip地址
network.host: 192.168.11.24
##設置對外服務的http端口,默認爲9200
http.port: 9200
## 設置節點間交互的tcp端口,默認是9300 
transport.tcp.port: 9300
transport.tcp.compress: true
## 設置集羣中節點的初始列表,可以通過這些節點來自動發現新加入集羣的節點
discovery.zen.ping.unicast.hosts: ["192.168.11.24:9300","192.168.11.25:9300","192.168.11.25:9301"]
##防止腦裂現象,如果沒有這種設置,遭受網絡故障的集羣就有可能將集羣分成兩個獨立的集羣 - 這將導致數據丟失(單個master無需設置,如果是3個master需設置成2)(N/2)+1
#discovery.zen.minimum_master_nodes: 2
#在刪除索引時,是否需要明確指定名稱,該值爲false時,將可以通過正則或_all進行所以 刪除 
#action.destructive_requires_name: true
##防止同一個shard的主副本存在同一個物理機上
cluster.routing.allocation.same_shard.host: true

3.重啓成功節點信息截圖(由於我原始數據快照問題出現Unassigned請忽略):

4.配置子節點

需要修改的參數有:node-name、node-master、network.host、http.port、transport.tcp.port

子節點1配置如下:

##集羣名稱,每個節點配置成一樣的名稱才能形成正確的集羣
cluster.name: htflsys
##節點名稱,每個節點配置不同名稱
node.name: slave-node1
##是否主節點
node.master: false       
##是否數據節點        
node.data: true       
##單機最大節點數          
node.max_local_storage_nodes: 3
##索引數據的存儲路徑(可自定義,我這裏不設置就默認安裝路徑)
#path.data: /usr/local/es/data
##日誌文件的存儲路徑(可自定義,我這裏不設置就默認安裝路徑)
#path.logs: /usr/local/es/logs
##啓動時鎖定內存,設置爲true來鎖住內存。因爲內存交換到磁盤對服務器性能來說是致命的,當jvm開始swapping時es的效率會降低,所以要保證它不swap
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
##綁定的ip地址
network.host: 192.168.11.25
##設置對外服務的http端口,默認爲9200
http.port: 9200
## 設置節點間交互的tcp端口,默認是9300 
transport.tcp.port: 9300
transport.tcp.compress: true
## 設置集羣中節點的初始列表,可以通過這些節點來自動發現新加入集羣的節點
discovery.zen.ping.unicast.hosts: ["192.168.11.24:9300","192.168.11.25:9300","192.168.11.25:9301"]
##防止腦裂現象,如果沒有這種設置,遭受網絡故障的集羣就有可能將集羣分成兩個獨立的集羣 - 這將導致數據丟失(單個master無需設置,如果是3個master需設置成2)(N/2)+1
#discovery.zen.minimum_master_nodes: 2
#在刪除索引時,是否需要明確指定名稱,該值爲false時,將可以通過正則或_all進行所以 刪除 
#action.destructive_requires_name: true
##防止同一個shard的主副本存在同一個物理機上
cluster.routing.allocation.same_shard.host: true

子節點2配置如下: 

 

##集羣名稱,每個節點配置成一樣的名稱才能形成正確的集羣
cluster.name: htflsys
##節點名稱,每個節點配置不同名稱
node.name: slave-node2
##是否主節點
node.master: false       
##是否數據節點        
node.data: true       
##單機最大節點數          
node.max_local_storage_nodes: 3
##索引數據的存儲路徑(可自定義,我這裏不設置就默認安裝路徑)
#path.data: /usr/local/es/data
##日誌文件的存儲路徑(可自定義,我這裏不設置就默認安裝路徑)
#path.logs: /usr/local/es/logs
##啓動時鎖定內存,設置爲true來鎖住內存。因爲內存交換到磁盤對服務器性能來說是致命的,當jvm開始swapping時es的效率會降低,所以要保證它不swap
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
##綁定的ip地址
network.host: 192.168.11.25
##設置對外服務的http端口,默認爲9200
http.port: 9201
## 設置節點間交互的tcp端口,默認是9300
transport.tcp.port: 9301
transport.tcp.compress: true
## 設置集羣中節點的初始列表,可以通過這些節點來自動發現新加入集羣的節點
discovery.zen.ping.unicast.hosts: ["192.168.11.24:9300","192.168.11.25:9300","192.168.11.25:9301"]
##防止腦裂現象,如果沒有這種設置,遭受網絡故障的集羣就有可能將集羣分成兩個獨立的集羣 - 這將導致數據丟失(單個master無需設置,如果是3個master需設置成2)(N/2)+1
#discovery.zen.minimum_master_nodes: 2
#在刪除索引時,是否需要明確指定名稱,該值爲false時,將可以通過正則或_all進行所以 刪除 
#action.destructive_requires_name: true
##防止同一個shard的主副本存在同一個物理機上
cluster.routing.allocation.same_shard.host: true

5.配置子節點

 從192.168.11.24上將安裝包上傳值192.168.11.25服務器

scp elasticsearch-6.2.2.tar.gz [email protected]:/usr/local/

在usr/local下創建目錄,將安裝包複製進去,分別解壓配置,安裝,啓動:

/usr/local/elasticsearch/salve1
/usr/local/elasticsearch/salve2

備註:從節點配置過程需要賦予elk權限:

groupadd elk # 創建用戶組elk
useradd elk -g elk -p 111111 # 創建新用戶elk,-g elk 設置其用戶組爲 elk,-p 111111 設置其密碼6個1
chown -R elk:elk /usr/local/elasticsearch # 更改 /usr/local/elasticsearch 文件夾及內部文件的所屬用戶及組爲 elk:elkelasticsearch
chmod -R 777 /usr/local/elasticsearch  # 啓動報日誌無權限需賦予文件夾可讀寫權限

配置成功截圖:

5. ElasticSearch監控工具 - cerebro

選擇的原因是:cerebro的使用特別簡單,頁面漂亮,支持高版本

安裝過程:

--下載安裝包(安裝包下載耗時非常久,如果需要我的安裝包可以關注公衆號FOSSspace,聯繫我)

wget https://github.com/lmenezes/cerebro/releases/download/v0.8.3/cerebro-0.8.3.tgz

--解壓安裝到安裝目錄(我習慣和es同級/usr/local)

tar xzf cerebro-0.8.3.tgz

 --指定端口啓動(默認是9000)

./cerebro -Dhttp.port=8888

後臺運行:

nohup /usr/local/cerebro-0.8.3/bin/cerebro -Dhttp.port=8888 &

 

 --配置服務器(選配)

經常使用相同的es地址,可在conf/application.conf中配置好:

hosts = [
  {
    host = "http://localhost:9200"
    name = "master"
  },
  # Example of host with authentication
  #{
  #  host = "http://some-authenticated-host:9200"
  #  name = "Secured Cluster"
  #  auth = {
  #    username = "username"
  #    password = "secret-password"
  #  }
  #}
]

--使用

瀏覽器打開連接http://192.168.11.24:8888

 

6.需要注意的!!

 由於master上的product索引安裝了ik分詞器插件,所以商品數據無法分片到從節點,從節點也需要單獨安裝ik分詞器。

安裝方法:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.2/elasticsearch-analysis-ik-6.2.2.zip

安裝完一定要重啓,觀察啓動項是否有分詞器,血的教訓!!!!!!!! 

總結:

1.如果是單機多節點,只是提高了ES服務器cpu的利用率,當服務器出現問題之後,整個集羣還是不能正常使用。

2.配置elasticsearch.yml文件的時候我的node.master屬性是指定死的,所以比較依賴master服務,如果master服務掛掉的話,整個服務也會掛掉,解決方案是在該服務器上創建多個master,如果master服務器掛掉,服務仍然會掛掉,所以最終解決方案可以是在兩臺服務器上創建master。如果使用node.master屬性的默認值,如果指定的master掛掉了,整個集羣可以正常使用,但是master節點就依賴誰先啓動誰就是master。

該博客的完成參考了:https://blog.csdn.net/tyrroo/article/details/85775898?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 

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