溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SQL SERVER Alwayson原理及如何進(jìn)行故障排除

發(fā)布時間:2021-10-12 15:05:24 來源:億速云 閱讀:247 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)SQL SERVER  Alwayson原理及如何進(jìn)行故障排除,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

SQL SERVER Alwayson 是SQL SERVER 分布式數(shù)據(jù)庫的一種形式,使用的公司可能不是很多,對于快速開發(fā)和高可用,是一種很不錯的解決方法。但在使用中,也會有TROUBLE的問題,我們今天來聊聊SQL SERVER 的ALWAYS ON 的原理以及一些故障,希望對大家有幫助。

SQL SERVER 的Always on 是基于PAXOS 協(xié)議的,其實說到底WINDOWS  Failover Cluster 也應(yīng)該是基于 PAXOS (如果有不對,希望 WINDOWER 們來指正我哈)

SQL SERVER  Alwayson原理及如何進(jìn)行故障排除

這張圖就是一個SQL SERVER ALWAYS ON  2016 -2017 的架構(gòu)圖,SQL SERVER 2017 支持 1個主 8個從節(jié)點的架構(gòu),不過一般來說都是1個主 兩個從的使用方式是一個主流。那SQL SERVER 的 ALWAYS ON  和 MYSQL的  MGR 有什么不同

1 MYSQL 的MGR 支持 多主的模式, SQL SERVER 不支持

2 SQL SERVER 的AWO 支持 同步和異步模式  MYSQL 的  MGR 你可以視為是強(qiáng)一致的同步模式。

3 SQL SERVER 和 MYSQL 都是通過日志的方式來進(jìn)行復(fù)制的。

4  MYSQL 的 MGR 是使用整體數(shù)據(jù)庫復(fù)制的方式 ORACLEER們可以理解,而 SQL SERVER 的集群,不是基于 INSTANCE 而是基于數(shù)據(jù)庫的(不是ORACLE 理解的數(shù)據(jù)庫,ORACLE的ER 們可以理解為一組 SCHEMA,用戶擁有的表),從這點看 SQL SERVER 還是比較靈活的和友好的。

那下面還是的在深入的說一下 ALWAYS ON的原理

SQL SERVER  Alwayson原理及如何進(jìn)行故障排除

上面的圖很好的詮釋了ALWAYS ON 的整個信息的同步流程

1 SQL SERVER 將 LDF 日志刷入磁盤,并且此時LDF 的日志必須要復(fù)制到從節(jié)點發(fā)送和主庫的日志寫入的順序是一致的。(這是不是想起MYSQL的 BINLOG,但不是很一樣,為什么自己想,上面寫了哦,想不起來,文章結(jié)尾會寫)

2 日志會復(fù)制到對應(yīng)的從庫的日志隊列,然后捕捉的線程會一直運行,將傳送過來的數(shù)據(jù)進(jìn)行數(shù)據(jù)的同步,如果由于某些原因,復(fù)制出現(xiàn)問題,那LOG SEND隊列就建立起來了。

3 信息在每個數(shù)據(jù)庫中的復(fù)制隊列被拿出然后通過網(wǎng)絡(luò)傳輸?shù)綇膸熘?/p>

4 從庫接受并且將數(shù)據(jù)快速 cache 起來

5 LOG 被物理的FLUSH 到從庫的LDF 文件中,并且會給 主庫一個 ACK(這讓我想起MYSQL 的半同步)

6 啟動REDO 線程,將數(shù)據(jù)刷入到 MDF NDF 文件中。

看上去很簡單,但實際的工作絕對不比MYSQL的 BINLOG  復(fù)制簡單。

另外在主,從副本中是要有流量控制的,以一個數(shù)據(jù)包來說 包含了 8192個 MESSAGES ,同時對于數(shù)據(jù)庫等級也是有控制的,一個數(shù)據(jù)庫最大一次傳輸  11200 MESSAGES ,(以那個為準(zhǔn),這個問題估計你不是SQL SERVER  DBAER,文章結(jié)尾也會提到) ,這個兩個標(biāo)準(zhǔn)以先到先得的標(biāo)準(zhǔn),在對方不應(yīng)答的情況下,傳送LOG的服務(wù)會等到對方應(yīng)答,接受到這么多的日志后,傳送方會繼續(xù)傳送。同時還有一個隱藏的發(fā)送標(biāo)準(zhǔn)就是LSN號,主從庫的差異,當(dāng)然通過 last commit的時間也是可以判斷主從節(jié)點之間的同步狀態(tài)是怎樣的。具體請參考 SQL SERVER DMV 的 hard_database_replica_states

同時由于ALWAYSON 的 FAILOVER 功能,在進(jìn)行FAILOVER 也是要評判當(dāng)前的切換的主機(jī)是否和從庫的 LSN 吻合,這樣就演化出判斷AWO的性能的兩個參數(shù)  RTO 和 RPO 兩個參數(shù)通過這兩個參數(shù)可以判斷出AWO如果目前遇到主機(jī)故障,是否可以快速切換。讓我想起 MYSQL的 MHA的功能以及其存在的意義。這里不再做詳細(xì)的解釋,感興趣 GOOGLE 就可以,一堆解釋和腳本。

一般ALWAYSON 的故障常見的故障或問題,

 數(shù)據(jù)延遲,這是一種,(AWO 有兩種,異步和同步),這里即使你使用了同步的方式進(jìn)行復(fù)制,那其實主庫和從庫還是有時間差異的(尤其在I/O 和網(wǎng)絡(luò)性能不好的情況下)

在SQL SERVER 里面這樣的問題叫 HIGH HADR_SYNC_COMMIT 

那引起這個問題是哪幾部可能存在這樣的問題,

事務(wù)在主節(jié)點初始化

主復(fù)制不作transaction logs 并且發(fā)送到 secondary 復(fù)制

從庫復(fù)制接受并且硬化日志并發(fā)送給從庫

下面的圖中,就是有可能產(chǎn)生性能問題的地方,但用大白話來說

1  大事務(wù)

2  糟糕的網(wǎng)絡(luò)

3  糟糕的I/0

SQL SERVER  Alwayson原理及如何進(jìn)行故障排除

同時通過SQL SERVER 性能監(jiān)控器的 DATABASE REPLICA 中的 事務(wù)延遲和 事務(wù)鏡像同步 都可以看出延遲了多長時間。

所以打破一個概念就是 SQL SERVER  AWO 同步復(fù)制,主從數(shù)據(jù)就一定百分百時間一致,NO NO NO 我查看了 目前的生產(chǎn)庫, MYSQLER們可以理解為 behind master 當(dāng)然 SQL SERVER 高大上,時間都顯示了,差多少都心里有數(shù)。 

SQL SERVER  Alwayson原理及如何進(jìn)行故障排除

好了回答上面的, 有人不知道的問題

MYSQL 5.6 的復(fù)制 和 MYSQL 5.7 的復(fù)制有什么不同,不知道這里就不提了,這里拿MYSQL 5.6 多線程復(fù)制 對比 SQL SERVER AWO 復(fù)制,可以類比,因為都是一個庫一個線程(SQL SERVER AWO 看上去也是),MYSQL 5.7 以后 到  8.0  可都是要 多線程復(fù)制,并且GR 的復(fù)制方式,這里就慢慢和 AWO 不能進(jìn)行類比了。另外SQL SERVER 的復(fù)制是按照數(shù)據(jù)庫日志,而MYSQL 的復(fù)制是按照 BINLOG (FILTER database replication  那也是過濾和SQL SERVER 的復(fù)制還是不一樣,所以這點是不能類比的。

SQL SERVER  Alwayson原理及如何進(jìn)行故障排除

順便給SQL SERVER  打個廣告 SQL SERVER 2019 直接整合 SPARK ,做大數(shù)據(jù)庫的 可以關(guān)注一下,雖然不見得有多好,但至少多一個選擇,短平快,數(shù)據(jù)量一般的還是可能享受到一波 ”宏利“

SQL SERVER  Alwayson原理及如何進(jìn)行故障排除

以上就是SQL SERVER  Alwayson原理及如何進(jìn)行故障排除,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI