Aws ElastiCache Redis數(shù)據(jù)遷移(一)

1、EC 簡介及性能表現(xiàn)

Aws ElastiCache(簡稱 EC),主要包含兩種架構(gòu),主從架構(gòu)和集群架構(gòu)。
EC在性能上做了部分優(yōu)化,在R6g 等arm機型上也做了部分優(yōu)化。


image.png

image.png

image.png

可以看到,部分場景下,GET性能可以達到接近90萬的QPS。

2、EC遷移工具

目前EC的遷移工具,主要包括兩種:Riot,Redis-shake。
Aws 官方的ElastiCache 控制臺、API 或 AWS CLI,本篇不做介紹。
本文,先介紹第一種Riot。

Riot 介紹

image.png

3、部署方式

3.1 docker方式

docker run -d --name=riot fieldengineering/riot \
-h source-ip -p source-port -a source-pwd <-c> <--tls> \
replicate \
-h target-ip -p target-port -a target-pwd <-c> <--tls>  \
--threads 3 \
--mode live 

3.2 二進制方式

#x86_64
wget https://github.com/redis-developer/riot/releases/download/v3.1.5/riot-standalone-3.1.5-linux-x86_64.zip
#riot-standalone-3.1.5-*.zip 包含自己的 Java 運行時并且不需要安裝 Java

#其他系統(tǒng),參考 https://github.com/redis-developer/riot/releases

# 遷移命令
riot -h source-ip -p source-port -a source-pwd <-c> <--tls> \
replicate <--type ds> \
-h target-ip -p target-port -a target-pwd <-c> <--tls>  \
--threads 3 \
--mode live 

3.3 replicate 數(shù)據(jù)同步模式參數(shù)

TIPS:
source-ip 源端ip(dns)
source-port 源端port
source-pwd 源端密碼
-c 集群模式,非集群模式不需要加-c
--tls redis實例啟用了數(shù)據(jù)傳輸加密時,需要增加此參數(shù)
replicate 數(shù)據(jù)同步模式
--type ds 源端和目的端版本不一致時,對key 按照類型進行同步。cpu負載高
target-ip 目標端ip
target-port 目標端port
target-pwd 目標端密碼
--threads 啟用多線程
--mode live 啟用數(shù)據(jù)增量同步

4、遷移類型

4.1 離線遷移

   通過對文件進行import。該方案不包含在線業(yè)務的增量數(shù)據(jù)。
   文件類型主要為CSV, TSV, PSV

4.2 在線全量遷移

   對Redis 進行 dump & restoe 操作。該方案不包含在線業(yè)務的增量數(shù)據(jù)。

4.3 在線全量/增量遷移

   對Redis 進行 dump & restoe 操作,并且監(jiān)測在線業(yè)務的增量數(shù)據(jù)情況,進行實時同步。

增量遷移,需要設(shè)置源端redis參數(shù) notify-keyspace-events

config set notify-keyspace-events KA
可以通過配置 "notify-keyspace-events" 選項來讓 Redis 選擇發(fā)送哪些事件:
K Keyspace 事件, 以 __keyspace@<db>__ 為前綴發(fā)布
E Keyevent 事件, 以 __keyevent@<db>__ 為前綴發(fā)布
g 通用命令 (不是針對特定類型的命令) 比如 DEL, EXPIRE, RENAME 等
$ String 命令
l List 命令
s Set 命令
h Hash 命令
z Sorted set 命令
x Expired 事件 (當一個 key 過期的時候生成)
e Evicted 事件 (當一個 key 由于 maxmemory 被回收生成)
A 表示 g$lshzxe 的別名,因此 "AKE" 表示所有事件
notify-keyspace-events 的值由上面的 0 到 N 個字符組成。空字符串表示禁止發(fā)送通知, 
這是 notify-keyspace-events 的默認值。

遷移時,增加增量遷移參數(shù)

--mode live

5、遷移準備

5.1 準備EC2

在待遷移實例的同一個vpc中,準備一臺EC2,4c8g+

5.2 修改參數(shù)

如果需要數(shù)據(jù)實時同步,需要提前修改EC(Redis)的參數(shù)。
開啟方法:

5.2.1 物理自建實例,可在線動態(tài)修改

config set notify-keyspace-events KA

5.2.2 EC實例

Tips:EC實例限制了部分命令,如config,sync,psync等命令,所以需要修改配置文件.

查看當前集群的參數(shù)組名稱,如default.redis6.x.cluster.on,default前綴表示使用的是系統(tǒng)默認參數(shù)組,默認參數(shù)組不可以修改

image.png

在Aws-ElastiCache 控制臺頁面左側(cè), —>配置—> 參數(shù)組,點擊右上角【創(chuàng)建參數(shù)組】

image.png

輸入一個參數(shù)組名稱,建議名稱包含實例類型(redis),實例版本,實例架構(gòu),選擇默認參數(shù)組對應的版本,及描述信息

image.png

重新進入 配置—> 參數(shù)組,選擇剛才創(chuàng)建的參數(shù)組,點擊右側(cè)【編輯參數(shù)值】

image.png

搜索notify,找到notify-keyspace-events參數(shù),值修改為 KA

image.png

如果原EC為cluster 架構(gòu),還需要修改cluster-enabled值為yes,因為新創(chuàng)建的參數(shù)組,cluster-enabled默認為NO

image.png

5.3 測試網(wǎng)絡

在EC2機器安裝redis-cli工具

sudo apt-get install redis-tools

測試源端EC

redis-cli -h cluster1.1o85i0.clustercfg.apse1.cache.amazonaws.com -p 6379 -a xxx

如果開啟了傳輸加密,需要加上--tls 參數(shù)
redis-cli -h cluster1.1o85i0.clustercfg.apse1.cache.amazonaws.com -p 6379 -a xxx --tls

測試目標端Redis

redis-cli -h target-ip -p 6379 -a xxx

6、遷移場景

6.1 ElastiCache Cluster To other Redis Cluster

6.1.1全量遷移

docker run -d --name=riot fieldengineering/riot \
-h source-ip -p source-port -a source-pwd -c --tls \
replicate \
-h target-ip -p target-port -a target-pwd -c --tls \
--threads 2 \

TIPS: 未開啟傳輸加密,不需要--tls 參數(shù)

6.1.2 全量+增量遷移

docker run -d --name=riot fieldengineering/riot \
-h source-ip -p source-port -a source-pwd -c --tls \
replicate \
-h target-ip -p target-port -a target-pwd -c --tls \
--threads 2 \
--mode live 

TIPS: 未開啟傳輸加密,不需要--tls 參數(shù)

6.2 ElastiCache Single To other Redis Single

6.2.1全量遷移

docker run -d --name=riot fieldengineering/riot \
-h source-ip -p source-port -a source-pwd --tls \
replicate \
-h target-ip -p target-port -a target-pwd --tls \
--threads 2 \

TIPS: 未開啟傳輸加密,不需要--tls 參數(shù)

6.2.2全量+增量遷移

docker run -d --name=riot fieldengineering/riot \
-h source-ip -p source-port -a source-pwd --tls \
replicate \
-h target-ip -p target-port -a target-pwd --tls \
--threads 2 \
--mode live 

TIPS: 未開啟傳輸加密,不需要--tls 參數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容