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



可以看到,部分場景下,GET性能可以達到接近90萬的QPS。
2、EC遷移工具
目前EC的遷移工具,主要包括兩種:Riot,Redis-shake。
Aws 官方的ElastiCache 控制臺、API 或 AWS CLI,本篇不做介紹。
本文,先介紹第一種Riot。
Riot 介紹
- Files (CSV, JSON, XML)
- Data generators (Redis data structures, Faker)
- Relational databases
-
Redis itself (snapshot and live replication)
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ù)組不可以修改

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

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

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

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

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

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ù)
