【ES實戰(zhàn)】學(xué)習(xí)使用Elasticsearch6開始的CCR
本文涉及官網(wǎng)文章地址
- Overview
- Requirements for leader indices
- Automatically following indices
- Getting started with cross-cluster replication
- Upgrading clusters
CCR => Cross-cluster replication
跨集群復(fù)制 (CCR) 功能可以將遠程集群中的索引復(fù)制到本地集群。 此功能可用于一些常見的生產(chǎn)用例:
- 主集群發(fā)生故障時的災(zāi)難恢復(fù)。 輔助集群可以作為熱備份
- 地理位置鄰近,以便可以在本地提供讀取服務(wù)
概述
跨集群復(fù)制是在逐個索引的基礎(chǔ)上完成的。 復(fù)制關(guān)系是在索引級別配置的。 對于每個配置的復(fù)制關(guān)系,都有一個稱為leader index的復(fù)制源索引和一個稱為follower index的復(fù)制目標索引。
復(fù)制是主動-被動的。 這意味著雖然leader索引可以直接寫入,但follower索引不能直接接收寫入。
復(fù)制是基于拉模式的。 這意味著復(fù)制是由關(guān)注者索引驅(qū)動的。 這簡化了leader索引的狀態(tài)管理,并且意味著跨集群復(fù)制不會干擾leader索引上的索引寫入。
為了方便理解,將Leader索引和follower索引定義為主從索引。
配置主從關(guān)系
可以通過兩種方式配置主從關(guān)系:
- 手動創(chuàng)建特定的從索引
- 根據(jù)自動關(guān)注模式自動創(chuàng)建從索引
還必須配置主索引。
當您手動或通過自動跟蹤模式啟動復(fù)制時,將在本地集群上創(chuàng)建從索引。 創(chuàng)建從索引后,遠程恢復(fù)進程會從遠程集群把主索引的所有 Lucene 分段文件復(fù)制到本地集群。
默認情況下,如果您手動啟動關(guān)注,則恢復(fù)過程與創(chuàng)建關(guān)注者請求是異步的。 該請求在遠程恢復(fù)過程完成之前返回。 如果您想等待該過程完成,可以使用wait_for_active_shards
參數(shù)。
主從復(fù)制的機制
主從復(fù)制關(guān)系是在索引級別管理的,而復(fù)制是在分片級別執(zhí)行的。 創(chuàng)建從索引時,它會自動配置為具有與主索引相同數(shù)量的分片。從索引中的分片任務(wù)通過發(fā)送新操作的讀取請求來從主索引中相應(yīng)的分片中拉取。 這些讀取請求可以從領(lǐng)導(dǎo)分片的任何副本(主分片或副本)提供服務(wù)。
對于從索引的分片任務(wù)發(fā)送的每個讀取請求,如果主索引分片上有可用的新操作,則主索引分片將使用受在配置從索引時建立的讀取參數(shù)限制的操作進行響應(yīng)。 如果主索引分片上沒有可用的新操作,則主索引分片將等待新操作的配置超時。 如果在該超時時間內(nèi)發(fā)生新操作,主索引分片會立即響應(yīng)這些新操作。 否則,如果超時,從索引的分片會回復(fù)沒有新操作。 從索引分片任務(wù)更新一些統(tǒng)計數(shù)據(jù),并立即向主索引分片發(fā)送另一個讀取請求。 這確保了遠程集群和本地集群之間的網(wǎng)絡(luò)連接持續(xù)被使用,以避免被外部源(例如防火墻)強制終止。
如果讀取請求失敗,則檢查失敗的原因。 如果故障原因被認為是可以恢復(fù)的故障(例如網(wǎng)絡(luò)故障),則從索引分片任務(wù)進入重試循環(huán)。 否則,從索引分片任務(wù)將暫停并需要用戶干預(yù),然后才能使用 恢復(fù) follower API。
當從索引分片任務(wù)接收到操作時,它們被放置在寫入緩沖區(qū)中。 從索引分片任務(wù)管理此寫入緩沖區(qū)并將批量寫入請求從此寫入緩沖區(qū)提交到從索引分片。 寫入緩沖區(qū)和這些寫入請求由您在配置從索引索引時建立的寫入?yún)?shù)進行管理。 寫緩沖區(qū)充當針對讀請求的背壓。 如果寫入緩沖區(qū)超出其配置的限制,則從索引分片任務(wù)不會發(fā)送額外的讀取請求。 當寫入緩沖區(qū)不再超出其配置的限制時,從索引分片任務(wù)將恢復(fù)發(fā)送讀取請求。
從主索引復(fù)制操作的復(fù)雜性取決于如何創(chuàng)建從索引時或使用 創(chuàng)建追隨者 API
應(yīng)用于主索引的映射更新會根據(jù)需要由從索引自動檢索。???
從索引所需的mapping會基于主索引的設(shè)置更新將根據(jù)從索引的需要,進行自動重試。 從索引并不會更新所有設(shè)置。 例如,更改主索引上的副本數(shù)量不會被跟從索引復(fù)制。
如果您對從索引所需的主索引setting采用非動態(tài)設(shè)置更改,則從索引將經(jīng)歷一個自行關(guān)閉、應(yīng)用設(shè)置更新,然后重新打開自身的循環(huán)。 在此周期內(nèi),從索引將不可用于讀取且無法復(fù)制寫入。
檢查復(fù)制的進度
您可以使用 get follower stats API 檢查分片級別的復(fù)制進度 。 通過此 API,您可以深入了解從索引分片任務(wù)管理的讀寫操作。 它還報告可以重試的讀取異常和需要用戶干預(yù)的致命異常。
暫停、恢復(fù)數(shù)據(jù)的復(fù)制
您可以使用 pause follower API 暫停復(fù)制,然后使用 resume follower API。 如果您的初始配置不適合您的用例,串聯(lián)使用這些 API 使您能夠調(diào)整從分片任務(wù)的讀寫參數(shù)。
復(fù)制時的主索引保的留操作
如果從索引在一段時間內(nèi)無法從主索引復(fù)制操作,則以下過程可能會由于主索引缺乏復(fù)制所需的完整操作歷史記錄而失敗。
復(fù)制到從索引的操作是使用最初執(zhí)行操作時生成的序列號來標識的。 Lucene 段文件偶爾會合并,以優(yōu)化搜索并節(jié)省空間。 當這些合并發(fā)生時,與已刪除或更新的文檔相關(guān)的操作可以在合并期間被修剪。 當從索引請求修剪操作的序列號時,該過程將由于主索引上丟失的操作而失敗。
這種情況在僅添加的工作流程中是不可能的。 由于文檔永遠不會被刪除或更新,因此底層操作不會被修剪。
Elasticsearch 嘗試使用稱為軟刪除的 Lucene 功能來緩解更新工作流程的這一潛在問題。 當文檔被更新或刪除時,底層操作會在 Lucene 索引中保留一段時間。 這段時間由index.soft_deletes.retention_lease.period
設(shè)置控制,可以在主索引上配置。
index.soft_deletes.retention_lease.period
:控制創(chuàng)建或續(xù)訂保留租期后,將其視為過期的最長時間。
index.soft_deletes.retention.operations
:控制軟刪除文檔在合并前的保留數(shù)量。保留更多已刪除文檔可增加基于操作的恢復(fù)機會,并允許查詢更長的文檔歷史。 如果啟用了軟刪除,引擎默認情況下會保留直至全局檢查點的所有操作。
當從索引啟動索引復(fù)制時,它會從主索引那里獲取保留租約。 這通知主索引不應(yīng)允許軟刪除被修剪,直到從索引指示它已收到操作或租約到期。 在租約到期之前進行監(jiān)控以檢測從索引復(fù)制問題非常有價值,以便可以在追隨者嚴重落后之前解決問題。
發(fā)現(xiàn)數(shù)據(jù)復(fù)制遠遠落后的從索引,嘗試修復(fù)
如果從索引遠遠落后于主索引,以至于無法再復(fù)制操作,則可以使用 get follow stats API。 它將被報告為indices[].fatal_exception
。
為了重新啟動從索引,您必須暫停復(fù)制進程,關(guān)閉索引,然后再次創(chuàng)建從索引。 例如:
POST /follower_index/_ccr/pause_follow
POST /follower_index/_close
PUT /follower_index/_ccr/follow?wait_for_active_shards=1
{
"remote_cluster" : "remote_cluster",
"leader_index" : "leader_index"
}
重新創(chuàng)建從索引是一種破壞性行為。 從屬集群上所有現(xiàn)有的 Lucene 段文件都將被刪除。 遠程恢復(fù)進程再次從leader復(fù)制Lucene段文件。 當follower索引初始化后,復(fù)制的過程會再次開始。
結(jié)束主從復(fù)制關(guān)系
您可以使用 unfollow API 終止復(fù)制。 此 API 將關(guān)注者索引轉(zhuǎn)換為常規(guī)(非從)索引。
主索引的必須項
跨集群復(fù)制的工作原理是重放在主索引分片上執(zhí)行的各個寫入操作的歷史記錄。 這意味著這些操作的歷史記錄需要保留在主索引分片上,以便從索引分片任務(wù)可以拉動它們。 用于保留這些操作的底層機制是“軟刪除”。 每當刪除或更新現(xiàn)有文檔時都會發(fā)生軟刪除。 通過將這些軟刪除保留到可配置的限制,操作歷史記錄可以保留在主索引分片上,并在從索引分片任務(wù)重放操作歷史記錄時可供其使用。
必須為要用作主索引的索引啟用軟刪除。 啟用軟刪除需要在創(chuàng)建索引時添加一些索引設(shè)置項。 必須將這些設(shè)置項添加到創(chuàng)建索引請求或用于管理新索引創(chuàng)建的索引模板中。
這意味著跨集群復(fù)制不能用于現(xiàn)有索引。 如果您想要從另一個集群復(fù)制現(xiàn)有數(shù)據(jù),則必須將數(shù)據(jù)重新索引到啟用軟刪除的新索引。
軟刪除配置
-
index.soft_deletes.enabled
索引上是否啟用軟刪除。 軟刪除只能在創(chuàng)建索引時配置,并且只能在 6.5.0 或之后創(chuàng)建的索引上配置。 默認值為
false
。 -
index.soft_deletes.retention_lease.period
在分片歷史保留租約被視為過期之前保留分片歷史保留租約的最長期限。 分片歷史保留租約可確保在 Lucene 索引合并期間保留軟刪除。 如果軟刪除在復(fù)制到從索引之前被合并,則由于主索引的歷史記錄不完整,后續(xù)過程將失敗。 默認值為
12h
。
自動創(chuàng)建從索引
在您想要復(fù)制定期創(chuàng)建的新索引(例如每日 Beats 索引)的時間序列用例中,為每個新的主索引手動配置從索引可能會成為操作負擔(dān)。 跨集群復(fù)制中的自動復(fù)制功能旨在減輕這種負擔(dān)。 通過自動復(fù)制功能,您可以指定自動復(fù)制遠程集群中名稱與模式匹配的新索引。
管理自動復(fù)制模式
您可以使用創(chuàng)建自動跟隨模式 API。 當您創(chuàng)建新的自動遵循模式配置時,您正在針對單個遠程集群配置模式集合。 每當在遠程集群中創(chuàng)建名稱與集合中的模式之一匹配的新索引時,都會在本地集群中配置從索引。 從索引使用新索引作為其主索引。
您可以使用獲取自動跟蹤模式 API 。 要刪除已配置的自動跟隨模式集合,請使用刪除自動跟隨模式 API。
由于自動跟蹤功能是在后臺代表您自動處理的,因此錯誤報告是通過所選主節(jié)點上的日志和跨集群復(fù)制統(tǒng)計 API完成的。
CCR快速入門指南
- Connect a local cluster to a remote cluster 將本地集群連接到遠程集群
- Create a leader index in a remote cluster 在遠程集群中創(chuàng)建主索引
- Create a follower index that replicates a leader index 創(chuàng)建復(fù)制主索引的從索引
- Automatically create follower indices 自動創(chuàng)建從索引
常規(guī)的開始之前
-
安裝兩個集群作為本地集群和遠程集群。
-
購買具有CCR使用權(quán)的license
-
如果在本地和遠程集群中啟用了 Elastic 安全功能,則您需要具有適當權(quán)限的用戶來執(zhí)行本教程中的步驟。
跨集群復(fù)制功能使用集群權(quán)限和內(nèi)置角色,可以更輕松地控制哪些用戶有權(quán)管理跨集群復(fù)制。
默認情況下,您可以使用內(nèi)置的“elastic”用戶執(zhí)行本教程中的所有步驟。 但是,必須先為此用戶設(shè)置密碼,然后用戶才能執(zhí)行任何操作。 有關(guān)如何設(shè)置該密碼的信息,請參閱教程:安全性入門。
如果您在生產(chǎn)環(huán)境中執(zhí)行這些步驟,請格外小心,因為
elastic
用戶具有superuser
角色,您可能會無意中進行重大更改。或者,您可以將適當?shù)臋?quán)限分配給您選擇的用戶 ID。 在包含主索引的遠程集群上,用戶將需要主索引的
read_ccr
集群權(quán)限以及monitor
和read
權(quán)限。ccr_user: cluster: - read_ccr indices: - names: [ 'leader-index' ] privileges: - monitor - read
在包含從索引的本地集群上,同一用戶將需要從索引的
manage_ccr
集群權(quán)限以及monitor
、read
、write
和manage_follow_index
權(quán)限。ccr_user: cluster: - manage_ccr indices: - names: [ 'follower-index' ] privileges: - monitor - read - write - manage_follow_index
如果您正在管理連接到遠程集群 通過集群更新設(shè)置 API,您還需要一個具有
all
集群權(quán)限的用戶。
連接到遠程集群
跨集群復(fù)制功能要求將本地集群連接到遠程集群。 我們將使用集群別名leader
將本地集群連接到遠程集群。
PUT /_cluster/settings
{
"persistent" : {
"cluster" : {
"remote" : {
"leader" : {
"seeds" : [
"127.0.0.1:9300"
]
}
}
}
}
}
指定遠程集群中種子節(jié)點的主機名和傳輸端口。
您可以驗證本地集群與遠程集群是否成功連接。
GET /_remote/info
API 將通過顯示本地集群已連接到遠程集群來做出響應(yīng)。
{
"leader" : {
"seeds" : [
"127.0.0.1:9300"
],
"http_addresses" : [
"127.0.0.1:9200"
],
"connected" : true,
"num_nodes_connected" : 1,
"max_connections_per_cluster" : 3,
"initial_connect_timeout" : "30s",
"skip_unavailable" : false
}
}
這表明本地集群已連接到遠程集群,集群別名為leader
。
這顯示了本地集群連接到的遠程集群中的節(jié)點數(shù)。
創(chuàng)建主索引
主索引需要一個特殊的索引設(shè)置,以確保當從索引向主索引請求時,需要復(fù)制的操作是可用的。該設(shè)置用于在領(lǐng)導(dǎo)者索引上啟用軟刪除。每當刪除或更新文檔時,就會發(fā)生軟刪除。軟刪除只能在 Elasticsearch 6.5.0 或之后創(chuàng)建的新索引上啟用。
在下面的示例中,我們將在遠程群集中創(chuàng)建一個主索引:
PUT /server-metrics
{
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 0,
"soft_deletes" : {
"enabled" : true
}
}
},
"mappings" : {
"metric" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"accept" : {
"type" : "long"
},
"deny" : {
"type" : "long"
},
"host" : {
"type" : "keyword"
},
"response" : {
"type" : "float"
},
"service" : {
"type" : "keyword"
},
"total" : {
"type" : "long"
}
}
}
}
}
開啟主索引的軟刪除。
創(chuàng)建從索引
從索引是通過create follower API創(chuàng)建的。創(chuàng)建從索引時,必須引用remote cluster 和在遠程群集中創(chuàng)建的leader index。
PUT /server-metrics-copy/_ccr/follow?wait_for_active_shards=1
{
"remote_cluster" : "leader",
"leader_index" : "server-metrics"
}
從索引使用 remote recovery 進程初始化。遠程恢復(fù)過程會將現(xiàn)有的 Lucene 段文件從主索引傳輸?shù)綇乃饕?。遠程恢復(fù)過程完成后,復(fù)制索引就開始了。
現(xiàn)在,當你將文檔索引到主索引中時,你會看到這些文檔被復(fù)制到從索引中。您可以使用 get follower stats API 查看復(fù)制的狀態(tài)。
自動創(chuàng)建從索引
跨群集復(fù)制中的auto-follow功能有助于在時間序列用例中跟蹤遠程群集定期創(chuàng)建的新指數(shù)(如每日 Beats 指數(shù))。自動跟蹤可使用創(chuàng)建自動跟蹤模式 API進行配置。通過自動跟蹤模式,您可以引用與本地集群相連的遠程集群。您還必須指定一個與要自動跟蹤的索引相匹配的模式集合。
For example:
PUT /_ccr/auto_follow/beats
{
"remote_cluster" : "leader",
"leader_index_patterns" :
[
"metricbeat-*",
"packetbeat-*"
],
"follow_index_pattern" : "{{leader_index}}-copy"
}
自動復(fù)制新的 Metricbeat 索引。
自動復(fù)制新的 Packetbeat 索引。
從索引的名稱是通過在主索引的名稱上添加后綴-copy
而從主索引的名稱派生而來的。
遠程恢復(fù)
當您創(chuàng)建從索引時,在其完全初始化之前您無法使用它。 remote recovery過程通過從主索引所在集群中的主分片復(fù)制數(shù)據(jù)來在從索引的節(jié)點上構(gòu)建分片的新副本。 Elasticsearch 使用此遠程恢復(fù)過程,使用主索引中的數(shù)據(jù)來引導(dǎo)從索引。 此過程為從索引提供了主索引當前狀態(tài)的副本,即使由于 Lucene 段合并導(dǎo)致領(lǐng)導(dǎo)者無法獲得完整的更改歷史記錄。
遠程恢復(fù)是一個網(wǎng)絡(luò)密集型過程,它將所有 Lucene 段文件從主索引的集群傳輸?shù)綇乃饕募骸?從索引請求在主索引集群中的主分片上啟動恢復(fù)的會話。 然后,從索引同時向主索引請求文件塊。 默認情況下,進程同時請求5
個大1mb
文件塊。 此默認行為旨在支持領(lǐng)導(dǎo)者和追隨者集群之間存在高網(wǎng)絡(luò)延遲。
您可以使用動態(tài)設(shè)置來限制傳輸數(shù)據(jù)的速率并管理遠程恢復(fù)消耗的資源。 請參閱跨集群復(fù)制設(shè)置。
您可以使用從索引集群上的 recovery API 獲取有關(guān)正在進行的遠程恢復(fù)的信息。 遠程恢復(fù)是使用snapshot and restore基礎(chǔ)設(shè)施來實現(xiàn)的。 這意味著正在進行的遠程恢復(fù)在恢復(fù) API 中被標記為snapshot
類型。
集群升級
主動使用跨集群復(fù)制的集群需要謹慎升級。 否則,在滾動升級過程中,以下索引可能會因以下原因而失?。?/p>
- 如果新的索引設(shè)置或映射類型從升級的群集復(fù)制到未升級的群集,那么未升級的群集將拒絕接受,并導(dǎo)致索引跟隨失敗。
- Lucene 并不向前兼容,當索引跟隨回退到基于文件的恢復(fù)時,非升級群集中的節(jié)點將拒絕來自較新 Lucene 版本的索引文件。
跨集群復(fù)制的滾動升級集群在單向索引復(fù)制和雙向索引復(fù)制的情況下是不同的。
索引單向復(fù)制
在兩個集群之間的單向設(shè)置中,一個集群僅包含主索引,另一個集群僅包含復(fù)制第一個集群中的索引的從索引。
在此場景中,具有從索引的集群應(yīng)首先升級,具有主索引的集群應(yīng)最后升級。 如果集群按此順序升級,則索引跟蹤可以在升級期間繼續(xù)進行,而無需停機。
請注意,鏈式索引跟隨設(shè)置也可以通過這種方式升級。例如,如果集群 A 包含所有主索引,集群 B 復(fù)制集群 A 中的索引,集群 C 復(fù)制集群 B 中的索引。在這種情況下,應(yīng)首先升級群集 C,然后升級群集 B,最后升級群集 A。
索引雙向復(fù)制
在兩個集群之間的雙向設(shè)置中,每個集群都包含主索引和從索引。文章來源:http://www.zghlxwxcb.cn/news/detail-791701.html
在此設(shè)置中升級群集時,需要在升級兩個群集之前使用pause follower API 暫停所有索引跟蹤。升級兩個群集后,可以使用resume follower API 恢復(fù)索引跟蹤。文章來源地址http://www.zghlxwxcb.cn/news/detail-791701.html
到了這里,關(guān)于【ES實戰(zhàn)】Elasticsearch6開始的CCR的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!