您可以通過調用DTS的相關介面,為Redis企業版執行個體配置單向或雙向資料同步。本文介紹相關注意事項及範例程式碼。
前提條件
源和目標執行個體為Tair(企業版)執行個體(5.0版本)。
單向同步時,不支援源執行個體為容量儲存型;雙向同步時,不支援源和目標執行個體為容量儲存型。
源雲資料庫Tair(相容Redis)為企業版(持久記憶體型)時,需要使用者開啟appendonly參數。
架構類型不限制,即支援叢集版、標準版和讀寫分離版。
注意事項
雙向資料同步時,正向資料同步作業會執行 全量資料初始化 和 增量資料同步 ,反向資料同步作業僅執行增量資料同步。
警告為保障資料一致性,雙向資料同步作業運行期間,請勿在兩端資料庫同時對同一個key執行修改或寫入操作。
DTS在執行全量資料初始化時將佔用源庫和目標庫一定的資源,可能會導致資料庫伺服器負載上升。如果資料庫業務量較大或伺服器規格較低,可能會加重資料庫壓力,甚至導致資料庫服務不可用。建議您在執行資料移轉前謹慎評估,在業務低峰期執行資料同步。
請勿在源執行個體中執行
FLUSHDB
和FLUSHALL
命令,否則將導致源和目標的資料不一致。若目標資料庫記憶體不足,觸發資料逐出時,由於雲資料庫 Tair(相容 Redis)的預設資料逐出策略(maxmemory-policy)為volatile-lru,會導致目標庫與源庫資料不一致的情況,但不會影響任務的正常運行。
為避免該情況發生,建議將目標庫的資料逐出原則設定為noeviction,當目標庫記憶體不足時,資料會寫入失敗,同時任務也會失敗,但目標庫不會因為資料逐出而遺失資料。
說明關於資料逐出策略詳情,請參見Redis資料逐出策略介紹。
如果源庫中的某些Key使用了到期(expire)策略,由於可能存在Key已到期但未被及時刪除的情況,所以在目標庫中查看到的Key數量(例如通過info命令查看)會比源庫的Key數量少。
說明源和目標庫中,未設定到期策略或未到期的Key數量是一致的。
如果目標Redis執行個體沒有開通直連訪問,DTS將採用代理轉寄模式將資料寫入目標執行個體。
說明關於直連訪問的開通方法,請參見開通直連訪問。
同步期間,如源Redis執行個體發生擴縮容(如增加或者減少分區)、規格變更配置(如擴大記憶體),則您需重新設定任務。且為保障資料一致性,在重新設定任務前,建議先清空已同步至目標Redis的資料。
同步期間,如源Redis執行個體的串連地址變化(如遷移可用性區域、傳統網路切換專用網路),則您需要重新設定任務。
源庫單機版Redis同步到目標庫叢集版Redis的操作限制:由於叢集cluster只允許單個命令操作單個slot,若在源庫執行多Key操作時,Key不在同一個slot或涉及多個slot,則會出現以下報錯:
CROSSSLOT Keys in request don't hash to the same slot
建議在DTS同步過程中僅執行單Key操作,以免導致鏈路中斷。
若目標執行個體的架構類型為叢集版且某一個分區達到了記憶體上限,或目標執行個體的儲存空間不足時,DTS任務會因記憶體溢出(Out of Memory)而失敗。
若源或目標執行個體已開啟透明資料加密TDE功能,則暫不支援通過DTS同步資料。
若源執行個體為自建Redis,則Slave和Master之間的複製逾時時間參數repl-timeout建議使用
config set repl-timeout 600
命令設定為600秒。若來源資料庫資料量比較大,可以適當增大repl-timeout參數的值。雙向同步執行個體包含正向和反向同步任務,在配置或重設雙向同步執行個體時,若其中一個任務的目標對象是另一個任務待同步的對象:
僅允許其中一個任務同步全量和增量資料,另一個任務僅支援同步增量資料。
當前任務的來源資料僅支援同步到當前任務的目標端,同步過來的資料不會作為另一個任務的來源資料繼續同步。
費用說明
同步類型 | 鏈路配置費用 |
庫表結構同步和全量資料同步 | 不收費。 |
增量資料同步 | 收費,詳情請參見計費概述。 |
功能限制
不支援級聯單向同步,相關介紹請參見資料同步拓撲介紹。
支援的同步命令
APPEND
BITOP、BLPOP、BRPOP、BRPOPLPUSH
DECR、DECRBY、DEL
EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT
GEOADD、GETSET
HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、HSETNX
INCR、INCRBY、INCRBYFLOAT
LINSERT、LPOP、LPUSH、LPUSHX、LREM、LSET、LTRIM
MOVE、MSET、MSETNX、MULTI
PERSIST、PEXPIRE、PEXPIREAT、PFADD、PFMERGE、PSETEX
RENAME、RENAMENX、RPOP、RPOPLPUSH、RPUSH、RPUSHX
SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE
UNLINK、ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、ZREMRANGEBYSCORE
SWAPDB(當源或目標執行個體的架構為叢集版時不支援)
不支援同步PUBLISH命令。
對於通過EVAL或者EVALSHA調用Lua指令碼,在增量資料同步時,由於目標端在執行指令碼時不會明確返回執行結果,DTS無法確保該類型指令碼能夠執行成功。
對於List,由於DTS在調用sync或psync進行重傳時,不會對目標端已有的資料進行清空,可能導致出現重複資料。
準備工作
為避免主帳號泄露AccessKey帶來的安全風險,建議您建立RAM使用者,授予RAM使用者訪問DTS資源的許可權,再使用RAM使用者的AccessKey來調用SDK。詳情請參見帳號存取控制。
建立資料同步作業
登入OpenAPI門戶。
在輸入參數中根據實際情況填寫參數。
參數
說明
傳入值
SourceRegion
來源資料庫執行個體所屬地區的ID。
請根據實際情況填寫。
DestRegion
目標資料庫執行個體所屬地區的ID。
Topology
同步拓撲,取值為:
oneway(預設):單向同步。
bidirectional:雙向同步。
SynchronizationJobClass
資料同步執行個體的規格,取值為:micro、small、medium、large。
PayType
付費類型,取值為:
PrePaid:預付費。
PostPaid(預設):隨用隨付。
SourceEndpoint.InstanceType
來源資料庫執行個體的類型。
填入Redis。
DestinationEndpoint.InstanceType
目標資料庫執行個體的類型。
填入Redis。
說明更多參數說明資訊,請參見購買同步執行個體。
單擊頁面下方的發起調用按鈕。
在右側調用結果頁簽中,查看調用結果和返回資訊。
重要若調用失敗,您需要根據返回結果中Message的提示資訊,修複後重新調用,直至調用成功。
可選:擷取SDK範例程式碼。
單擊SDK樣本頁簽。
選擇SDK版本和程式設計語言。
單擊代碼地區右上方的按鈕,複製代碼。
配置資料同步作業(單向)
本樣本中,源執行個體的資料庫帳號需具備讀許可權,目標執行個體的資料庫帳號需具備讀寫權限。
配置單向資料同步時,您也可以將自建Redis資料庫或雲資料庫Tair(相容Redis)社區版執行個體作為源庫或目標庫,配置方法與本案例類似(需調整對應的請求參數,例如MigrationReserved
)。
配置資料同步作業(雙向)
本樣本中,用於資料同步的資料庫帳號需具備讀寫權限。
配置正向資料同步作業,詳情請參見配置資料同步作業(單向)。
等待正向資料同步作業初始化完成(即轉變為同步中狀態)。
說明您可以通過控制台或調用查詢一個資料同步執行個體狀態介面查看資料同步作業的狀態資訊。
配置反向資料同步作業。
相關文檔
通過同步效能展示功能,您可以瞭解資料同步作業的運行狀態,為您管理資料同步作業提供參考依據。
在資料同步過程中,您可以新增或移除同步對象。