redis 哨兵 異步_突破Java面試(23-8) - Redis哨兵主備切換的數據丟失問題-阿里云開發者社區...

1 數據丟失的兩個場景

主備切換的過程,可能會導致數據丟失

1.1 異步復制

由于 master => slave的復制是異步的,所以可能有部分數據還沒復制到slave,master就宕機,于是這些數據就丟失了

1.2 腦裂導致

腦裂,也就是說,某個master所在節點突然脫離正常的網絡,無法和其他slave機器連接,但實際上master還運行著

此時哨兵可能就會認為master宕機了,然后開啟選舉,將其他slave切換成了master

這個時候,集群里就會有兩個master,也就是所謂的腦裂

此時雖然某個slave被切換成了master,但是可能client還沒來得及切換到新的master,還繼續寫向舊master的數據可能也丟失了

因此舊master再次恢復時,會被作為一個slave掛到新的master上去,自己的數據會被清空,重新從新的master復制數據

2 數據丟失的解決方案

如下配置可以減少異步復制和腦裂導致的數據丟失

min-slaves-to-write 1

min-slaves-max-lag 10

配置要求至少有1個slave,數據復制和同步的延遲不能超過10秒

一旦所有的slave,數據復制和同步的延遲都超過了10秒鐘,master就不再接收任何請求!

2.1 異步復制數據丟失解決方案

min-slaves-max-lag 配置

即可確保,一旦slave復制數據和ack延時過長,就認為可能master宕機后損失的數據太多了,那么就拒絕寫請求

這樣就可把master宕機時由于部分數據未同步到slave導致的數據丟失降低在可控范圍

2.2 腦裂數據丟失解決方案

若一個master出現了腦裂,跟其他slave失去連接,那么開始的兩個配置可以確保

若不能繼續給指定數量的slave發送數據,而且slave超過10秒沒有給自己ack消息,那么就直接拒絕客戶端的寫請求

這樣腦裂后的舊master就不會接受client的新數據,也就避免了數據丟失

上面的配置就確保了,如果跟任何一個slave丟了連接,在10秒后發現沒有slave給自己ack,那么就拒絕新的寫請求

因此在腦裂場景下,最多就丟失10秒的數據

參考

《Java工程師面試突擊第1季-中華石杉老師》

歡迎關注全是硬核干貨的公眾號:JavaEdge

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443630.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443630.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue 斷開正在發送的請求_vue 發送請求頻繁時取消上一次請求

前言:在項目中經常有一些場景會連續發送多個請求,而異步會導致最后得到展示的結果可能不是最后一次發送請求返回的結果,且對性能也有非常大的影響。場景:列表式切換商品,有時候上一次請求的結果非常慢,而我…

Linux學習:第六章-Linux網絡配置

上一章的補充: 常見網絡端口: 2021ftp服務文件共享 22ssh服務安全遠程網絡管理 23telnet服務 25smtp:簡單郵件傳輸協議發信 110pop3:郵局協議收信 80www網頁服務 3306mysql端口 3389windows終端服務 53DNS端口 /etc/services所有系…

sequelize 增加數據庫字段_Node項目使用Sequelize操作數據庫(一)(包括模型,增,刪、改等)...

Sequelize 是一個基于 Promise 的 Node.js ORM,目前支持 Postgres、MySQL、SQLite 和 Microsoft SQL Server。它具有強大的事務支持,關聯關系、讀取和復制等功能。所謂ORM是指對象關系映射,通過使用描述對象和數據庫之間映射的元數據&#xf…

django orm插入一條_如何通過django的ORM遠程發布文章?

利用django的ORM可以方便的給數據庫插入文章但是假如我django放在阿里云,那我想在本地寫個插件,每天很方便的插入一些數據,最好是通過ORM的,因為管理起來比較方便,會涉及到多個站,可能會有200多個站&#x…

循環斐波那契數列_第五課:斐波那契數列(第一課時)

簡介:又稱黃金分割數列、因數學家列昂納多斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34……在數學上,斐波那契數列以如下被以遞推的方法定義:F(…

命令行 藍牙_Ubuntu使用BlueZ驅動藍牙dongle

藍牙dongle即藍牙適配器,一般為USB接口,通過USB連接到PC等設備。連接dongle后,PC即可使用驅動程序控制dongle連接其它藍牙設備。本文主要介紹在Ubuntu系統中安裝BlueZ的方法及藍牙的使用。01獲取BlueZBlueZ是Linux系統的官方藍牙協議棧&#…

Java在Windows下導出xml文件到Linux服務器上

最近由于公司項目需要,學習了在Windows平臺導出xml文件到Linux服務器上的指定目錄下的方法,(注:這里的我的Linux是在本機上裝的虛擬機)現在寫下來記錄一下! 1.首先是項目截圖: 2.主要是類&…

java peek函數_Java 8 Stream Api 中的 peek 操作

1. 前言我在 Java 8 Stream API中的 map 和flatMap 中講述了Java8 Stream API中 map 操作和 flatMap 操作的區別。然后有小伙伴告訴我 peek 操作 也能實現元素的處理。但是你知道 map 和 peek 的區別嗎? map 我們在開頭文章已經講過了,你可以去詳細了解一…

iphone如何查看dns延遲_iPhone手機網速慢?1分鐘教你設置DNS,網速立馬翻一番

很多小伙伴在購機時選擇蘋果手機都是因為iOS系統的流暢度和精簡性,但iPhone在可玩性和信號方面是不如安卓手機的。大家在使用過程中一定遇到過這樣的情況,連接同一個無線網,但是蘋果的網速總是要比安卓慢,這該怎么辦呢&#xff1f…

mysql 關系_MySQL之關系

關系多對多的關系,如何通過mysql來表示站在老師的角度一個老師可以教多個學生,一個老師也可以教一個學生。站在學生的角度一個學生可以被一個老師教一個學生也可以被多個老師教結論:如果站在兩邊看都是一對多的情況,那么這個關系就…

mysql賬號密碼忘_mysql用戶名密碼忘記了解決方法

今天想用一下實驗室服務器的mysql,發現不記得用戶名密碼了。解決方法如下:1. 保證服務器處于安全的狀態,如果可以請拔掉網線...(不過我跳過了這一步,額)2. 修改/etc/my.cnf文件在[mysqld]的段中加入:skip-grant-tables…

copying mysql status_mysql慢查詢copying to tmp table

windows server,無論修改my.ini的tmp_table_size,max_heap_table_size到多少,情況都一樣。同樣的表和查詢語句,在本地運行,沒出現慢查詢。SELECTg.goods_id,g.goods_name,g.shop_price,g.goods_thumb,SUM(og.goods_num…

JDK 7,jdk1.7 安裝及配置

1.打開網頁:http://www.oracle.com 下載對應平臺的合適JDK。 2. 雙擊下載的exe,如jdk-7u7-windows-i586.exe。 3.進入安裝向導: 4.下一步,更改安裝路徑,選擇安裝所有組件。 更改為D:\jdk1.7.0_07\ 點擊確定 5.下一步,…

c mysql 編譯_MySQL編譯安裝之cmake

mysql版本5.5以上編譯安裝時需要用到軟件cmake,cmake特性是獨立于源碼編譯,編譯工作可以在另外一個目錄中而非源碼目錄中進行,mysql版本5.5以上編譯安裝時需要用到軟件cmake,cmake特性是獨立于源碼編譯,編譯工作可以在…

vb連接mysql未發現_vb連接MySQL遇到的問題解決方法

1.安裝mysql,2.安裝MyODBC-standard-3.51.07-win.msi3:vb連接語句是:Public strcnn As StringPublic sql As StringPublic conn A1.安裝mysql,2.安裝MyODBC-standard-3.51.07-win.msi3:vb連接語句是:Public strcnn As StringPublic sql As StringPublic conn As New ADODB.Conn…

mysql常用內置函數_mysql常見內置函數

在mysql中有許多內置的函數,雖然功能都能在PHP代碼中實現,但巧妙的應用mysql內置函數可以大大的簡化開發過程,提高效率。在這里我總結一下一些常用的,方便以后查看:mysql字符串函數:concat(String2 [,...])…

mysql里面有沒有map類型_MySQL學習(二) 數據類型

MySQL支持多種列類型:數值類型、日期/時間類型和字符串(字符)類型。數值類型數值類型又分為整數型與小數型整數型下面的表顯示了需要的每個整數類型的存儲和范圍創建一張表mysql> CREATE TABLE t_int (int_1 TINYINT,int_2 SMALLINT,int_3 MEDIUMINT,int_4 INT,i…

mysql alter table if_MySQL中的alter table命令的基本使用方法及提速優化

一、基本用法1. 增加列?1alter table tbl_nameadd col_name type例如, 給pet的表增加一列 weight,?1mysql>alter table petadd weightint;2. 刪除列?1alter table tbl_namedrop col_name例如, 刪除pet表中的weight這一列?1mysql>alter table petdrop weight;3. 改變…

mysql_real_escape_string 報錯_addslashes與mysql_real_escape_string的區別

addslashes和mysql_real_escape_string.都是為了使數據安全的插入到數據庫中而進行過濾.那么這兩個函數到底是有什么區別呢??我們今天來簡單的看下..首先.我們還是從PHP手冊入手..手冊上addslashes轉義的字符是單引號()、雙引號(")、反斜線(\)與NUL(NULL 字符)。mysql_r…

shell執行perl_【編程技巧(一)】在Perl、Shell和Python中傳參與輸出幫助文檔

社會你明哥,人狠話又多!【小明的碎碎念】與你不見不散!作為一名搞數據的生物狗,咱們是生物狗中代碼寫得最六的,程序員中生物學得最好的——大家沒意見吧,有意見請憋著跟隨小明的步伐,讓我們開開…