ElasticSearch 叢集
阿新 • • 發佈:2020-08-17
1.ElasticSearch 叢集相關概念
1.ES叢集顏色狀態
①. — 紅色:資料都不完整
②. — 黃色:資料完整,但是副本有問題
③. — 綠色:資料和副本全都沒有問題
2.ES 叢集節點型別
①. — 主節點:負責排程分配資料
②. — 資料節點:處理分配到自己的資料
3.ES 叢集分片型別
①. — 主分片:儲存資料,負責讀寫資料
②. — 副本分片:主分片的備份
4.ES 叢集安全保障
①. — 資料會自動分配到多個節點
②. — 如果主分片所在節點掛掉,副本節點的分片會自動升為主分片
③. — 如果主節點掛了,資料節點會自動提升為主節點
2.ES 叢集配置注意事項
1.叢集節點的配置,不需要將所有節點的 IP 都寫入配置檔案,只需要寫本機 IP 和叢集中任意一臺機器的 IP 即可:
# 修改 /etc/elasticsearch/elasticsearch.yml 配置檔案 122 配置: discovery.zen.ping.unicast.hosts: ["10.0.0.121", "10.0.0.122"] 123 配置: discovery.zen.ping.unicast.hosts: ["10.0.0.121", "10.0.0.123"] xxx 配置: discovery.zen.ping.unicast.hosts: ["10.0.0.121", "10.0.0.xxx"]
2.— 叢集選舉節點配置數量,一定是 N(叢集節點總數)/2+1:
# 修改 /etc/elasticsearch/elasticsearch.yml 配置檔案,當前叢集節點總數 N = 3
discovery.zen.minimum_master_nodes: 2
3.ES 預設 5 個分片 1 個副本,索引建立以後,分片數量不得修改,副本數可以修改
# ======= 配置檔案 ======= # # 修改 /etc/elasticsearch/elasticsearch.yml 配置引數 # 設定索引的分片數 , 預設為 5 index.number_of_shards: 5 # 設定索引的副本數 , 預設為 1 index.number_of_replicas: 1
4.資料分配時,分片顏色
# 紫色:資料正在遷移(擴充套件節點時會遇到)
# 黃色:資料正在複製(節點宕機,其他節點需要補全分片副本)
5.當叢集共有三個節點時,根據配置的分片副本數,可發生的故障:
1)三個節點,沒有副本時,一臺機器都不能壞
2)三個節點,一個副本時,可以壞兩臺,但是隻能一臺一臺壞(要時間複製生成新的副本)
3)三個節點,兩個副本時,可以壞兩臺(一起壞)
3.ES 叢集相關命令
# ======= ES 叢集狀態 ======= #
# 1.檢視主節點
GET _cat/master
# 2.檢視叢集健康狀態
GET _cat/health
# 3.檢視索引
GET _cat/indices
# 4.檢視所有節點
GET _cat/nodes
# 5.檢視分片
GET _cat/shards
# 一般可以通過以下兩個命令監控叢集的健康狀態,兩者有一個發變化,說明叢集發生故障
GET _cat/health
GET _cat/nodes
# 實際上 Kibana 會內建 X-Pack 軟體,監控叢集的健康狀態
4.ElasticSearch 叢集配置修改
1.配置分片數 & 副本數
# ES 預設 5 個分片 1 個副本,索引建立以後,分片數量不得修改,副本數可以修改
# ======= 配置檔案 ======= #
# 修改 /etc/elasticsearch/elasticsearch.yml 配置引數
# 設定索引的分片數 , 預設為 5
index.number_of_shards: 5
# 設定索引的副本數 , 預設為 1
index.number_of_replicas: 1
2.修改指定索引副本數
PUT /index/_settings
{
"number_of_replicas": 2
}
3.修改所有索引副本數
PUT _all/_settings
{
"number_of_replicas": 2
}
4.建立索引時指定分片數 & 副本數
PUT /testone
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
5.注意,分片數不是越多越好:
1.分片數不是越多越好,會佔用資源
2.每個分片都會佔用檔案控制代碼數
3.查詢資料時會根據演算法去指定節點獲取資料,分片數越少,查詢成本越低
6.分片數 & 副本數配置建議
1.跟開發溝通
2.看一共要幾個節點
2個節點,預設就可以了
3個節點,重要的資料,2副本5分片,不重要的資料,1副本5分片
3.在開始階段, 一個好的方案是根據你的節點數量按照1.5~3倍的原則來建立分片.
例如:如果你有3個節點, 則推薦你建立的分片數最多不超過9(3x3)個.
4.儲存資料量多的可以設定分片多一些,儲存資料量少的,可以少分寫分片
5.ElasticSearch 配置優化
1.限制記憶體
1.啟動記憶體最大是32G
2.伺服器一半的記憶體全都給ES
3.設定可以先給小一點,慢慢提高
4.記憶體不足時
1)讓開發刪除資料
2)加節點
3)提高配置
5.關閉swap空間
2.檔案描述符
1.配置檔案描述符
[root@db02 ~]# vim /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072
2.普通使用者
[root@db02 ~]# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
root soft nproc unlimited
[root@db02 ~]# vim /etc/security/limits.d/90-nproc.conf
* soft nproc 65535
root soft nproc unlimited
3.語句優化
1.條件查詢時,使用term查詢,減少range的查詢
2.建索引的時候,儘量使用命中率高的詞
5.叢集的監控
1.監控內容
1.檢視叢集健康狀態
GET _cat/health
2.檢視所有節點
GET _cat/nodes
# 兩者有一個產生變化,說明叢集出現故障
2.指令碼監控
[root@db01 ~]# vim es_cluster_status.py
#!/usr/bin/env python
#coding:utf-8
#Author:_DriverZeng_
#Date:2017.02.12
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import subprocess
body = ""
false = "false"
clusterip = "10.0.0.51"
obj = subprocess.Popen(("curl -sXGET http://"+clusterip+":9200/_cluster/health?pretty=true"),shell=True, stdout=subprocess.PIPE)
data = obj.stdout.read()
data1 = eval(data)
status = data1.get("status")
if status == "green":
print "\033[1;32m 叢集執行正常 \033[0m"
elif status == "yellow":
print "\033[1;33m 副本分片丟失 \033[0m"
else:
print "\033[1;31m 主分片丟失 \033[0m"
[root@db01 ~]# python es_cluster_status.py
叢集執行正常
3.監控外掛 x-pack