如何配置備庫讀帳號

更新時間:
Copy as MD

本文介紹如何通過ALTER USER ... READ_STRATEGY文法為PolarDB-X叢集帳號配置備庫讀策略,將臨時查數、巨量資料拖數等讀流量路由至Follower節點,避免影響Leader節點上的線上業務。

背景介紹

PolarDB-XDN(資料節點)基於Paxos多數派複製協議實現高可用,節點角色分為Leader、Follower、LoggerLearner。詳情請參見高可用(RPO=0)

在日常營運中,DMS查數或巨量資料拖數等操作可能會打高DN Leader的資源,進而影響線上業務的穩定性。通過配置備庫讀帳號,可以將此類查數、拖數流量路由至Follower節點,從而避免對Leader節點的影響,保障線上業務的正常運行。

警告
  • 核心規則:備庫讀僅路由讀請求,寫請求不會進入備庫。只有不顯式開啟事務的SELECT語句會被路由到Follower節點。所有寫操作(INSERTUPDATEDELETE等)以及明確交易(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節點執行。

讀策略說明

備庫讀支援兩種讀策略,您可以根據業務對資料一致性的要求進行選擇:

策略

關鍵字

一致性

說明

強一致

follower

全域一致

可以查看到主執行個體上提交的最新資料,滿足全域資料查詢一致性。如果主備延遲過大(常見於DDL期間),查詢會報錯。

弱一致

stale

最終一致

查看當前Follower上的最新資料,如果主備間存在資料同步延遲,不會等待,查詢到資料立即返回。

關閉

none

關閉備庫讀,恢複為預設行為。

說明

強一致與弱一致的區別在於是否下發LSN(Log Sequence Number)。強一致模式下,Follower需要追上LeaderLSN後才返回查詢結果,而弱一致模式下則直接返回當前Follower上的資料。在讀已提交(RC)及以下隔離等級不保證強一致。

注意事項

使用備庫讀前,請務必瞭解以下限制:

  • 備庫讀僅對讀生效,寫不會進入備庫。只有不顯式開啟事務的SELECT語句會路由到Follower。所有寫操作(INSERTUPDATEDELETE等)和明確交易中的查詢仍路由到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;

步驟四:驗證配置是否生效

使用以下語句查看當前執行個體上所有備庫讀帳號的路由規則(包括followerstale兩種策略):

SHOW ROUTING_RULES;

返回結果中USER_NAME列對應配置了備庫讀的帳號,ROUTING_TYPE列對應當前策略(followerstale)。如果只需查看強一致策略的帳號,可以加過濾條件:

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;