主從複製問題引起的架構優化思考
存在問題
主從複製架構多次出現複製停滯問題如1032錯誤和1062錯誤,其中,1032錯誤是在主庫成功執行後在從庫update或delete時發現從庫上找不到這筆記錄,1062錯誤是在主庫insert完成後在從庫執行時出現主鍵衝突無法成功insert,這些問題可透過跳過錯誤和前面的複製資料校驗修復來解決,但是這些問題產生的直接原因是主從庫資料不一致。這種不一致除了邏輯複製本身可能出現的資料不一致,還有個原因是業務側或開發人員違規在備庫上直接進行增刪改操作導致的。
在主從複製架構中,主從庫透過VIP綁定實現指定庫作為主庫,提供讀寫,從庫起backup的作用,當主庫出現問題時,VIP切換到從庫,從庫提供讀寫,否則從庫只是backup。正常情況下,我們不允許開發人員直接透過固定IP登入從庫操作,但實際工作中往往又難以規避,那麼如何從技術角度去避免開發人員在備庫操作呢?又如何在避免的同時不影響高可用架構的正常運作和故障切換呢?
2.架構配置最佳化
(1)直接解決方法
解決上述問題的直接方法是考慮進行架構配置最佳化,即將從庫可讀寫的狀態配置為唯讀狀態。
MySQL官網關於只讀有下列描述:
1.Whenthe read_only system variable is enabled, the server permits no client updatesexcept from users who have the SUPER privilege. 只读情况下,super权限可读写。 2.Updates performed by slave threads, if theserver is a replication slave. In replication setups, it can be useful toenable read_only on slave servers to ensure that slaves accept updates only from themaster server and not from clients. 不影响主从复制线程的读写。
開啟只讀後,除了super權限帳戶和複製執行緒等不受影響外,業務側開發人員和其它人員即使登入備庫也無法操作備庫資料。
MySQL [db1]> show global variables like'read_only%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec) MySQL [test]> insert child values('1','12'); ERROR 1290 (HY000): The MySQL server is running withthe --read-only option so it cannot execute thisstatement
(2)設定為只讀後如何進行完美故障切換?
從庫只讀可避免違規操作,但面臨的問題是如果主庫發生問題,VIP要切換到從庫上,但那時從庫只讀會導致資料庫對外服務不可用,因此在切換時需要實現取消從庫只讀同時設定主庫只讀的功能。
以Keepalived+MySQL雙主(主從)架構為例,正常運作時,VIP在Master1上,Master1為可讀寫狀態,Master2為readonly狀態,一旦Master1發生問題,VIP要自動切換至Master2,切換前要完成兩個步驟:1.將Master1置為readonly;2.取消Master2的readonly。
3.自動化實現思路
對於一主一從架構,故障切換需要手工進行,因此上述兩步也可以手工操作;但Keepalived+MySQL雙主(主從)架構中,已實現故障的自動監測操作和VIP自動切換,上述兩個步驟也應該植入腳本中自動化。
我們主要需在自動監控和切換腳本中植入對資料庫開啟readonly和關閉readonly的函數,主要寫入語句“set global read_only=ON”和“set globalread_only=OFF”,同時注意在設定狀態之前先判斷現有狀態,shell呼叫語句「show variables like 'read_only';」得到讀寫狀態,確認讀寫狀態後再設定readonly參數為所需狀態即可,注意這些狀態設定的觸發自訂在監控到故障並執行切換之前。
上述思路現已完成自動化轉換,親測成功,說明思路正確。
以上就是主從複製問題引起的架構優化思考的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

隨著互聯網的快速發展,Web應用程式越來越多地整合了資料庫操作。 MySQL作為一款世界知名的關聯式資料庫系統,使用廣泛。在高並發的Web應用中,MySQL主從複製是提高資料庫效能和可用性的重要方式。本文將介紹如何使用PHP實作MySQL資料庫主從複製。一、什麼是MySQL主從複製MySQL主從複製是指將一個MySQL資料庫伺服器的資料複製到另一個伺服器上

建立高可用的MySQL叢集:主從複製與負載平衡的最佳實踐指南近年來,隨著互聯網的快速發展,資料庫已成為大部分Web應用的核心資料儲存和處理引擎之一。在這個場景下,高可用性和負載平衡成為了資料庫架構設計中的重要考量。而MySQL作為最受歡迎的開源關係型資料庫之一,其叢集化部署方案備受關注。本文將介紹如何透過MySQL主從複製與負載平衡實現高可用的資料庫集群

MySQL資料庫是一種非常流行的關聯式資料庫管理系統,支援多種資料複製技術,其中較常用的是主從複製技術。本文將介紹MySQL中的資料主從複製技術,包括原理、實作方法、常見問題及因應措施等面向。一、主從複製技術的原理MySQL中的主從複製技術可以將一個MySQL資料庫的資料複製到其他伺服器上,以實現資料備份、負載平衡、讀寫分離等功能。它的基本原理是將主資料庫

Redis是一個開源的基於記憶體的鍵值儲存系統,常用於快取、佇列和即時資料處理等場景。在大規模應用時,為了提高Redis的可用性和效能,常常需要採用分散式架構,其中主從複製是常用的機制。本文將介紹Redis的主從複製功能,包括定義、原理、配置和應用場景等面向。一、定義Redis的主從複製是指將一個Redis節點(即主節點)的資料自動同步到其他節點(即從節點

如何配置MySQL資料庫的主從複製? MySQL資料庫的主從複製是一種常見的資料備份和高可用性解決方案。透過配置主從複製,可以實現將資料從一個MySQL伺服器(主伺服器)同步到另一個(從伺服器),從而提高資料庫的可用性和效能。以下將介紹如何在MySQL資料庫中設定主從複製,並提供對應的程式碼範例。確保MySQL伺服器安裝並啟動首先,確保你的系統中已經安裝了MyS

MySQL中的主從複製和高可用架構隨著互聯網應用和資料量的不斷增長,資料庫的高可用性和可擴展性變得越來越重要。 MySQL作為一種使用廣泛的開源關係型資料庫,提供了主從複製和高可用架構的解決方案。主從複製是指將一個MySQL資料庫實例作為主庫(master),並將其資料複製到一個或多個從庫(slave)的過程。這種複製的方式可以實現資料的冗餘備份以及讀寫分離,

叢集模式下的負載平衡與災備:MySQL主從複製的深度解析與實務隨著網路產業的快速發展,資料儲存與處理的需求越來越高。在應對高並發存取和海量資料儲存的情況下,叢集模式成為了常見的解決方案。而負載平衡與災備則是叢集系統中的重要組成部分,其中MySQL主從複製更是一種被廣泛應用的方式。本文將深入探討叢集模式下的負載平衡與災備,並著重分析MySQL主從複製的原理

Memcached是一個開源的高效能分散式記憶體物件快取系統,可用於加快web應用程序,尤其是在大規模資料快取方面表現良好。對於該系統而言,主從複製是一種非常重要的功能,它可以用於保證資料的可靠性和高可用性。本文將介紹如何使用PHP實作Memcached資料庫主從複製。主從模式介紹主從模式是Memcached伺服器的一種分散式結構,它由至少兩個伺服器組成:一個
