Data Transmission Service支援Redis資料庫的單向同步,適用於異地多活、資料異地容災等多種應用情境。本文以ECS上的自建Redis同步至Redis執行個體為例,介紹資料同步作業的配置流程。
完成資料同步作業的配置後,請勿變更來源資料庫或目標資料庫的架構類型(例如將主從架構變更為叢集架構),否則會導致資料同步失敗。
前提條件
源Redis資料庫的版本為2.8、3.0、3.2、4.0或5.0版本。
說明如需跨版本同步(僅支援從低版本同步到高版本)請提前確認相容性。例如建立隨用隨付的Redis執行個體來測試,測試完成後可將該執行個體釋放或轉為訂用帳戶。
目標Redis執行個體的儲存空間需大於源Redis資料庫已使用的儲存空間。
當源Redis資料庫為叢集架構時,叢集的每個節點必須能夠執行
psync命令,且串連的密碼一致。源Redis執行個體Slave和Master之間的複製逾時時間參數repl-timeout,預設為60秒, 建議使用
config set repl-timeout 600命令設定為600秒。若來源資料庫資料量比較大,可以適當增大repl-timeout參數的值。
注意事項
DTS在執行全量資料初始化時將佔用源庫和目標庫一定的資源,可能會導致資料庫伺服器負載上升。如果資料庫業務量較大或伺服器規格較低,可能會加重資料庫壓力,甚至導致資料庫服務不可用。建議您在執行資料同步前謹慎評估,在業務低峰期執行資料同步。
如果源庫中的某些Key使用了到期(expire)策略,由於可能存在Key已到期但未被及時刪除的情況,所以在目標庫中查看到的Key數量(例如通過info命令查看)會比源庫的Key數量少。
說明源和目標庫中,未設定到期策略或未到期的Key數量是一致的。
如果在來源資料庫的設定檔redis.conf中配置了
bind參數,請將該參數的值設定為ECS的內網IP地址以保障DTS可以正常串連來源資料庫。為保障同步鏈路穩定性,建議將源Redis資料庫的設定檔redis.conf中
repl-backlog-size參數的值適當調大。為保障同步品質,DTS會在源Redis資料庫中插入一個key:
DTS_REDIS_TIMESTAMP_HEARTBEAT,用於記錄更新時間點。如果配置Redis叢集間的資料同步,請勿在源叢集中執行
FLUSHDB和FLUSHALL命令,否則將導致源和目標的資料不一致。若目標資料庫記憶體不足,觸發資料逐出時,由於雲資料庫 Tair(相容 Redis)的預設資料逐出策略(maxmemory-policy)為volatile-lru,會導致目標庫與源庫資料不一致的情況,但不會影響任務的正常運行。
為避免該情況發生,建議將目標庫的資料逐出原則設定為noeviction,當目標庫記憶體不足時,資料會寫入失敗,同時任務也會失敗,但目標庫不會因為資料逐出而遺失資料。
說明關於資料逐出策略詳情,請參見Redis資料逐出策略介紹。
同步期間,如自建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)而失敗。
為保障同步品質,DTS會在源庫中插入一個首碼為DTS_REDIS_TIMESTAMP_HEARTBEAT的Key用於記錄更新時間點,如果源庫為叢集架構,DTS會在各個shard上均插入該Key。同步過程中會過濾該Key,同步任務結束,該Key就會到期。
如果源庫為唯讀執行個體或者DTS帳號沒有寫(SETEX)許可權,上報的延遲可能不準確。
若目標Redis執行個體已開啟透明資料加密TDE功能,則暫不支援通過DTS同步資料。
若在資料同步過程中出現包括但不限於以下情況,可能會使全量資料重新同步至目標端,從而導致資料不一致。
源端或目標端Redis發生串連閃斷,導致斷點續傳失敗。
源端或目標端Redis發生主備切換或故障切換。
源端或目標端Redis的串連地址發生變化。
修改DTS執行個體的同步對象。
若雲資料庫Tair(相容Redis)執行個體已開啟TLS(Transport Layer Security)加密功能,則必須以SSL安全連線的方式接入到DTS(不支援TLSv1.3)。當前暫不支援已開啟SSL的雲資料庫Tair(相容Redis)執行個體,以雲執行個體的方式接入DTS。
若執行個體運行失敗,DTS技術支援人員將在8小時內嘗試恢複該執行個體。在恢複失敗執行個體的過程中,可能會對該執行個體進行重啟、調整參數等操作。
說明在調整參數時,僅會修改執行個體的參數,不會對資料庫中的參數進行修改。可能修改的參數,包括但不限於修改執行個體參數中的參數。
費用說明
| 同步類型 | 鏈路配置費用 |
| 庫表結構同步和全量資料同步 | 不收費。 |
| 增量資料同步 | 收費,詳情請參見計費概述。 |
支援的同步拓撲
一對一單向同步
一對多單向同步
級聯單向同步
關於各類同步拓撲的介紹及注意事項,請參見資料同步拓撲介紹。
支援的同步命令
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、RESTORE、RPOP、RPOPLPUSH、RPUSH、RPUSHX
SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE
ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、ZREMRANGEBYSCORE
SWAPDB、UNLINK(僅當源端Redis執行個體的版本為4.0時支援)
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM
不支援同步PUBLISH命令。
對於通過EVAL或者EVALSHA調用Lua指令碼,在增量資料同步時,由於目標端在執行指令碼時不會明確返回執行結果,DTS無法確保該類型指令碼能夠執行成功。
對於List,由於DTS在調用sync或psync進行重傳時,不會對目標端已有的資料進行清空,可能導致出現重複資料。
操作步驟
購買資料同步執行個體,詳情請參見購買資料同步任務。
說明購買時,源執行個體和目標執行個體均選擇為Redis。
登入資料轉送控制台。
說明若資料轉送控制台自動跳轉至Data Management控制台,您可以在右下角的
中單擊
,返回至舊版資料轉送控制台。在左側導覽列,單擊資料同步。
在同步作業列表頁面頂部,選擇同步的目標執行個體所屬地區。
定位至已購買的資料同步執行個體,單擊配置同步鏈路。
配置資料同步的源執行個體及目標執行個體資訊。

類別
配置
說明
無
同步作業名稱
DTS會自動產生一個同步作業名稱,建議配置具有業務意義的名稱(無唯一性要求),便於後續識別。
源執行個體資訊
執行個體類型
選擇ECS上的自建資料庫。
執行個體地區
購買資料同步執行個體時選擇的源執行個體地區資訊,不可變更。
ECS執行個體ID
選擇作為同步資料來源的ECS執行個體ID。
說明當源Redis資料庫為叢集架構時,選擇任一節點的Master所在的ECS執行個體ID。
資料庫類型
固定為Redis。
執行個體模式
根據源Redis資料庫的架構選擇單機版或叢集版。
連接埠
填入源Redis資料庫的服務連接埠,預設為6379,本案例填入7000。
說明當源Redis資料庫為叢集架構時,填入任一節點的Master的服務連接埠。
資料庫密碼
填入串連源Redis資料庫的密碼。
說明非必填項,如果沒有設定密碼可以不填。
目標執行個體資訊
執行個體類型
選擇Redis執行個體。
執行個體地區
購買資料同步執行個體時選擇的目標執行個體地區資訊,不可變更。
執行個體ID
選擇目標Redis執行個體ID。
資料庫密碼
填入串連目標Redis執行個體的密碼。
說明資料庫密碼格式為<user>:<password>。例如,Redis執行個體自訂的使用者名稱為admin,密碼為Rp829dlwa,則此處填入的資料庫密碼為admin:Rp829dlwa。
單擊頁面右下角的授權白名單並進入下一步。
說明如果源或目標資料庫是阿里雲資料庫執行個體(例如RDS MySQL、ApsaraDB for MongoDB等)或ECS上的自建資料庫,DTS會自動將對應地區DTS服務的IP地址添加到阿里雲資料庫執行個體的白名單或ECS的安全規則中,您無需手動添加,請參見DTS伺服器的IP位址區段。
DTS任務完成或釋放後,建議您手動刪除添加的DTS伺服器IP位址區段。
配置目標已存在表的處理模式和同步對象。

配置
說明
目標已存在表的處理模式
預檢查並報錯攔截:檢查目標庫是否為空白。如果待同步的目標庫為空白,則通過該檢查專案;如果不為空白,則在預檢查階段提示錯誤,資料同步作業不會被啟動。
忽略報錯並繼續執行:跳過目標庫是否為空白的檢查項。
警告選擇為忽略報錯並繼續執行後,如果在同步過程中遇到目標庫中的Key與源庫中的Key相同,會將源庫的資料覆蓋寫入目標庫中,請謹慎選擇。
同步對象
在源庫對象框中單擊待同步的資料庫,然後單擊
將其移動到已選擇對象框。同步對象的選擇粒度為庫,暫不支援Key粒度的選擇。
映射名稱更改
不支援更改映射名稱。
源表DMS_ONLINE_DDL過程中是否複製暫存資料表到目標庫
如源庫使用Data Management(Data Management)執行Online DDL變更,您可以選擇是否同步Online DDL變更產生的暫存資料表資料。
是:同步Online DDL變更產生的暫存資料表資料。
說明Online DDL變更產生的暫存資料表資料過大,可能會導致同步任務延遲。
否:不同步Online DDL變更產生的暫存資料表資料,只同步源庫的原始DDL資料。
說明該方案會導致目標庫鎖表。
源、目標庫無法串連重試時間
當源、目標庫無法串連時,DTS預設重試720分鐘(即12小時),您也可以自訂重試時間。如果DTS在設定的時間內重新串連上源、目標庫,同步任務將自動回復。否則,同步任務將失敗。
說明由於串連重試期間,DTS將收取任務運行費用,建議您根據業務需要自訂重試時間,或者在源和目標庫執行個體釋放後儘快釋放DTS執行個體。
上述配置完成後單擊頁面右下角的下一步。
配置同步初始化選項,當前固定為包含全量資料+增量資料。
說明DTS會將源Redis執行個體中的存量資料同步至目標Redis執行個體中,並同步增量資料。
如果跳出版本相關的報錯提示,請您按照提示將源Redis執行個體升級至指定版本。關於升級版本方式,請參見升級大版本和升級小版本與代理版本。
上述配置完成後,單擊頁面右下角的預檢查並啟動。
說明在同步任務正式啟動之前,會先進行預檢查。只有預檢查通過後,才能成功啟動同步任務。
如果預檢查失敗,單擊具體檢查項後的
,查看失敗詳情。您可以根據提示修複後重新進行預檢查。
如無需修複警示檢測項,您也可以選擇確認屏蔽、忽略警示項並重新進行預檢查,跳過警示檢測項重新進行預檢查。
在預檢查對話方塊中顯示預檢查通過後,關閉預檢查對話方塊,同步作業將正式開始。
等待同步作業的鏈路初始化完成,直至處於同步中狀態。
說明您可以在資料同步頁面,查看資料同步作業的狀態。