本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
數據傳輸服務DTS(Data Transmission Service)支持Redis數據庫的單向同步,適用于異地多活、數據異地容災等多種應用場景。本文以通過專線、VPN網關或智能接入網關接入的自建Redis同步至ECS上的自建Redis為例,介紹數據同步作業的配置流程。
完成數據同步作業的配置后,請勿變更源數據庫或目標數據庫的架構類型(例如將主從架構變更為集群架構),否則會導致數據同步失敗。
前提條件
- 源Redis數據庫的版本為2.8、3.0、3.2、4.0或5.0版本。 說明 目標Redis數據庫支持的版本為2.8、3.0、3.2、4.0或5.0版本,如需跨版本同步(僅支持從低版本同步到高版本)請提前確認兼容性。
- 目標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)權限,上報的延遲可能不準確。
費用說明
同步類型 | 鏈路配置費用 |
庫表結構同步和全量數據同步 | 不收費。 |
增量數據同步 | 收費,詳情請參見計費概述。 |
支持的同步拓撲
一對一單向同步
一對多單向同步
級聯單向同步
關于各類同步拓撲的介紹及注意事項,請參見數據同步拓撲介紹。
支持的同步命令
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。
登錄數據傳輸控制臺。
說明若數據傳輸控制臺自動跳轉至數據管理DMS控制臺,您可以在右下角的中單擊,返回至舊版數據傳輸控制臺。
在左側導航欄,單擊數據同步。
在同步作業列表頁面頂部,選擇同步的目標實例所屬地域。
- 定位至已購買的數據同步實例,單擊配置同步鏈路。
- 配置數據同步的源實例及目標實例信息。
類別 配置 說明 無 同步作業名稱 DTS會自動生成一個同步作業名稱,建議配置具有業務意義的名稱(無唯一性要求),便于后續識別。 源實例信息 實例類型 選擇通過專線/VPN網關/智能接入網關接入的自建數據庫。 實例地區 購買數據同步實例時選擇的源實例地域信息,不可變更。 對端專有網絡 選擇自建數據庫接入的VPC ID。 數據庫類型 固定為Redis。 實例模式 根據源Redis數據庫的架構選擇單機版或集群版。 IP地址 填入源Redis數據庫的IP地址。 說明 當源Redis數據庫為集群架構時,填入任一節點的Master所屬服務器的IP地址。端口 填入源Redis數據庫的服務端口,默認為6379。 說明 當源Redis數據庫為集群架構時,填入任一節點的Master的服務端口。數據庫密碼 填入連接源Redis數據庫的密碼。 說明 非必填項,如果沒有設置密碼可以不填。目標實例信息 實例類型 選擇ECS上的自建數據庫。 實例地區 購買數據同步實例時選擇的目標實例地域信息,不可變更。 實例ID 選擇作為同步目標的ECS實例ID。 說明 當目標Redis數據庫為集群架構時,選擇任一節點的Master所在的ECS實例ID。實例模式 根據目標Redis數據庫的架構選擇單機版或集群版。 端口 填入目標Redis數據庫的服務端口,默認為6379。 說明 當目標Redis數據庫為集群架構時,填入任一節點的Master的服務端口。數據庫密碼 填入連接目標Redis數據庫的密碼。 說明 必填項,否則預檢查會報錯。 - 單擊頁面右下角的授權白名單并進入下一步。 說明
- 如果源或目標數據庫是阿里云數據庫實例(例如RDS MySQL、云數據庫MongoDB版等)或ECS上的自建數據庫,DTS會自動將對應地區DTS服務的IP地址添加到阿里云數據庫實例的白名單或ECS的安全規則中,您無需手動添加,請參見DTS服務器的IP地址段。
- DTS任務完成或釋放后,建議您手動刪除添加的DTS服務器IP地址段。
配置目標已存在表的處理模式和同步對象。
配置
說明
目標已存在表的處理模式
預檢查并報錯攔截:檢查目標庫是否為空。如果待同步的目標庫為空,則通過該檢查項目;如果不為空,則在預檢查階段提示錯誤,數據同步作業不會被啟動。
忽略報錯并繼續執行:跳過目標庫是否為空的檢查項。
警告選擇為忽略報錯并繼續執行后,如果在同步過程中遇到目標庫中的Key與源庫中的Key相同,會將源庫的數據覆蓋寫入目標庫中,請謹慎選擇。
同步對象
在源庫對象框中單擊待同步的數據庫,然后單擊將其移動到已選擇對象框。
同步對象的選擇粒度為庫,暫不支持Key粒度的選擇。
映射名稱更改
不支持更改映射名稱。
源表DMS_ONLINE_DDL過程中是否復制臨時表到目標庫
如源庫使用數據管理DMS(Data Management)執行Online DDL變更,您可以選擇是否同步Online DDL變更產生的臨時表數據。
是:同步Online DDL變更產生的臨時表數據。
說明Online DDL變更產生的臨時表數據過大,可能會導致同步任務延遲。
否:不同步Online DDL變更產生的臨時表數據,只同步源庫的原始DDL數據。
說明該方案會導致目標庫鎖表。
源、目標庫無法連接重試時間
當源、目標庫無法連接時,DTS默認重試720分鐘(即12小時),您也可以自定義重試時間。如果DTS在設置的時間內重新連接上源、目標庫,同步任務將自動恢復。否則,同步任務將失敗。
說明由于連接重試期間,DTS將收取任務運行費用,建議您根據業務需要自定義重試時間,或者在源和目標庫實例釋放后盡快釋放DTS實例。
上述配置完成后單擊頁面右下角的下一步。
配置同步初始化選項,當前固定為包含全量數據+增量數據。
說明DTS會將源Redis實例中的存量數據同步至目標Redis實例中,并同步增量數據。
如果跳出版本相關的報錯提示,請您按照提示將源Redis實例升級至指定版本。關于升級版本方式,請參見升級大版本和升級小版本與代理版本。
上述配置完成后,單擊頁面右下角的預檢查并啟動。
說明在同步任務正式啟動之前,會先進行預檢查。只有預檢查通過后,才能成功啟動同步任務。
如果預檢查失敗,單擊具體檢查項后的,查看失敗詳情。
您可以根據提示修復后重新進行預檢查。
如無需修復告警檢測項,您也可以選擇確認屏蔽、忽略告警項并重新進行預檢查,跳過告警檢測項重新進行預檢查。
在預檢查對話框中顯示預檢查通過后,關閉預檢查對話框,同步作業將正式開始。
等待同步作業的鏈路初始化完成,直至處于同步中狀態。
說明您可以在數據同步頁面,查看數據同步作業的狀態。