#### 1.Elasticsearch是數據庫,不是普通的Java應用程序,傳統數據庫需要的硬件資源同樣需要,提升性能最有效的就是升級硬件。
#### 2.Elasticsearch是文檔型數據庫,不是關系型數據庫,不具備嚴格的ACID事務特性,任何企圖直接替代嚴格事務性場景的應用項目都會失敗!!!
#### 3.Elasticsearch原則上適合一切非事務性應用場景或能夠容許一定的延遲的事務性場景;能最大限度的替代mongodb與傳統關系型數據庫
##### 索引字段與屬性都屬于靜態設置,若后期變更歷史數據需要重建索引才可生效
##### 對歷史數據無效!!!!
##### 一定要重建索引!!!!
#### 1、Cluster Formation 集群組建
### 集群主從架構模型
## 集群架構模型
# 1:ES典型的主從架構,強烈關聯的主從架構
# 2:必須有1個Master節點
# 3:1個活躍的主節點Master,多個備用Master節點
# 4:元數據信息:集群節點信息,集群索引信息,集群設置信息等
# 5:典型嫡長子繼承
#### 2、Cluster Setting集群設置
### 集群組建原理發現與廣播
## 集群發現
# ES節點采用zen發現機制
# ES 節點之間是直接點對點
# ES集群所有節點之間都有連接
### 集群管理節點選舉算法(bully算法)
## 集群管理節點選舉
# 1、6.8.x版本以下,基于bully算法
# 2、比較節點nodeid大小,小的優先
# 3、ES集群選舉可能會有秒級左右的延遲
### 集群管理節點選舉算法(類Raft協議)
## 集群管理節點選舉
# 1、管理節點選舉算法基于類Raft協議
# 2節點選舉在3種角色直接轉換
# 3、選舉會按照term階段,每次主節點變更就會增加該值,以最大階段選舉的主節點為主
# 4、選舉管理節點毫秒級完成
# 5、7.x版本以上
?
### 集群狀態維護
## 集群狀態維護
# 1、集群管理節點負責集群所有狀態維護
# 2、節點更新數據優先更新到集群管理節點
# 3、索引更新優先更新到管理節點,然后分發到其它節點
# 4、在大規模集群架構+大規模索引分片中,增加新索引特別要小心(控制創建頻率,減少master)
# 5、Cluster Metadata
### 集群節點增加
## 集群節點增加
# 1、連接其中任意節點,即可加入集群
# 2、從Master節點獲取集群節點信息
# 3、從Master節點獲取集群meta信息
### 集群節點移除
## 集群節點移除
# 1、Master節點移除節點
# 2、Master節點更新Meta信息
# 3、Master同步集群Meta信息到所有節點
### 集群容錯性檢測
# 1、集群節點之間由于網絡或者進程響應問題,存在一定的延遲通信
# 2、通過設置集群容錯性,避免集群過于敏感,造成集群動蕩
# 3、超時時間 timeout-gap
### 組建2節點集群
# 1:配置節點通信2個
# 2:配置初始化管理節點1個
# 先初始化一個節點為master
# 1、解壓 elasticsearch-8.6.2
# 2、重命名文件夾 elasticsearch-8.6.2-9201
# 3、修改jvm.options jvm配置 為1g
# 4、修改elasticsearch.yml es配置
# 4.1、集群名 cluster.name: my-application
# 4.2、節點名 node.name: node-9201
# 4.3、host最好是對外通信ip network.host: 0.0.0.0
# 4.4、http端口,對外服務 http.port: 9201
# 4.5、tcp通信端口,對內提供集群服務 transport.port: 9301
# 4.6、master第一次啟動配自己就可以 cluster.initial_master_nodes: ["node-9201"]
# 4.7、關閉安全策略,xpack.security開頭的都設為false
# 4.8、開啟跨域, http.cors.enabled: true 和 http.cors.allow-origin: "*"
# 4.9、關閉gep更新 ingest.geoip.downloader.enabled: false
# 5、啟動
第一個節點的完整配置如下:
cluster.name: my-application
node.name: node-9201
http.port: 9201transport.port: 9301
cluster.initial_master_nodes: ["node-9201"]xpack.security.enabled: falsexpack.security.enrollment.enabled: falsexpack.security.http.ssl:enabled: falsekeystore.path: certs/http.p12xpack.security.transport.ssl:enabled: falseverification_mode: certificatekeystore.path: certs/transport.p12truststore.path: certs/transport.p12# 關閉gep更新
ingest.geoip.downloader.enabled: false# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
? ? ? ? ?當第一個節點啟動完成后,就會組成由它自己形成的獨立集群。
?使用es-head查看單個節點集群
新增第二個節點并加入集群
# 由于es是彈性擴展的,可以直接加入master節點
# 在新增一個節點,加入前面的master
# 1、解壓 elasticsearch-8.6.2
# 2、重命名文件夾 elasticsearch-8.6.2-9202
# 3、修改jvm.options jvm配置 為1g
# 4、修改elasticsearch.yml es配置
# 4.1、集群名 cluster.name: my-cluster
# 4.2、節點名 node.name: node-9202
# 4.3、host最好是對外通信ip network.host: 0.0.0.0
# 4.4、http端口 http.port: 9202
# 4.5、tcp通信端口 transport.port: 9302
# 4.6、集群節點通信地址,配master tcp的地址 discovery.seed_hosts: ["127.0.0.1:9301"]
# 4.7、關閉安全策略,xpack.security開頭的都設為false
# 4.8、開啟跨域, http.cors.enabled: true 和 http.cors.allow-origin: "*"
# 4.9、關閉gep更新 ingest.geoip.downloader.enabled: false
# 5、啟動
第二個節點的完整配置如下:
cluster.name: my-application
node.name: node-9202
network.host: 0.0.0.0
http.port: 9202
transport.port: 9302
discovery.seed_hosts: ["127.0.0.1:9301"]
xpack.security.enabled: falsexpack.security.enrollment.enabled: false# 關閉gep更新
ingest.geoip.downloader.enabled: false# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
使用es-head查看2個節點集群?
### 集群增加節點
# 逐步增加節點
discovery.seed_hosts 配非master也可以
# 在新增第三個節點,加入前面的master
# 1、解壓 elasticsearch-8.6.2
# 2、重命名文件夾 elasticsearch-8.6.2-9202
# 3、修改jvm.options jvm配置 為1g
# 4、修改elasticsearch.yml es配置
# 4.1、集群名 cluster.name: my-cluster
# 4.2、節點名 node.name: node-9203
# 4.3、host最好是對外通信ip network.host: 0.0.0.0
# 4.4、http端口 http.port: 9203
# 4.5、tcp通信端口 transport.port: 9303
# 4.6、與其他節點通信地址,配非master也可以 discovery.seed_hosts: ["127.0.0.1:9302"]
# 4.7、關閉安全策略,xpack.security開頭的都設為false
# 4.8、開啟跨域, http.cors.enabled: true 和 http.cors.allow-origin: "*"
# 4.9、關閉gep更新 ingest.geoip.downloader.enabled: false
# 5、啟動
第三個節點的完整配置如下:
cluster.name: my-application
node.name: node-9203
network.host: 0.0.0.0
http.port: 9203
transport.port: 9303
discovery.seed_hosts: ["127.0.0.1:9302"]
xpack.security.enabled: falsexpack.security.enrollment.enabled: false# 關閉gep更新
ingest.geoip.downloader.enabled: false# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
使用es-head查看3個節點集群?
????????到這里就完成了3個節點的es集群配置,由于es的彈性擴展,當我們的集群資源不足時,可以動態的添加節點,es會自動幫助我們平衡節點上的數據,利用這個自動平衡節點數據的特性,我們可以很方便的做機房遷移,只要在新機房把節點部署起來并連接上集群,待數據都分配到新節點上后,可以依次關閉老機房的節點,但是自動平衡數據也有缺點,如果單個節點上的數據過大,集群間的網絡帶寬可能會被打滿。
### 集群節點減少
## 注意事項
# 節點減少不要錯過n/2+1個,會導致集群不可用
? ? ? ? es其他的一些配置項
#----節點通信------#
# 節點之間通信間隔,默認 1S
discovery.find_peers_interval: ls
#節點之間探查連接超時時間,默認3s
discovery.probe.connect_timeout: 3s
#節點探查握手確定超時時間,是確定節點已經連接之后,默認1sdiscovery.probe.handshake timeout: ls
#節點之間請求確認回復,超時時間,默認3s
discovery.request_peers_timeout:3s
#節點域名解析,并發數,默認10
discovery.seed_resolver.max_concurrent_resolvers:10
#節點域名解析,超時時間,默認 10
discovery.seed_resolver.timeout:5s#----集群節點選舉投票井---------#
#集群投票節點,移除之后是否自動收縮,從集群中移除,默認true#若設置為 false,關閉集群節點之后,需要手動 API操作,移除此節點
cluster.auto_shrink_voting_configuration: true
#集群節點選舉失敗時,回退時間補償,默認100ms,一般不用修改,慎重
cluster.election.back_off_time: 100ms#集群節點選舉持續時間,在確認節點參與選舉失敗時,默認 500ms,一般不用修改,慎重,調大此值集群選舉時間過長,調小此值,集群過于敏感
cluster.election.duration:500ms
#集群節點選舉初始化,確認超時時間,默認100ms
cluster.election.initial_timeout:100ms
#集群節點選舉,最大超時時間,默認10S
cluster.election.max_timeout: 10s#---------集群容錯設置--------#
#集群主節點確認 非主節點檢查校驗時間間隔,是集群所有節點,默認1S
cluster.fault_detection.follower_check.interval: 1s
#集群主節點確認 非主節點已經與集群脫離 超時時間,默認10S
cluster.fault_detection.follower_check.timeout: 10s
#集群主節點與非主節點失去連接之后,嘗試連接次數,默認3
cluster.fault_detection.follower_check.retry_count: 3
#非主節點與主節點確認檢查消炎間隔時間,默認 1s
cluster.fault_detection.leader check.interval: 1s
#默認 10S
cluster.fault_detection.leader_check.timeout: 10s
#默認 3
cluster.fault_detection.leader_check.retry_count: 3
#非主節點與主節點確認,延遲超時時間,默認90s
cluster.follower_lag.timeout: 90s
#集群新節點加入集群,確認失敗,超時時間,默認30S
cluster.join.timeout: 30s
#移除集群投票選舉節點,最大數量,默認10
cluster.max_voting_config_exclusions:10#---------集群狀態發布--------------------#
#主節點與非主節點之間,確認集群所有狀態更新已經通知到所有節點,并得到應
#記錄某個節點是否響應慢,超時時間 ,默認 10s
cluster.publish.info_timeout: 10s
#主節點與非主節點之間,確認集群所有狀態更新已經通知到所有節點,并得到響應,超時時間,默認 60s
cluster.publish.timeout: 60s#--------集群主節點異堂默認操作-----------#
#集群主節點異常,讀寫操作全部停止
cluster.no_master_block: all
#集群主節點異常,寫操作停止
cluster.no_master_block: write
### 集群動態設置
# 1:有很多參數調節的設置,無需在集群啟動之前設置,可以在集群啟動之后,依據實際需求動態調整,即刻生效。
### 臨時設置與持久設置
##查詢參數
# PUT_cluster/settings,集群設置接口
# persistent,集群持久化設置,集群重啟依然有效
# transient,集群臨時設置,集群重啟失效
# 查看集群設置
GET _cluster/settings
# 查看集群健康信息
GET _cluster/health
# 查看集群狀態
GET _cluster/state
####?集群組建建議以及經驗分享
#?集群節點數量限制,不宜過大,正常30~40節點合適;大規模無需超過100
#?避免頻繁集群節點增加與移除
#?避免集群節點多個版本,盡量一致
# modules-discovery 集群組建發現
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/modules-discovery.html
# modules-discovery-settings 集群組建設置
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/modules-discovery-settings.html
# Cluster APls 集群操作 AP!
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/cluster.html
# voting-config-exclusions 移除節點投票資格
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/voting-config-exclusions.html
??