1. 程式人生 > >ElasticSearch 6 叢集搭建

ElasticSearch 6 叢集搭建

一、準備環境配置

下載地址:

1、java環境配置

  • 方法一:軟鏈Java到系統path環境
tar zxvf jdk-8u102-linux-x64.tar.gz -C /data/server
ln -s /data/server/jdk1.8.0_102/bin/java* /usr/bin/
  • 方法二:/etc/profile 或es啟動程式中指定
vim /etc/profile # 或 vim ./bin/elasticsearch 
export JAVA_HOME=/data/server/jdk1.8.0_102

# java 配置只啟用ipv4 的埠,ipv6連線可能會有問題
export
_JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"

2、系統環境配置

  • 提高相關配置限制
    可能會遇到的報錯資訊:
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

先配置好相關配置,解決:

vim /etc/sysctl.conf

新增如下配置,sysctl -p 配置生效

vm.max_map_count=655360

vim /etc/security/limits.conf

*       soft    nofile          65536
*       hard    nofile          65536

vim /etc/security/limits.d/90-nproc.conf 如果檔案存在,這裡也需要修改

* soft nofile 65536
* hard nofile 65536

二、elasticsearch 叢集搭建

1、基本需求

1,每個伺服器3個ES節點,每個節點JVM記憶體分配25G,掛載到四個不同的路徑;
2,每個ES節點多個數據節點;master節點10G
3,ES叢集間副本不在同一個伺服器上;
4,ES叢集任何一個節點故障不影響叢集;
5,ES叢集任何一個伺服器故障不影響叢集;
6,主節點和資料節點進行區分;

由於線上伺服器記憶體大都128G以上,而es節點建議是jvm記憶體不超過32G,資源合理利用考慮,一個伺服器三個ES節點,同時保證一個ES節點的副本不能在同一個伺服器上。不然一個伺服器宕機,es叢集受影響。

2、安裝配置

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
tar zxvf elasticsearch-6.2.2.tar.gz -C /data/server

下面的配置根據個人具體情況配置
- 每個伺服器3個ES節點,每個節點JVM記憶體分配25G

一個伺服器多個節點:將elasticsearch-6.2.2資料夾複製幾份,將各個節點的值設定不同

每個節點JVM記憶體分配25G

vim elasticsearch-6.2.2/config/jvm.options  # 修改如下配置
# 最多不要超過32G
-Xms25g
-Xmx25g

這裡踩過es的一個坑,需要修改jvm.options配置,不然es出問題是會在啟動使用者宿主目錄下產生大量日誌佔滿磁碟

vim elasticsearch-6.2.2/config/jvm.options
# -XX:+HeapDumpOnOutOfMemoryError  # 註釋掉這一行
-XX:HeapDumpPath=/data/HeapDumpPath  # 修改heapDump日誌路徑到容量充裕的分割槽

配置檔案 elasticsearch.yml 如下:

grep -v "^#" elasticsearch-6.2.2/config/elasticsearch.yml |grep -v "^$"

cluster.name: logs_production    # 叢集名稱,同名稱為叢集節點
node.name: node102_01            # 節點名稱,預設會隨機取名稱
node.master: true                # 是否為master節點
node.data: true                 # 是否為資料節點
path.data: /data/01,/data/02     # 如果在path.data中寫多個目錄用“,”分隔,功能類似於raid 0,而不是做備份
network.host: 10.100.0.102      # 監聽主機
http.port: 9201                  # 監聽埠
transport.tcp.port: 9301         # 傳輸埠
transport.tcp.compress: true
# 設定叢集中master節點的初始列表,可以通過這些節點來自動發現新加入叢集的節點
discovery.zen.ping.unicast.hosts: ["10.100.0.101:9301", "10.100.0.102:9301","10.100.0.103:9301"]
cluster.routing.allocation.same_shard.host: true

新增優化配置,只在master節點配置即可

discovery.zen.ping_timeout: 200s
discovery.zen.fd.ping_timeout: 200s
discovery.zen.fd.ping_interval: 30s
discovery.zen.fd.ping_retries: 5

在虛擬雲主機上可能出現的問題:
ERROR: [1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解決方法:在es配置中加入下面命令即可

bootstrap.system_call_filter: false

==啟動,elasticsearch 不允許root啟動,需要配置普通使用者啟動。==
elasticsearch目錄以及path.data授權給普通使用者。

useradd es
su - es -c "/data/server/elasticsearch-6.2.2/bin/elasticsearch -d"
  • 一個伺服器多個ES節點,同時保證一個ES節點的副本不能在同一個伺服器上

cluster.routing.allocation.same_shard.host

允許執行檢查以防止在單個主機上根據主機名和主機地址分配同一分片的多個例項。預設為false,意味著預設情況下不執行檢查。此設定僅適用於在同一臺機器上啟動多個節點的情況。

  • es 2 版本支援,es 5版本之後不支援的 配置項

如果5之後版本配置,官方建議生成索引時再設定

索引分片數 index.number_of_shards: 55xx版本以後不支援index)
索引副本數  index.number_of_replicas: 15xx版本以後不支援index
  • 腦裂問題

假設使用兩個節點, 啟動後, 叢集會選舉一個master, 一切ok. 但是如果存在網路問題或者某個節點無響應(負載過高), 就會認為對方dead了, 然後兩個節點自動選舉為master, 在後續建索引的時候造成資料不一致.
兩個節點防腦裂的配置, minimum_master_nodes決定了選主需要的最少節點數, N/2+1, 兩個節點即2
discovery.zen.minimum_master_nodes: 2
但是, 此時一個節點掛了, 則整個叢集掛了(無法選舉主節點了)

三、安裝外掛:

1、安裝外掛 cerebro (head,kopf外掛 新版本已不支援)

unzip cerebro-0.7.2.zip
cd cerebro-0.7.2/
./bin/cerebro -Dhttp.port=9205 -Dhttp.address=10.100.0.104

2、安裝監控報警外掛sentinl-v5.2.2.zip

# 外掛安裝:
/data/server/kibana-5.2.2/bin/kibana-plugin install