從ECS上的Twemproxy Redis叢集同步至雲資料庫Tair(相容Redis)執行個體
雲資料庫Tair(相容Redis)是相容開源Redis協議標準、提供記憶體加硬碟混合儲存的資料庫服務,基於高可靠雙機熱備架構及可平滑擴充的叢集架構,可充分滿足高吞吐、低延遲及彈性變更配置的業務需求。通過Data Transmission Service,您可以將Twemproxy Redis同步至雲資料庫Tair(相容Redis)執行個體。
前提條件
-
已建立目標雲資料庫Tair(相容Redis)執行個體,詳情請參見建立Redis執行個體。
-
雲資料庫Tair(相容Redis)執行個體的儲存空間需大於源Twemproxy Redis資料庫已使用的儲存空間。
-
源Twemproxy Redis叢集中的每個Master節點必須能夠執行
psync命令。 -
源Redis執行個體Slave和Master之間的複製逾時時間參數repl-timeout,預設為60秒, 建議使用
config set repl-timeout 600命令設定為600秒。若來源資料庫資料量比較大,可以適當增大repl-timeout參數的值。
同步原理介紹
DTS通過同步Twemproxy Redis叢集中的每個Redis-Server來實現叢集的整體同步,您需要為每個Redis-Server建立一個對應的資料同步作業。
Twemproxy Redis叢集環境介紹
在本案例中,Twemproxy Redis叢集具備兩個Redis-Server,每個Redis-Server採用一主一從的架構,詳情請參見下圖。
注意事項
-
DTS在執行全量資料初始化時將佔用源庫和目標庫一定的資源,可能會導致資料庫伺服器負載上升。如果資料庫業務量較大或伺服器規格較低,可能會加重資料庫壓力,甚至導致資料庫服務不可用。建議您在執行資料同步前謹慎評估,在業務低峰期執行資料同步。
-
如果在來源資料庫的設定檔redis.conf中配置了
bind參數,請將該參數的值設定為ECS的內網IP地址以保障DTS可以正常串連來源資料庫。 -
為保障同步鏈路穩定性,建議將源叢集的設定檔redis.conf中
repl-backlog-size參數的值適當調大。 -
為保障同步品質,DTS會在源叢集中插入一個key:
DTS_REDIS_TIMESTAMP_HEARTBEAT,用於記錄更新時間點。 -
請勿在源叢集中執行
FLUSHDB和FLUSHALL命令,否則將導致源和目標的資料不一致。 -
若目標資料庫記憶體不足,觸發資料逐出時,由於雲資料庫 Tair(相容 Redis)的預設資料逐出策略(maxmemory-policy)為volatile-lru,會導致目標庫與源庫資料不一致的情況,但不會影響任務的正常運行。
為避免該情況發生,建議將目標庫的資料逐出原則設定為noeviction,當目標庫記憶體不足時,資料會寫入失敗,同時任務也會失敗,但目標庫不會因為資料逐出而遺失資料。
說明關於資料逐出策略詳情,請參見Redis資料逐出策略介紹。
-
如果源庫中的某些Key使用了到期(expire)策略,由於可能存在Key已到期但未被及時刪除的情況,所以在目標庫中查看到的Key數量(例如通過info命令查看)會比源庫的Key數量少。
說明源和目標庫中,未設定到期策略或未到期的Key數量是一致的。
-
目標雲資料庫Tair(相容Redis)執行個體支援的版本為4.0、5.0或6.0版本,如需跨版本同步(僅支援從低版本同步到高版本)請提前確認相容性。例如建立隨用隨付的Redis執行個體來測試,測試完成後可將該執行個體釋放或轉為訂用帳戶。
-
若目標執行個體的架構類型為叢集版且某一個分區達到了記憶體上限,或目標執行個體的儲存空間不足時,DTS任務會因記憶體溢出(Out of Memory)而失敗。
-
若目標執行個體已開啟透明資料加密TDE功能,則暫不支援通過DTS同步資料。
費用說明
| 同步類型 | 鏈路配置費用 |
| 庫表結構同步和全量資料同步 | 不收費。 |
| 增量資料同步 | 收費,詳情請參見計費概述。 |
支援的同步拓撲
-
一對一單向同步
-
一對多單向同步
-
級聯單向同步
關於各類同步拓撲的介紹及注意事項,請參見資料同步拓撲介紹。
支援的同步命令
-
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、PUBLISH
-
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
-
不支援同步PUBLISH命令。
-
對於通過EVAL或者EVALSHA調用Lua指令碼,在增量資料同步時,由於目標端在執行指令碼時不會明確返回執行結果,DTS無法確保該類型指令碼能夠執行成功。
-
對於List,由於DTS在調用sync或psync進行重傳時,不會對目標端已有的資料進行清空,可能導致出現重複資料。
操作步驟
-
購買資料同步作業,詳情請參見購買流程。
說明購買時選擇源執行個體為Redis、目標執行個體為Redis,並選擇同步拓撲為單向同步。
-
登入資料轉送控制台。
說明若資料轉送控制台自動跳轉至Data Management控制台,您可以在右下角的
中單擊
,返回至舊版資料轉送控制台。 -
在左側導覽列,單擊資料同步。
-
在同步作業列表頁面頂部,選擇同步的目標執行個體所屬地區。
-
定位至已購買的資料同步執行個體,單擊配置同步鏈路。
-
配置資料同步的源執行個體及目標執行個體資訊。
類別
配置
說明
無
同步作業名稱
DTS會自動產生一個同步作業名稱,建議配置具有業務意義的名稱(無唯一性要求),便於後續識別。
源執行個體資訊
執行個體類型
選擇ECS上的自建資料庫。
執行個體地區
購買資料同步執行個體時選擇的源執行個體地區,不可變更。
ECS執行個體ID
選擇源叢集Redis-Server中Master節點所屬的ECS執行個體ID。
說明DTS通過同步Twemproxy Redis叢集中的每個Redis-Server來實現整體的資料同步,此處先填入第一個Redis-Server中Master節點所屬的ECS執行個體ID;稍後配置第二個資料同步作業時,此處填入第二個Redis-Server中Master節點所屬的ECS執行個體ID;以此類推,直至為所有Redis-Server配置同步作業。
資料庫類型
固定為Redis。
執行個體模式
選擇為單機版。
說明由於Twemproxy Redis叢集架構的特殊性,無法直接同步處理Twemproxy Redis叢集,DTS需要通過同步Twemproxy Redis叢集中的每個Redis-Server來實現整體的資料同步,所以此處需選擇為單機版。
連接埠
填入該Redis-Server中Master節點的服務連接埠。
資料庫密碼
填入該Master節點的資料庫密碼。
說明非必填項,如果沒有設定密碼可以不填。
目標執行個體資訊
執行個體類型
選擇Redis執行個體。
執行個體地區
購買資料同步執行個體時選擇的目標執行個體地區,不可變更。
執行個體ID
選擇目標雲資料庫Tair(相容Redis)執行個體ID。
資料庫密碼
填入Redis執行個體的資料庫密碼。
說明資料庫密碼格式為<user>:<password>。例如,Redis執行個體自訂的使用者名稱為admin,密碼為Rp829dlwa,則此處填入的資料庫密碼為admin:Rp829dlwa。
單擊頁面右下角的授權白名單並進入下一步。
如果源或目標資料庫是阿里雲資料庫執行個體(例如RDS MySQL、ApsaraDB for MongoDB等),DTS會自動將對應地區DTS服務的IP地址添加到阿里雲資料庫執行個體的白名單中;如果源或目標資料庫是ECS上的自建資料庫,DTS會自動將對應地區DTS服務的IP地址添加到ECS的安全規則中,您還需確保自建資料庫沒有限制ECS的訪問(若資料庫是叢集部署在多個ECS執行個體,您需要手動將DTS服務對應地區的IP地址添加到其餘每個ECS的安全規則中);如果源或目標資料庫是IDC自建資料庫或其他雲資料庫,則需要您手動添加對應地區DTS服務的IP地址,以允許來自DTS伺服器的訪問。DTS服務的IP地址,請參見DTS伺服器的IP位址區段。
警告DTS自動添加或您手動添加DTS服務的公網IP位址區段可能會存在安全風險,一旦使用本產品代表您已理解和確認其中可能存在的安全風險,並且需要您做好基本的安全防護,包括但不限於加強帳號密碼強度防範、限制各網段開放的連接埠號碼、內部各API使用鑒權方式通訊、定期檢查並限制不需要的網段,或者使用通過內網(專線/VPN網關/智能網關)的方式接入。
-
配置目標已存在表的處理模式和同步對象。
配置
說明
目標已存在表的處理模式
DTS通過同步Twemproxy Redis叢集中的每個Redis-Server來實現整體的資料同步。為第1個Redis-Server配置資料同步時,如果Redis執行個體暫無資料,請選擇預檢查並報錯攔截。為第2到N個Redis-Server配置資料同步時,必須選擇為忽略報錯並繼續執行,否則將無法正常同步資料。
說明 說明 預檢查並報錯攔截:檢查目標庫是否為空白。如果待同步的目標庫為空白,則通過該檢查專案;如果不為空白,則在預檢查階段提示錯誤,資料同步作業不會被啟動。 忽略報錯並繼續執行:忽略預檢查階段中檢測到目標庫不為空白的報錯,繼續執行資料同步。如果在同步過程中遇到目標庫中的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會將源Twemproxy Redis叢集中的存量資料同步至目標Redis資料庫中,並同步增量資料。
-
上述配置完成後,單擊頁面右下角的預檢查並啟動。
說明-
在同步作業正式啟動之前,會先進行預檢查。只有預檢查通過後,才能成功啟動同步作業。
-
如果預檢查失敗,單擊具體檢查項後的
,查看失敗詳情。-
您可以根據提示修複後重新進行預檢查。
-
如無需修複警示檢測項,您也可以選擇確認屏蔽、忽略警示項並重新進行預檢查,跳過警示檢測項重新進行預檢查。
-
-
-
在預檢查對話方塊中顯示預檢查通過後,關閉預檢查對話方塊,同步作業將正式開始。
-
等待同步作業的鏈路初始化完成,直至處於同步中狀態。
說明您可以在資料同步頁面,查看資料同步作業的狀態。
-
重複第1步到第13步的操作,為剩餘的Redis-Server建立資料同步作業。
執行結果
本案例的Twemproxy Redis叢集具備兩個Redis-Server,所以建立兩個資料同步作業。如下圖所示,這兩個資料同步作業完成同步初始化後,已經都處於同步中狀態。
本案例同步的資料庫為DB0,通過DMS登入Redis叢集後與源Twemproxy Redis叢集進行對比,Key總數與源Twemproxy Redis叢集一致。
圖 1. 雲資料庫Tair(相容Redis)執行個體
圖 2. 源Twemproxy Redis叢集