02 stash訂閱配置文件(Elasticsearch數據遷移與集群容災)

时间:2024-05-07 00:42:55 编辑: 来源:

,再異步地把數據同步到備集群中,但是實現起來會比較復雜,因為要解決主備集群數據一致性的問題,并且跨地域的話,網絡延遲會比較高;還有就是,當主集群掛掉之后,這時候切換到備集群,可能兩邊數據還沒有追平,出現不一致,導致業務受損。當然,可以借助于kafka等中間件實現雙寫,但是數據鏈路增加了,寫入延遲也增加了,并且kafka出現問題,故障可能就是災難性的了。

一種比較常見的異步復制方法是,使用snapshot備份功能,定期比如每個小時在主集群中執行一次備份,然后在備集群中進行恢復,但是主備集群會有一個小時的數據延遲。以騰訊云為例,騰訊云的ES集群支持把數據備份到對象存儲COS中,因為可以用來實現主備集群的數據同步,具體的操作步驟可以參考 買粉絲s://cloud.tencent.買粉絲/document/proct/845/19549 。

在6.5版本官方推出了CCR功能之后,集群間數據同步的難題就迎刃而解了。可以利用CCR來實現ES集群的異地容災:

CCR是類似于數據訂閱的方式,主集群為Leader, 備集群為Follower, 備集群以pull的方式從主集群拉取數據和寫請求;在定義好Follwer Index時,Follwer Index會進行初始化,從Leader中以snapshot的方式把底層的segment文件全量同步過來,初始化完成之后,再拉取寫請求,拉取完寫請求后,Follwer側進行重放,完成數據的同步。CCR的優點當然是因為可以同步UPDATE/DELETE操作,數據一致性問題解決了,同步延時也減小了。

另外,基于CCR可以和前面提到的跨機房容災的集群結合,實現兩地多中心的ES集群。在上海地域,部署有多可用區集群實現跨機房的高可用,同時在北京地域部署備集群作為Follwer利用CCR同步數據,從而在集群可用性上又向前走了一步,既實現了同城跨機房容災,又實現了跨地域容災。

但是在出現故障時需要把集群的訪問從上海切換到北京時,會有一些限制,因為CCR中的Follwer Index是只讀的,不能寫入,需要切換為正常的索引才能進行寫入,過程也是不可逆的。不過在業務側進行規避,比如寫入時使用新的正常的索引,業務使用別名進行查詢,當上海地域恢復時,再反向的把數據同步回去。

現在問題就是保證上海地域集群數據的完整性,在上海地域恢復后,可以在上海地域新建一個Follower Index,以北京地域正在進行寫的索引為Leader同步數據,待數據完全追平后,再切換到上海地域進行讀寫,注意切換到需要新建Leader索引寫入數據。

數據同步過程如下所示:

1.上海主集群正常提供服務,北京備集群從主集群Follow數據

2.上海主集群故障,業務切換到北京備集群進行讀寫,上海主集群恢復后從北京集群Follow數據

求java學習路線圖?

第一階段:JavaSE階段變量、數據類型、運算符

二進制和十進制的轉化

注釋、單行注釋、多行注釋、文本注釋、注釋內容和字節碼的關系

標識符、關鍵字、駝峰原則

變量的本質、內存畫圖、變量聲明和初始化

變量的分類和作用域(局部變量、成員變量、靜態變量)

常量和Final

基本數據類型介紹

整型變量和整型常量

浮點類型、float、double

char字符型、轉義字符

boolean布爾型、if語句使用要點、布爾類型占用空間問題

運算符介紹

算數運算符(二元、自增、自減)

賦值和賦值運算符

關系運算符詳解

邏輯運算符、短路運算符詳解

位運算符詳解

字符串連接符

條件運算符(三元運算符)

運算符優先級問題

自動類型轉換詳解

強制類型裝換詳解

基本數據類型裝換常見錯誤、溢出、L問題

使用Scanner獲取鍵盤輸入

控制語句

控制語句和實現邏輯對應

if單選結構

if_elseif_else多選結構

switch語句_IDEA更換主題

循環_while

循環_for循環_dowhile

嵌套循環

break和買粉絲ntinue語句_標簽_控制語句底層原理

寫一個年薪計算機_百度查問題的秘訣(重要)

個人所得稅計算器軟件

方法核心詳解_天才思維模型教你高手學習思維模式

方法的重載

遞歸結構講解_遞歸頭_遞歸體

面向對象編程-基礎

面向過程和面向對象的區別

類和對象的概述

類的屬性和方法

創建對象內存分析

構造方法(Construtor)及重載

對象類型的參數傳遞

this關鍵字

static關鍵字詳解

局部代碼塊、構造代碼塊和靜態代碼塊

package和import詳解

JavaDoc生成API文檔

面向對象編程-進階

面向對象的三大特性

面向對象之【封裝(Encapsulation)】

訪問權限修飾符

面向對象之【繼承(Inheritance)】

Object類

方法重寫Override

super關鍵字詳解

重寫equals()和toString()

繼承中對象創建的內存分析

面向對象之【多態(Polymorphism)】

向上轉型

向下轉型

instanceof運算符

編譯時和運行時詳解

final修飾符

抽象類和抽象方法(abstrct)

接口的定義和實現

JDK8的接口新特性

接口應用:內部類比較器Comparable

內部類詳解

Java的內存管理與垃圾回收

異常機制

異常的概述

異常的執行過程與分析

try-catch-finally捕捉異常

throw拋出異常

throws聲明異常

異常繼承體系

運行時異常和編譯異常

自定義異常

Java常用類Wrapper包裝類

自動裝箱和自動拆箱

包裝類的源碼分析

String類的使用與內存原理

String類的源碼分析

StringBuffer

StringBuilder

字符串處理類性能分析

Date類

System類

DateFormat類

Calendat類

Math類

BigInteger類和BigDecimal類

Random類

枚舉類

File類

常見的面試題講述與分析

數據結構算法

數據結構的概述

線性表

順序表

鏈表

棧和隊列

二叉樹

二叉查找樹

二叉平衡樹

黑紅樹

冒泡排序

選擇排序

遞歸

折半查找

集合(容器)

集合和數組的聯系和區別

集合框架體系

ArrayList的使用和源碼分析

集合中使用泛型

LinkedList的使用和源碼分析

HashSet的使用和源碼分析

哈希表及原理

TreeSet的使用和源碼分析

比較器Comparable和Comparator

HashMap的使用和源碼分析

TreeMap的使用和源碼分析

Iterator于ListIterator

Collections工具類

舊集合類Vector、Hashtable

集合總結和選擇依據

泛型接口

泛型類

泛型方法

IO流

IO流的概念

IO流的分類及其原理分析

文件流FlieInputStream、FileOutputStream

緩沖流BufferedInputStream、BufferedOutputStream

數據流ObjectInputStream、ObjectOutputStream

序列化和反序列化

轉換流InputStreamReader、OutputStreamWriter

打印流PrintWrite和PrintStream

數組流ByteArrayOutputStream、ByteArrayInputStream

使用IO復制文件夾

多線程

進程和線程

線程的創建與啟動

創建線程的三種方式對比

線程的生命周期

線程控制

多線程的安全問題與解決辦法

線程的同步:同步代碼塊

線程的同步:同步方法

線程的同步:Lock鎖

線程的死鎖問題

線程通信

Condition

線程的完整生命周期

線程池ThreadPoolExecutor

ForkJoin框架

ThreadLocal類

網絡編程

計算機網絡基礎知識

網絡通信協議

OSI參考模型

TCP/IP參考模型

數據的封裝與拆封原理解析

TCP協議

UDP協議

IP地址和端口號

URL和Socket

使用TCP編程實現登錄功能

使用UDP編程實現客服系統

使用TCP編程實現文件上傳

集合提升尋訓練

手寫ArrayList

手寫單鏈表

手寫Linkedlist

手寫HashMap

手寫HashSet

最新并發集合類

多線程提升訓練

生產者消費者模式擴展

Lock鎖和Condition

ReadWriteLock

BlockingQueue

volatile關鍵字

多線程題目練習

JDK新特征

面試題詳解

搜索关键词: