1、EC 簡(jiǎn)介及性能表現(xiàn)
Aws ElastiCache(簡(jiǎn)稱 EC)预侯,主要包含兩種架構(gòu)握截,主從架構(gòu)和集群架構(gòu)产雹。
EC在性能上做了部分優(yōu)化,在R6g 等arm機(jī)型上也做了部分優(yōu)化锈锤。
可以看到,部分場(chǎng)景下,GET性能可以達(dá)到接近90萬(wàn)的QPS省店。
2嚣崭、EC遷移工具
目前EC的遷移工具,主要包括兩種:Riot懦傍,Redis-shake雹舀。
Aws 官方的ElastiCache 控制臺(tái)、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 二進(jìn)制方式
#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 運(yùn)行時(shí)并且不需要安裝 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í)例啟用了數(shù)據(jù)傳輸加密時(shí)唱蒸,需要增加此參數(shù)
replicate 數(shù)據(jù)同步模式
--type ds 源端和目的端版本不一致時(shí),對(duì)key 按照類型進(jìn)行同步灸叼。cpu負(fù)載高
target-ip 目標(biāo)端ip
target-port 目標(biāo)端port
target-pwd 目標(biāo)端密碼
--threads 啟用多線程
--mode live 啟用數(shù)據(jù)增量同步
4油宜、遷移類型
4.1 離線遷移
通過(guò)對(duì)文件進(jìn)行import。該方案不包含在線業(yè)務(wù)的增量數(shù)據(jù)怜姿。
文件類型主要為CSV, TSV, PSV
4.2 在線全量遷移
對(duì)Redis 進(jìn)行 dump & restoe 操作慎冤。該方案不包含在線業(yè)務(wù)的增量數(shù)據(jù)。
4.3 在線全量/增量遷移
對(duì)Redis 進(jìn)行 dump & restoe 操作沧卢,并且監(jiān)測(cè)在線業(yè)務(wù)的增量數(shù)據(jù)情況蚁堤,進(jìn)行實(shí)時(shí)同步。
增量遷移但狭,需要設(shè)置源端redis參數(shù) notify-keyspace-events
config set notify-keyspace-events KA
可以通過(guò)配置 "notify-keyspace-events" 選項(xiàng)來(lái)讓 Redis 選擇發(fā)送哪些事件:
K Keyspace 事件, 以 __keyspace@<db>__ 為前綴發(fā)布
E Keyevent 事件, 以 __keyevent@<db>__ 為前綴發(fā)布
g 通用命令 (不是針對(duì)特定類型的命令) 比如 DEL, EXPIRE, RENAME 等
$ String 命令
l List 命令
s Set 命令
h Hash 命令
z Sorted set 命令
x Expired 事件 (當(dāng)一個(gè) key 過(guò)期的時(shí)候生成)
e Evicted 事件 (當(dāng)一個(gè) key 由于 maxmemory 被回收生成)
A 表示 g$lshzxe 的別名,因此 "AKE" 表示所有事件
notify-keyspace-events 的值由上面的 0 到 N 個(gè)字符組成披诗。空字符串表示禁止發(fā)送通知立磁,
這是 notify-keyspace-events 的默認(rèn)值呈队。
遷移時(shí),增加增量遷移參數(shù)
--mode live
5唱歧、遷移準(zhǔn)備
5.1 準(zhǔn)備EC2
在待遷移實(shí)例的同一個(gè)vpc中宪摧,準(zhǔn)備一臺(tái)EC2,4c8g+
5.2 修改參數(shù)
如果需要數(shù)據(jù)實(shí)時(shí)同步颅崩,需要提前修改EC(Redis)的參數(shù)几于。
開(kāi)啟方法:
5.2.1 物理自建實(shí)例,可在線動(dòng)態(tài)修改
config set notify-keyspace-events KA
5.2.2 EC實(shí)例
Tips:EC實(shí)例限制了部分命令沿后,如config,sync,psync等命令沿彭,所以需要修改配置文件.
查看當(dāng)前集群的參數(shù)組名稱,如default.redis6.x.cluster.on尖滚,default前綴表示使用的是系統(tǒng)默認(rèn)參數(shù)組喉刘,默認(rèn)參數(shù)組不可以修改
在Aws-ElastiCache 控制臺(tái)頁(yè)面左側(cè)瞧柔, —>配置—> 參數(shù)組,點(diǎn)擊右上角【創(chuàng)建參數(shù)組】
輸入一個(gè)參數(shù)組名稱睦裳,建議名稱包含實(shí)例類型(redis)造锅,實(shí)例版本,實(shí)例架構(gòu)推沸,選擇默認(rèn)參數(shù)組對(duì)應(yīng)的版本备绽,及描述信息
重新進(jìn)入 配置—> 參數(shù)組,選擇剛才創(chuàng)建的參數(shù)組鬓催,點(diǎn)擊右側(cè)【編輯參數(shù)值】
搜索notify肺素,找到notify-keyspace-events參數(shù),值修改為 KA
如果原EC為cluster 架構(gòu)宇驾,還需要修改cluster-enabled值為yes倍靡,因?yàn)樾聞?chuàng)建的參數(shù)組,cluster-enabled默認(rèn)為NO
5.3 測(cè)試網(wǎng)絡(luò)
在EC2機(jī)器安裝redis-cli工具
sudo apt-get install redis-tools
測(cè)試源端EC
redis-cli -h cluster1.1o85i0.clustercfg.apse1.cache.amazonaws.com -p 6379 -a xxx
如果開(kāi)啟了傳輸加密课舍,需要加上--tls 參數(shù)
redis-cli -h cluster1.1o85i0.clustercfg.apse1.cache.amazonaws.com -p 6379 -a xxx --tls
測(cè)試目標(biāo)端Redis
redis-cli -h target-ip -p 6379 -a xxx
6塌西、遷移場(chǎng)景
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: 未開(kāi)啟傳輸加密,不需要--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: 未開(kāi)啟傳輸加密筝尾,不需要--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: 未開(kāi)啟傳輸加密捡需,不需要--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: 未開(kāi)啟傳輸加密,不需要--tls 參數(shù)