前言:由於考慮到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。