如何配置備庫讀帳號
本文介紹如何通過ALTER USER ... READ_STRATEGY文法為PolarDB-X叢集帳號配置備庫讀策略,將臨時查數、巨量資料拖數等讀流量路由至Follower節點,避免影響Leader節點上的線上業務。
背景介紹
PolarDB-X的DN(資料節點)基於Paxos多數派複製協議實現高可用,節點角色分為Leader、Follower、Logger和Learner。詳情請參見高可用(RPO=0)。
在日常營運中,DMS查數或巨量資料拖數等操作可能會打高DN Leader的資源,進而影響線上業務的穩定性。通過配置備庫讀帳號,可以將此類查數、拖數流量路由至Follower節點,從而避免對Leader節點的影響,保障線上業務的正常運行。
核心規則:備庫讀僅路由讀請求,寫請求不會進入備庫。只有不顯式開啟事務的
SELECT語句會被路由到Follower節點。所有寫操作(INSERT、UPDATE、DELETE等)以及明確交易(BEGIN ... COMMIT)中的查詢,仍然路由到Leader節點執行。配置備庫讀帳號不會改變寫操作的路由行為。重要提醒:備庫(Follower)承擔著高可用切換的重要使命,需要對Leader的日誌進行即時複製。高強度使用Follower可能會影響日誌複製,拖慢高可用切換甚至導致切換失敗。因此,備庫讀帳號不可用於穩定的線上流量,僅適用於查數、拖數等少量隨機流量情境。
備庫讀與讀寫分離的區別
在使用前,請先瞭解備庫讀與讀寫分離的區別,以選擇適合您業務情境的方案:
對比項 | 備庫讀帳號 | 讀寫分離 | 說明 |
使用的DN節點 | 主執行個體的Follower DN | 唯讀執行個體的Learner DN | 備庫讀直接複用主執行個體的Follower;讀寫分離使用獨立的唯讀執行個體 |
是否參與Paxos投票 | 是,參與投票和決策 | 否,不參與投票和決策 | Follower承擔高可用切換職責,Learner不影響高可用 |
對系統的影響 | 有影響,可能影響高可用切換 | 無影響 | 高強度查詢備庫會拖慢日誌複製 |
適用情境 | 臨時查數、巨量資料拖數等少量隨機流量 | 穩定的讀流量分流 | 按流量穩定性與規模選擇 |
選型建議:如果您的業務需要穩定的讀流量分流,推薦使用讀寫分離方案。備庫讀帳號更適合臨時性的、少量的查數和拖數情境。
版本要求
僅支援企業版執行個體。
執行個體版本要求:
2.5.0版本:需為
polardb-2.5.0_5.4.20-20260312及以上。2.6.0版本:需為
polardb-2.6.0_5.4.21-20260521及以上。
文法
通過以下語句為指定帳號配置備庫讀策略:
ALTER USER 'user_name'@'hostname' READ_STRATEGY [follower | stale | none];配置生效後,使用該帳號串連執行個體發起的非事務內SELECT查詢將被路由至Follower節點執行。
讀策略說明
備庫讀支援兩種讀策略,您可以根據業務對資料一致性的要求進行選擇:
策略 | 關鍵字 | 一致性 | 說明 |
強一致 |
| 全域一致 | 可以查看到主執行個體上提交的最新資料,滿足全域資料查詢一致性。如果主備延遲過大(常見於DDL期間),查詢會報錯。 |
弱一致 |
| 最終一致 | 查看當前Follower上的最新資料,如果主備間存在資料同步延遲,不會等待,查詢到資料立即返回。 |
關閉 |
| — | 關閉備庫讀,恢複為預設行為。 |
強一致與弱一致的區別在於是否下發LSN(Log Sequence Number)。強一致模式下,Follower需要追上Leader的LSN後才返回查詢結果,而弱一致模式下則直接返回當前Follower上的資料。在讀已提交(RC)及以下隔離等級不保證強一致。
注意事項
使用備庫讀前,請務必瞭解以下限制:
備庫讀僅對讀生效,寫不會進入備庫。只有不顯式開啟事務的
SELECT語句會路由到Follower。所有寫操作(INSERT、UPDATE、DELETE等)和明確交易中的查詢仍路由到Leader。許可權要求:只有高許可權帳號或帳號自身可以配置備庫讀策略,其他帳號無法配置。
帳號命名規則:
user_name只能由字母、數字、底線(_)和貨幣符號($)構成,否則會報錯。範圍說明:帳號是叢集層級的,但備庫讀屬性僅對主執行個體生效。
切換讀策略必須先關閉:對已啟用備庫讀的帳號,不能直接從一種策略切換到另一種策略(例如從
follower直接改為stale),否則會報錯ERR_EXECUTOR: read strategy already set。請先執行ALTER USER ... READ_STRATEGY none;關閉當前策略,再設定為新策略。
使用方法
步驟一:建立專用帳號
推薦通過控制台建立帳號,具體操作請參見建立帳號。您也可以使用SQL語句建立:
CREATE USER 'newuser'@'%' IDENTIFIED BY 'mypassword';步驟二:配置帳號許可權
根據您的業務需求配置相應許可權。對於查數情境,推薦僅授予唯讀許可權:
GRANT SELECT ON *.* TO 'newuser'@'%';步驟三:配置備庫讀策略
使用高許可權帳號或該帳號自身執行以下語句配置備庫讀策略。
強一致備庫讀樣本(推薦用於對資料一致性有要求的查數情境):
ALTER USER 'newuser'@'%' READ_STRATEGY follower;弱一致備庫讀樣本(適用於對延遲容忍度較高的拖數情境):
ALTER USER 'newuser'@'%' READ_STRATEGY stale;關閉備庫讀樣本:
ALTER USER 'newuser'@'%' READ_STRATEGY none;
步驟四:驗證配置是否生效
使用以下語句查看當前執行個體上所有備庫讀帳號的路由規則(包括follower和stale兩種策略):
SHOW ROUTING_RULES;返回結果中USER_NAME列對應配置了備庫讀的帳號,ROUTING_TYPE列對應當前策略(follower或stale)。如果只需查看強一致策略的帳號,可以加過濾條件:
SHOW ROUTING_RULES WHERE ROUTING_TYPE = 'follower';最佳實務樣本
情境一:DMS查數專用帳號(強一致)
適用於營運人員通過DMS查詢線上資料、要求看到最新資料的情境:
-- 1. 建立帳號(推薦通過控制台建立並配置相應許可權)。
CREATE USER 'dms_reader'@'%' IDENTIFIED BY 'your_secure_password';
GRANT SELECT ON *.* TO 'dms_reader'@'%';
-- 2. 配置強一致備庫讀(使用高許可權帳號或 dms_reader 帳號執行)。
ALTER USER 'dms_reader'@'%' READ_STRATEGY follower;情境二:巨量資料拖數專用帳號(弱一致)
適用於巨量資料團隊定期拖取資料、對即時性要求不高的情境:
-- 1. 建立帳號(推薦通過控制台建立)。
CREATE USER 'bigdata_sync'@'%' IDENTIFIED BY 'your_secure_password';
-- 2. 僅授予唯讀許可權。
GRANT SELECT ON *.* TO 'bigdata_sync'@'%';
-- 3. 配置弱一致備庫讀(使用高許可權帳號或 bigdata_sync 帳號執行)。
ALTER USER 'bigdata_sync'@'%' READ_STRATEGY stale;