存在問題
主從複製架構多次出現複製停滯問題如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)!

随着互联网的飞速发展,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)的过程。这种复制的方式可以实现数据的冗余备份以及读写分离,

随着互联网和移动互联网的迅速发展,Web应用程序在我们的日常生活中扮演着越来越重要的角色。在这些Web应用程序中,PHP和数据库被广泛使用。但是,随着用户量的增加,Web应用程序的性能问题也越来越突出。因此,在Web应用程序中,PHP和数据库架构优化变得非常重要。使用缓存MySQL缓存是一种在请求中保存数据的技术。PHP可以通过使用memcached

Memcached是一个开源的高性能分布式内存对象缓存系统,可用于加快web应用程序,尤其是在大规模数据缓存方面表现良好。对于该系统而言,主从复制是一种非常重要的功能,它可以用于保证数据的可靠性和高可用性。本文将介绍如何使用PHP实现Memcached数据库主从复制。主从模式介绍主从模式是Memcached服务器的一种分布式结构,它由至少两个服务器组成:一个


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

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

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

Dreamweaver Mac版
視覺化網頁開發工具