在少寫多讀的情境下,主執行個體會有較大的讀請求處理壓力,可能影響到主執行個體的效能。RDS MySQL的讀寫分離功能通過資料庫Proxy 位址(讀寫屬性的代理終端)實現讀寫請求的自動轉寄,將讀請求分流到唯讀執行個體,減輕主執行個體的壓力。
介紹
資料庫代理的讀寫分離功能,可使寫請求自動轉寄到主執行個體,讀請求自動轉寄到各個唯讀執行個體,實現讀寫請求的自動分流,減輕主執行個體的壓力。
優勢
統一讀寫分離地址,方便維護。
不開通讀寫分離時,您需要在應用程式中分別配置主執行個體和每個唯讀執行個體的串連地址,才能實現將寫請求發往主執行個體而將讀請求發往唯讀執行個體。
RDS讀寫分離功能提供資料庫代理串連地址,您串連該地址後即可對主執行個體和唯讀執行個體進行讀寫操作,讀寫請求被自動轉寄到對應執行個體,可降低維護成本。
同時,您只需添加唯讀執行個體的個數,即可不斷擴充系統的處理能力,應用程式無需做任何修改。
原生鏈路支援,提升效能,減少維護成本。
如果您在雲上自行搭建代理層實現讀寫分離,資料在到達資料庫之前需要經歷多個組件的語句解析和轉寄,對響應延遲有較大的影響。而RDS讀寫分離內建在RDS原生生態裡,能夠有效降低延遲,提升處理速度,同時減少客戶的維護成本。
可設權重和閾值,符合多情境使用。
您可以設定主執行個體和唯讀執行個體的讀請求權重,通過設定不同的權重來控制流程量的分發,以及設定唯讀執行個體的延遲閾值。
執行個體健全狀態檢查,提升資料庫系統的可用性。
讀寫分離模組將自動對主執行個體和唯讀執行個體進行健全狀態檢查,當發現某個執行個體出現宕機或者延遲超過閾值時,將不再分配讀請求給該執行個體,讀寫請求在剩餘的健康執行個體間進行分配。以此確保單個唯讀執行個體發生故障時,不會影響應用的正常訪問。當執行個體被修複後,RDS會自動將該執行個體納回請求分配體系內。
說明為避免單點故障,建議您為一個主執行個體建立至少兩個唯讀執行個體。
請求轉寄邏輯
只發往主執行個體
INSERT、UPDATE、DELETE、SELECT FOR UPDATE。
所有DDL操作(建表/庫、刪表/庫、變更表結構、許可權等)。
所有事務中的請求。
使用者自訂函數。
預存程序。
EXECUTE語句。
使用到暫存資料表的請求。
SELECT last_insert_id()。
所有對使用者變數的查詢和更改。
KILL(SQL語句中的KILL,非命令KILL)。
發往唯讀執行個體或主執行個體
非事務中的SELECT。
COM_STMT_EXECUTE命令。
總是發往所有執行個體
所有系統變數的更改。
USE命令。
SHOW PROCESSLIST。
說明執行SHOW PROCESSLIST命令後,代理將返回所有節點的PROCESSLIST匯總資訊。
COM_STMT_PREPARE命令。
COM_CHANGE_USER/COM_QUIT/COM_SET_OPTION等命令。
讀寫屬性處理邏輯
讀寫屬性 | 許可權分配方式 | 主執行個體權重 | 正常情況 | 刪除最後一個唯讀執行個體 | 唯讀執行個體全部故障 |
唯讀 | 系統分配或自訂 | 主執行個體權重不可設定 | 主執行個體:不可讀不可寫(不轉寄) Proxy 位址:可讀不可寫 | 主執行個體:不可讀不可寫(不轉寄) Proxy 位址:不可讀不可寫(串連報錯) | 主執行個體:不可讀不可寫(不轉寄) Proxy 位址:不可讀不可寫(串連報錯) |
讀寫 | 系統分配 | 等於0 具體請參見系統預設讀權重分配規則。 | 主執行個體:不可讀可寫 Proxy 位址:可讀可寫 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 |
自訂 | 大於0 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 | |
等於0 | 主執行個體:不可讀可寫 Proxy 位址:可讀可寫 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 | 主執行個體:可讀可寫 Proxy 位址:可讀可寫 |
不轉寄:表示在唯讀屬性中,主執行個體不參與唯讀請求的轉寄。
串連報錯:表示在唯讀屬性中,代理終端不可讀不可寫時串連會報錯。
在讀寫入模式下,當主執行個體權重配置為0時,預設不將讀請求轉寄到主執行個體,但是當唯讀節點異常,強制Hint指定,或者開啟了事務拆分的情況下,讀請求會被轉寄到主執行個體。
更多資訊,請參見設定讀寫屬性和讀權重。
操作步驟
注意事項
請參見資料庫代理注意事項。
驗證讀寫分離
請參見驗證讀寫分離。
常見問題
請參見資料庫代理常見問題。