如何導出Redis實例數據?
- 主備或集群實例:
主備和集群實例支持備份功(gong)能,可以(yi)執行以(yi)下操(cao)作(zuo)將數據導出:
a. 進入緩存(cun)管(guan)理頁面,切(qie)換到“備份(fen)與恢(hui)復(fu)”頁簽(qian),查看實例(li)的備份(fen)記錄。
b. 如沒有(you)記錄,則手動(dong)執行(xing)(xing)備(bei)份動(dong)作,執行(xing)(xing)完后,單(dan)擊“下載”,根(gen)據(ju)提示完成數(shu)據(ju)的下載操作。
說明如果您的實(shi)例創建時間(jian)非(fei)常早,由于(yu)實(shi)例版本(ben)沒有(you)升級而無法(fa)兼容備(bei)份(fen)恢復功能,請聯系技術支持將緩(huan)存實(shi)例升級到最(zui)新版本(ben),升級后(hou)就可以支持備(bei)份(fen)恢復功能。
-
單機實例
單機實例不支持備份功能(neng),用(yong)(yong)戶可以通過Redis-cli客戶端導出rdb文件(jian),但是使用(yong)(yong)Redis-cli導出rdb文件(jian)依賴SYNC命名(ming)。- 放通了SYNC命令的單機實例(例如Redis3.0單機實例,未禁用SYNC命令),可以通過執行以下命令,將單機實例上的數據導出:
redis-cli -h {source_redis_address} -p 6379 [-a password] --rdb {output.rdb}
- 禁用了SYNC命令的單機實例(例如Redis 4.0和Redis5.0單機實例,禁用了SYNC命令),建議將單機實例的數據遷移到主備實例,然后使用主備實例的備份功能。
是否支持控制臺導出RDB格式的Redis備份文件?
- Redis 3.0實例
Redis 3.0是通(tong)過AOF文(wen)件(jian)持(chi)久化的,控制臺僅(jin)支持(chi)備(bei)份和下載AOF文(wen)件(jian),RDB格式文(wen)件(jian)可以通(tong)過Redis-cli導(dao)出:
redis-cli -h {redis_address} -p 6379 [-a password ] --rdb {output.rdb}
- Redis 4.0/5.0/6.0實例
Redis4.0/5.0/6.0實例支(zhi)持(chi)選擇AOF和(he)(he)RDB格式進行持(chi)久化,支(zhi)持(chi)在控制臺備份和(he)(he)下(xia)載AOF和(he)(he)RDB文件。
Redis在線數據遷移是遷移整個實例數據么?
如(ru)果是單(dan)機和主備實(shi)例之(zhi)間進行遷(qian)移(yi)(yi)(yi),是遷(qian)移(yi)(yi)(yi)實(shi)例所(suo)有的數(shu)據(ju),不管存在哪個DB都會進行遷(qian)移(yi)(yi)(yi),且數(shu)據(ju)所(suo)在的DB序號不會變;
如果是集群(qun)實例(li),由于集群(qun)實例(li)只有一個DB0節點,會遷移DB0上(shang)所有槽內的數據。
DCS支持數據持久化嗎?開啟持久化有什么影響?
是否支持持久化
- 對于Redis類型的緩存實例:
單機(ji):不支持(chi)持(chi)久化。
主備(bei)、讀寫分離和集群(單副本集群除(chu)外):支持(chi)(chi)持(chi)(chi)久化。
DCS實例支持的持久化方式
- DCS實例默認僅支持AOF的方式進行持久化,同時支持客戶自行開關數據持久化配置。創建的實例(單機或單副本集群除外)默認開啟AOF持久化。
- DCS實例默認不支持RDB持久化,因此也無法支持客戶自行配置save參數。如果需要進行RDB持久化,可以使用主備或者集群實例的備份恢復功能,備份恢復時,Redis 4.0及以上實例,可以支持選擇生成RDB持久化文件并且自動轉儲到OBS中。
持久化的磁盤是什么類型
Redis 4.0及(ji)以上版(ban)本(ben)的(de)實例,持久化的(de)磁盤是SSD類(lei)型。
開啟/關閉AOF持久化的影響
開啟(qi)AOF持久化后,由于Redis-Server進程需(xu)要(yao)在(zai)AOF文件(jian)中記錄(lu)對應的(de)操作信息,用來進行數據持久化。開啟(qi)持久化可能存在(zai)的(de)影響(xiang):
- 當出現底層計算節點磁盤硬件故障或者IO故障時,可能會造成時延沖高或者主備倒換等情況發生。
- Redis-Server進程會定期進行AOF重寫操作,重寫期間可能會造成短暫的時延沖高,AOF重寫規則請參考AOF文件在什么情況下會被重寫。
如果在緩存場景下(xia)使用(yong)DCS實例(li)(li)進行(xing)應(ying)用(yong)加(jia)速,建議(yi)可以關閉持久化參數以獲(huo)得更(geng)高的(de)性(xing)(xing)能(neng)和穩定性(xing)(xing)。需根據實際業務慎重操作,關閉持久化后在極端(duan)故(gu)障場景(例(li)(li)如主備節點同時(shi)故(gu)障等)下(xia)可能(neng)出現(xian)緩存數據丟失的(de)問題。
關閉操作:在實例(li)詳情的配置參(can)(can)數(shu)中將appendonly參(can)(can)數(shu)修(xiu)改為no即可關閉AOF持久化。
AOF文件在什么情況下會被重寫
AOF文(wen)件重寫(xie)涉(she)及到以下兩(liang)個概念。
- 重寫時間窗:目前該時間窗為凌晨1:00 - 4:59。
- 磁盤閾值:即磁盤的使用率超過50%,即認為達到閾值。
AOF文(wen)件在以下(xia)三(san)種情況下(xia)會被重(zhong)寫(xie)。
- 如果磁盤達到閾值(無論是否處于時間窗內): AOF文件大小 > 內存數據集大小的實例會被重寫。
- 如果磁盤未達到閾值且是重寫時間窗:AOF文件大小 > 數據集內存 * 1.5的實例會被重寫。
- 如果磁盤未達到閾值且是非重寫時間窗:AOF文件大小 > 最大內存 * 4.5的實例會被重寫。
一個數據遷移能遷移到多個目標實例么?
不能,一個遷(qian)(qian)移(yi)任(ren)務只能遷(qian)(qian)移(yi)到一個目(mu)標實例。要遷(qian)(qian)移(yi)到多個目(mu)標實例需要創建多個遷(qian)(qian)移(yi)任(ren)務。
怎么放通SYNC和PSYNC命令?
- DCS云服務內部進行遷移:
- 自建Redis遷移至DCS,默認沒有禁用SYNC和PSYNC命令;
- DCS的Redis之間進行遷移,如果是同一帳號相同Region進行在線遷移,在執行遷移時,會自動放通SYNC和PSYNC命令;
- 如果是不同Region或相同Region不同帳號進行的在線遷移,不會自動放通SYNC和PSYNC命令,無法使用控制臺的在線遷移。推薦使用備份文件導入方式遷移。
- 其他云廠商遷移到DCS云服務:
- 一般云廠商都是禁用了SYNC和PSYNC命令,如果使用DCS控制臺的在線遷移功能,需要聯系源端的云廠商運維人員放通此命令。離線遷移,推薦使用備份文件導入方式。
- 如果不需要增量遷移,可以參考使用Redis-shake工具在線全量遷移其他云廠商Redis進行全量遷移,該方式不依賴于SYNC和PSYNC。
創建遷移任務失敗的原因?
創建遷移任務失(shi)敗的(de)可能原因:
- 底層資源不足。
- 遷移機ECS規格不足。
- 遷移之前創建的目標redis內存小于源redis。
遷移或導入備份數據時,相同的Key會被覆蓋嗎?
在(zai)遷移或導入備份數(shu)(shu)據(ju)時,源端與目標端重復的數(shu)(shu)據(ju)會(hui)被(bei)覆蓋;源端沒有,目標端有的數(shu)(shu)據(ju)會(hui)保留。
因此,如果在遷移(yi)后目(mu)標端(duan)與源(yuan)端(duan)數(shu)據(ju)不一致,可能是(shi)目(mu)標端(duan)在遷移(yi)前有未清(qing)除的數(shu)據(ju)。
使用Rump在線遷移
背景說明
是一(yi)款開源的Redis數據在(zai)(zai)線遷移工具,支持在(zai)(zai)同一(yi)個實(shi)例(li)的不同數據庫之間(jian)互相遷移,以及不同實(shi)例(li)的數據庫之間(jian)遷移。
遷移原理
Rump使用SCAN來獲取keys,用(yong)DUMP/RESTORE來get/set值。
SCAN是(shi)一個時間(jian)復雜度(du)O(1) 的(de)命令,可以快速獲得(de)所有的(de)key。DUMP/RESTORE使(shi)讀/寫值(zhi)獨立(li)于關鍵(jian)工(gong)作。
以下(xia)是Rump的主要特性:
- 通過SCAN非阻塞的獲取key,避免KEYS命令造成Redis服務阻塞。
- 支持所有數據類型的遷移。
- 把SCAN和DUMP/RESTORE操作放在同一個管道中,利用pipeline提升數據遷移過程中的網絡效率。
- 不使用任何臨時文件,不占用磁盤空間。
- 使用帶緩沖區的channels,提升源服務器的性能。
說明1.?Rump工具不支持遷移(yi)到DCS集群實(shi)例。請改用其他(ta)工具,如redis-port或(huo)Redis-cli。
2.?Redis實例(li)的密碼不能包含#@:等特殊字符(fu),避免遷移命令解析出錯。
建議停業(ye)務遷移。遷移過程中(zhong)如(ru)果不斷寫(xie)入新(xin)的(de)數據,可能會丟失少量(liang)Key。
步驟1:安裝Rump
- 下載Rump的。
以64位Linux操作系統為例,執行以下(xia)命令(ling):
wget //github.com/stickermule/rump/releases/download/0.0.3/rump-0.0.3-linux-amd64;
- 解壓縮后,添加可執行權限。
mv rump-0.0.3-linux-amd64 rump;
chmod +x rump;
步驟2:遷移數據
rump -from { source_redis_address } -to { target_redis_address }
參數/選項說明:
- {source_redis_address}
源Redis實(shi)例(li)地(di)址,格(ge)式為:redis://[user:password@]host:port/db,中括號部(bu)分(fen)為可(ke)選項,實(shi)例(li)設置了密(mi)(mi)碼訪問時需要填寫密(mi)(mi)碼,格(ge)式遵循RFC 3986規范。注(zhu)意(yi)用戶名可(ke)為空,但冒(mao)號不能省(sheng)略(lve),例(li)如redis://:mypassword@192.168.0.45:6379/1。
db為(wei)數據(ju)庫編(bian)號,不傳則默認為(wei)0。
- { target_redis_address }
目標Redis實例地址,格式與from相同。
以下示(shi)(shi)例表示(shi)(shi)將本地(di)Redis數據庫的第0個DB的數據遷移到192.168.0.153這(zhe)臺Redis數據庫中(zhong),其中(zhong)密碼以*替代顯示(shi)(shi)。
[root@ecs ~]# ./rump -from redis://127.0.0.1:6379/0 -to redis://:******@192.168.0.153:6379/0
.Sync done.
[root@ecs ~]#
不同類型的操作系統間進行數據傳遞和操作,需要注意什么?
建議(yi)將(jiang)數據文(wen)件格(ge)式轉換后再執行導入。
windows系統(tong)轉換成類unix系統(tong)的(de)文件(jian)格式:
dos2unix {filename}
類unix系統轉(zhuan)換(huan)成(cheng)windows系統的文件格式:
unix2dos {filename}
源Redis使用了多DB,能否遷移數據到集群實例?
DCS單機、讀寫(xie)分離(li)和(he)主(zhu)備實例支持256個庫,編號0-255。
- 若目的實例為Cluster集群實例。Cluster集群實例只有1個庫。
兩個解決思路:
a. 源Redis的不(bu)同DB合到(dao)同一個(ge)數據(ju)庫(ku)。
b. 申請多個DCS緩存實例。
遷(qian)移后實(shi)例連接地址和(he)數據庫編號有變(bian)化(hua),業務(wu)注意改造和(he)適配。
- 若目的實例為Proxy集群。
Proxy集群默認不開啟多DB,僅有一個DB0,請參考開啟多DB操作開(kai)啟Proxy集群多(duo)DB設置。再(zai)進(jin)行遷移(yi)。
只想遷移部分數據時應該怎么處理?
控制臺在線遷移功能,不支持遷移指定數據庫。如果需要單獨遷移Redis中的 指定數據庫, 可以使用redis-shake導(dao)出(chu)或者導(dao)入指(zhi)定的數據(ju)庫。
Redis-shake的安裝和使用可以參考使用Redis-Shake工具遷移自建Redis Cluster集群和。
如果單獨遷移 指定數據 ,建議自行開發腳本,獲取指定的key及數據,然后導入DCS緩存(cun)實(shi)例中(zhong)。
源Redis遷移到集群實例中有哪些限制和注意事項?
- Proxy版集群實例
使用方式與單機、主備(bei)實例類似,但(dan)是(shi)默認只(zhi)有(you)1個DB,不支持select命(ming)令(ling)。數(shu)(shu)據文(wen)件批(pi)量導入時,遇到select命(ming)令(ling)會返回錯誤提示并忽略,同(tong)時繼續(xu)將剩余(yu)數(shu)(shu)據導入。
舉例:
源Redis在數據庫編號0和2中有數據,生成的AOF或RDB文件包含(han)了(le)這兩個庫。
在導入到Proxy集群實(shi)例時會忽略(lve)“select 2”的命令(ling),然后繼續(xu)導入源(yuan)數(shu)據(ju)庫2中(zhong)的數(shu)據(ju)到DB0中(zhong)。
用戶需要注意以下:
源Redis中不同(tong)數據庫(ku)包含了相同(tong)的key,則導入時(shi),編(bian)號靠前的數據庫(ku)的key的value會被靠后的數據庫(ku)中的key覆蓋。
源(yuan)Redis使用(yong)了多個數據庫,數據遷移到DCS集群實(shi)例(li)后(hou),都存儲在同一(yi)數據庫中,不支持select命令。業務需要(yao)做適配。
- Cluster版集群實例
Cluster版集(ji)群(qun)(qun)除了只有1個DB外,導(dao)(dao)入方(fang)式與其他類(lei)型的Redis實例也有差異。Cluster集(ji)群(qun)(qun)的數據(ju),必須由客戶端分(fen)別連(lian)接各(ge)分(fen)片節(jie)點(dian),將數據(ju)分(fen)別導(dao)(dao)入。各(ge)分(fen)片節(jie)點(dian)的IP地(di)址查詢命令(ling):
redis-cli -h {Redis Cluster IP} -p 6379 -a {password} cluster nodes
返回的(de)節點(dian)地址清單(dan)中(zhong),標記為master的(de)節點(dian)IP地址即為Cluster集群的(de)分片節點(dian)地址。
在線遷移需要注意哪些?
- 網絡
在線(xian)遷(qian)移首先需要打通網絡,遷(qian)移任務(wu)必(bi)須和源Redis、DCS緩存實例二(er)者網絡互(hu)通。
- 工具
在線(xian)遷移(yi)工具,推薦(jian)使用DCS控制(zhi)臺的(de)在線(xian)遷移(yi)功(gong)能。
- 數據完整性
如(ru)果(guo)選(xuan)擇中斷業務(wu),則遷移完成后檢查(cha)數據量(liang)和關(guan)鍵key。
如(ru)果選(xuan)擇不中斷業(ye)務(wu),則用戶需要考慮增(zeng)量數(shu)據(ju)的(de)遷移。
- 遷移過程源端擴容影響遷移結果
在線遷(qian)移期(qi)間(jian)源(yuan)(yuan)端擴(kuo)容(rong)操作(zuo)會(hui)(hui)影響(xiang)遷(qian)移,有可(ke)能導致遷(qian)移失敗,也(ye)有可(ke)能會(hui)(hui)影響(xiang)客戶(hu)的(de)數據(ju),客戶(hu)如果在遷(qian)移期(qi)間(jian)源(yuan)(yuan)端實例的(de)內存不夠用需要擴(kuo)容(rong),建議先中斷遷(qian)移任務(wu),然后再擴(kuo)容(rong)。
- 遷移時間
遷移操作(zuo)建議(yi)在業務低峰期進行。
- 版本限制
低版(ban)本(ben)可以到高版(ban)本(ben),高版(ban)本(ben)也可以到低版(ban)本(ben),不(bu)同版(ban)本(ben),在遷移(yi)時需要分析業務系(xi)統使(shi)用到的緩存命令(ling)在目的端實例是否兼容。
- 多db限制
如果(guo)目標端(duan)與(yu)源(yuan)端(duan)均(jun)使用(yong)DCS的(de)Proxy集群實例,請注意二者的(de)multi-db參數需要配置一致,否則會導致遷(qian)移(yi)失(shi)敗。
在線遷移能否做到完全不中斷業務?
可以使用應用雙寫的(de)(de)方式,即在遷移過程中(zhong)業務數(shu)據繼(ji)續從源Redis中(zhong)正(zheng)常(chang)讀取,同時(shi)將數(shu)據的(de)(de)增刪改操作(zuo)在DCS的(de)(de)Redis實例中(zhong)執(zhi)行一遍。
保(bao)持以上狀態運(yun)行一段時(shi)間后(等(deng)待較多的(de)舊數(shu)據過期(qi)刪除),把系統(tong)的(de)緩存數(shu)據庫正式切(qie)到DCS。如涉及業(ye)務系統(tong)遷移云服務,需要在緩存數(shu)據庫切(qie)換前完成業(ye)務系統(tong)的(de)部署。
不(bu)推薦使用這種方式。原因(yin)如(ru)下(xia):
- 網絡無法保證穩定快速,如果源Redis實例不在DCS,則需要使用公網訪問DCS,效率不高。
- 同時寫2份數據,需要用戶自行修改代碼實現。
- 源Redis實例的數據逐出策略各有差異,遷移耗時可能較長,數據完整性保障難度大。
在線遷移實例源端報“Disconnecting timedout slave”和“overcoming of output buffer limits”
當進行在線遷(qian)移時可能會出現如下報錯:
- 源端報“ Disconnecting timedout slave ”,如下圖:


解決方法:建議將源端Redis實例的repl-timeout參(can)數值配(pei)置為300秒。
- 源端報“ overcoming of output buffer limits ”,如下圖:


解(jie)決(jue)方法(fa):建議將源(yuan)端Redis實例的client-output-buffer-limit參數值配(pei)置為實例最大內(nei)存的20%。
使用Rump工具遷移數據,命令執行后無報錯,但Redis容量無變化
Rump工具的具體使用,請參考數據遷移指南。
可能原因:
- Rump工具不支持遷移到集群實例。
- Rump命令參數有誤。
DCS實例是否兼容低版本Redis遷移到高版本
支(zhi)(zhi)持,目前Redis高版(ban)本是支(zhi)(zhi)持兼容低版(ban)本的。
源(yuan)端是(shi)DCS Redis,自建Redis,或者其他云廠商Redis的(de)(de)低版本(ben)或相同版本(ben)實例(li),都可以遷移到DCS的(de)(de)目標端實例(li)。