中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

MySQL讀寫分離怎么實現

發布時間:2021-12-04 13:36:19 來源:億速云 閱讀:229 作者:iii 欄目:互聯網科技

這篇文章主要介紹“MySQL讀寫分離怎么實現”,在日常操作中,相信很多人在MySQL讀寫分離怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL讀寫分離怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

MySQL讀寫分離怎么實現

隨著業務量的發展和數據量的增長,單機版本的數據庫很難滿足業務需要,而MySQL最常見的性能擴展方法是“讀寫分離”,其本質是將訪問壓力分散到多個MySQL節點上,但存儲壓力并沒有分散,“分庫分表”可以分散訪問和存儲壓力,但是實現難度維護成本都會大幅增加。

MySQL讀寫分離怎么實現

▲讀寫分離架構圖▲

  • 需要主從的集群架構,一主一從或者一主多從;

  • 主庫響應寫請求,從庫響應讀請求;

  • 主庫通過復制將數據同步到從庫,每個節點都保存一份業務數據。

MySQL讀寫分離怎么實現

業界實現MySQL的“讀寫分離”有兩種常見方法,客戶端實現和代理實現,兩種方法各有利弊,需要結合各自業務特點、系統架構、運維能力來選擇實現。因為引入代理會使系統架構更加復雜,同時代理自身要考慮性能、高可用、穩定性等因素,中小公司一般使用客戶端方法實現讀寫分離。而大公司有資源去投入數據庫代理的開發和維護,當接入的業務越多,帶來的價值就越明顯。

首先說下客戶端實現方法,例如java語言可以基于MyBatis和Hibernate簡單封裝后,即可實現讀寫分離,架構圖如下:

MySQL讀寫分離怎么實現

代理實現方法,需要引入數據庫代理,實現讀寫分離和數據庫管理功能,代理兼容SQL協議,對于客戶端來說代理就是數據庫,架構圖如下:

MySQL讀寫分離怎么實現

對比兩種架構的優缺點:

MySQL讀寫分離怎么實現

無論哪種架構,實現邏輯并不復雜,但是有一個細節需要特別注意:MySQL主從復制延遲。

MySQL的復制是異步的,盡管針對不同延遲的原因有響應的優化方案,但是延遲是客觀存在的,是不可能百分百避免的。當只讀出現較大延遲的時候,就會出現數據不一致,讀到的數據是主庫提交前的,稱之為“過期讀”,這時業務上可能就會出現問題。常見的解決方法有:

  • 核心業務讀寫都指向主庫,非核心業務采用讀寫分離。比如金融類業務,為了保證數據的一致性,犧牲擴展性。比如論壇業務,發帖后會晚一些查詢到,它帶來的影響會小很多,是可以忍受的;

  • 二次讀取,讀失敗后再查一遍,它和業務邏輯無關,只需要對數據庫訪問層重新封裝即可,實現代價小。不過某些場景下,它擴大的讀請求的數量,增加了數據庫的壓力,比如DDoS攻擊,很容易把數據庫壓垮;

  • 判斷延遲再讀取,讀取從庫前判斷是否有延遲,沒有延遲再從庫查詢,如果有延遲到主庫查詢。MySQL自身提供判斷延遲的監控方法,如果開啟了GTID,直接比較從庫的Retrieved_Gtid_Set和Executed_Gtid_Set值,它們相同則表示從庫沒有延遲;沒有開啟GTID的情況下,需要比較兩組值, Master_Log_File和Relay_Master_Log_File、Read_Master_Log_Pos和Exec_Master_Log_Pos這兩組值完全相同,則表示從庫沒有延遲。

MySQL讀寫分離怎么實現

京東智聯云RDS-MySQL支持“讀寫分離代理”功能,創建只讀實例后,開啟讀寫分離代理,就可以在程序中配置讀寫代理的地址,由讀寫代理實現讀請求被自動轉發到只讀實例,寫請求被自動轉發到主實例。目前MySQL5.6-8.0,Percona和Mariadb都支持開啟只讀代理。詳細介紹信息見:https://docs.jdcloud.com/cn/rds/create-readwriteproxy

下面從該功能的數據面和控制面來介紹下基本原理和最佳實踐。

MySQL讀寫分離怎么實現

用戶在創建讀寫分離代理的時候會配置只讀庫延遲、健康檢查、負載均衡策略等參數,根據用戶業務特點,實現讀寫分離功能。

京東智聯云“讀寫分離代理”創建界面如下:

MySQL讀寫分離怎么實現

  1. 只讀實例延遲閾值:只讀實例與主實例的延遲超過閾值后,只讀實例將從讀寫代理后端被移除。

  2. 負載均衡策略:讀寫代理分發讀寫請求的負載均衡策略,支持最少活躍連接數、最少連接數、最小同步時延、平均響應時延。

  3. 連接超時時間:只讀實例健康檢查的方法。超時后只讀實例將從讀寫代理后端被移除。

  4. 重復次數:只讀實例健康檢查的方法。重試次數超過指定次數后,只讀實例健康檢查失敗,將從讀寫代理后端被移除。

  5. 檢查時間間隔:只讀實例健康檢查的方法,根據時間間隔對讀寫代理后端的只讀實例進行健康檢查。

最佳實踐:只讀實例延遲閾值根據業務特點配置,默認時間是100s,強烈建議該值大于檢查時間間隔時間。

通過RDS控制臺,可以管理“讀寫分離代理”的整個生命周期,包括創建、修改配置、刪除和開啟公網訪問。除此之外,“讀寫分離代理”還可以感知轉發MySQL實例的高可用切換、修改配置流程、只讀實例的創建和刪除。

  1. 高可用切換,當轉發的MySQL發生主從高可用切換的時候,“讀寫分離代理”會自動調整寫請求轉發到新的主庫上;

  2. 修改配置,當轉發的MySQL主從實例或者只讀實例觸發擴容、縮容的業務流程時,“讀寫分離代理”會自動調整將讀寫請求轉發到新的實例;

  3. 只讀實例的創建和刪除,“讀寫分離代理”會在用戶添加新只讀實例后,根據負載均衡算法,自動轉發請求到新只讀實例;當用戶刪除只讀實例后,“讀寫分離代理”會自動停止轉發請求到已刪除的只讀實例。

到此,關于“MySQL讀寫分離怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德昌县| 车险| 武陟县| 浪卡子县| 凤山市| 腾冲县| 寻乌县| 本溪市| 伊宁县| 桃源县| 镶黄旗| 黄梅县| 大同县| 江油市| 宽城| 贵溪市| 扶风县| 修水县| 陇川县| 隆尧县| 宁德市| 沾益县| 青铜峡市| 南京市| 竹山县| 荣昌县| 南江县| 靖州| 黄大仙区| 依安县| 武邑县| 西贡区| 嵩明县| 安远县| 青冈县| 乌鲁木齐市| 大荔县| 建湖县| 崇信县| 兰考县| 定兴县|