RedisShake是一(yi)款開源的(de)Redis遷(qian)(qian)(qian)移(yi)工具,支(zhi)持Cluster集群的(de)在(zai)線(xian)(xian)遷(qian)(qian)(qian)移(yi)與離線(xian)(xian)遷(qian)(qian)(qian)移(yi)(備份文件導入(ru))。當部署(shu)在(zai)其他云廠(chang)商Redis服務上的(de)Cluster集群數據(ju),無法在(zai)線(xian)(xian)遷(qian)(qian)(qian)移(yi)時,可以(yi)選擇離線(xian)(xian)遷(qian)(qian)(qian)移(yi)。
本(ben)文以Linux系(xi)統環境為例(li),介紹如(ru)何(he)使用Redis-Shake工具進(jin)行(xing)Cluster集群數據離線遷移。
離線遷移(備份文件導入)
與(yu)(yu)在線遷(qian)移(yi)相比,離線遷(qian)移(yi)適宜于(yu)源(yuan)實(shi)例與(yu)(yu)目標實(shi)例的網絡無法(fa)(fa)連通(tong)的場景,或者源(yuan)端(duan)實(shi)例部署(shu)在其(qi)他(ta)云廠商Redis服務中,無法(fa)(fa)實(shi)現(xian)在線遷(qian)移(yi)。
- 在DCS控制臺創建Cluster集群實例。
注(zhu)意集(ji)群(qun)的內存規格不(bu)能(neng)小于源端Cluster集(ji)群(qun)。
- 分別獲取源端與目標端Cluster集群的Master節點IP地址與端口。
redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes
在命令(ling)返回的(de)(de)結果中(zhong),獲取所有(you)master節點的(de)(de)IP端口(kou),如下(xia)如所示:


說明
安裝了Redis后,自帶redis-cli命令(ling)。如CentOS下安裝Redis:yum install redis
- 準備一臺云主機,并安裝RedisShake
RedisShake需(xu)要能訪問(wen)目標端DCS Cluster集群(qun),也(ye)需(xu)要綁定彈性公(gong)網IP,以便將備份文件上(shang)傳到云主(zhu)機。
建議使用彈性云(yun)主機(ECS),且ECS與DCS Cluster集群實(shi)例配置相同虛擬私有云(yun)、子網與安(an)全組(zu)。
可(ke)(ke)下載release版本,解壓縮后即可(ke)(ke)使用。(此(ci)處以下載Redis-Shake v2.1.2為例,您可(ke)(ke)以根據實際需(xu)要選(xuan)擇其他。)


說明
如果(guo)源端集(ji)群部(bu)署在(zai)數(shu)(shu)據中(zhong)心內網,則(ze)需在(zai)內網服(fu)務器上安裝RedisShake,并參考下述步驟進(jin)行數(shu)(shu)據導出(chu),然后將數(shu)(shu)據文件上傳到云主機。
- 導出RDB文件
編輯(ji)redis-shake工(gong)具配置文件redis-shake.conf,補充(chong)源端與目標端所有master節點的連接信息:
source.type = cluster
#如果無密碼,本項不填
source.password_raw = {source_redis_password}
#源Cluster集群所有master節點的IP地址與端口,以分號分隔
source.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port}
導出源Redis集群的RDB格式備份(fen)文件
./redis-shake -type dump -conf redis-shake.conf
執行日志中出(chu)現如(ru)下信息時導出(chu)備份文件完成:
execute runner[*run.CmdDump] finished!
- 導入RDB文件
a. 將導(dao)出的(de)RDB文件(含多個)上傳到(dao)與云(yun)主(zhu)機上。云(yun)主(zhu)機與目標端(duan)DCS Cluster集群實例的(de)網絡(luo)連通。
b. 編輯(ji)RedisShake配置文件。
編輯redis-shake工(gong)具配置文件redis-shake.conf,補充源端與目(mu)標端所有master節點的連接(jie)信(xin)息:
target.type = cluster
#如果無密碼,本項不填
target.password_raw = {target_redis_password}
#目標Cluster集群所有master節點的IP地址與端口,以分號分隔
target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port}
#需要導入的rdb文件列表,用分號分隔
rdb.input = local_dump.0;local_dump.1;local_dump.2;local_dump.3
保(bao)存并退出文件編輯(ji)。
c. 使用(yong)如下命令(ling)導入rdb文件(jian)到目標Cluster集(ji)群:
./redis-shake -type restore -conf redis-shake.conf
執行日(ri)志中出現(xian)如下信息時導(dao)入備份(fen)文(wen)件完成:
Enabled http stats, set status (incr), and wait forever.
- 遷移后驗證
數據同步結束后,可使用redis-cli工具連接(jie)DCS Cluster集群(qun),通過info命令查看(kan)Keyspace中(zhong)的Key數量,確(que)認數據是否完整導入(ru)。
如果數(shu)(shu)據不完整,可使用flushall或者flushdb命令清理實(shi)例中的緩存數(shu)(shu)據后重新同步。