跨越異構鴻溝,Redis 遷移同步過程當中的挑戰與解決方案

隨着雲計算十餘年的高速發展,做爲目前可見的最新階段,多雲正在快步大踏步前進。而多雲趨勢所帶來得數據雲間遷移,也逐步常態化。所以,緩存 Redis 已成爲高併發場景下提高數據訪問速度的標配。linux

不只是數據雲間遷移,目前大型系統對於緩存強依賴,導致大多數企業都會面臨大量併發讀寫數據時訪問速度慢、數據庫壓力大,以及緩存數據不⾜帶來的緩存擊穿及雪崩⻛險。其中,Redis 就起到了下降數據庫壓力,提高數據訪問速度的做用。git

下圖是某網站業務的解決訪問速度慢的問題,引入緩存Redis提高訪問速度的流程:github

但在 Redis 遷移同步過程當中,勢必會面臨着許多挑戰:redis

  • rdb版本不⼀致致使源 redis dump⽂件在⽬標redis中不能加載docker

  • 數據節點不⼀致帶來的 redis 主從複製⽅案失效數據庫

  • 應⽤快速割接的⽤⼾需求json

  • ⾮冪等命令的冪等要求緩存

正因如此, 應運而生。_RedisSyncer 是京東雲用於在 redis 之間數據同步的產品,支持跨版本、異構集羣間的數據同步。_它模擬了redis的replication協議,在rdb版本不⼀致時進⾏命令轉換,以實現跨rdb版本遷移,並經過緩存value的⽅式完成INCR、INCRBY、DECR、DECRBY等⾮命令的冪等轉換。最終適應雲上與雲下、原生與託管等多種場景,可以快速靈活地知足用戶的同步、遷移、擴容的需求。安全

RedisSyncer案例解析

某金融機構爲保障金融數據安全、符合金融數據規範,須要將原⽣redis集羣遷移⾄該金融機構⾃研的upredis集羣,並保證業務系統平滑過渡。併發

項⽬挑戰

  • 版本差別

  • 降版本遷移

  • 集羣節點數不⼀致

  • 極速回退需求

最終客⼾收益

  • 實現15分鐘完成 256GB+數據遷移

  • 20分鐘完成系統割接

  • 遷移過程「絲般柔順」

RedisSyncer 操做實戰

  • 必要環境

  • docker

  • docker-compose

  • 使⽤docker-compose 部署服務

Plain Text

git clone https://github.com/TraceNature/redissyncer.git
cd redissyncer
docker-compose up -d
  • 下載並配置cli客⼾端
wget https://github.com/TraceNature/redissyncercli/
releases/download/v0.1.0/redissyncer-cli-0.1.0-linux-amd64.tar.gz
.config.yaml
syncserver: http://10.0.1.20:8080
token: 379F5E2BD55A4608B6A7557F0583CFC5
  • ⽣成數據
./rsst -c ../config.yml generatedata -i 1 -a 10.0.1.101:6479 -p
redistest0102
  • 編寫要執⾏的任務json redissyncer-cli須要增長taskexamples
"sourcePassword": "redistest0102",
"sourceRedisAddress": "10.0.1.101:6379",
"targetRedisAddress": "10.0.1.102:6379",
"targetPassword": "redistest0102",
"taskName": "testtask",
"targetRedisVersion": 4.0,
"autostart": true,
"afresh": true,
"batchSize": 100
}
  • 啓動任務
redissyncer-cli -i
redissyncer-cli > task create source ./task.json
  • 數據校驗
wget
https://github.com/TraceNature/rediscompare/releases/download/v1.0.0/r
ediscompare-1.0.0-linux-amd64.tar.gz
rediscompare compare single2single --saddr "10.0.1.101:6479" --
spassword "redistest0102" --taddr "10.0.1.102:6479" --tpassword
"redistest0102" --comparetimes 3

Github 地址:

https://github.com/TraceNature/redissyncer-server

推薦閱讀

歡迎點擊【京東科技】,瞭解開發者社區

更多精彩技術實踐與獨家乾貨解析

歡迎關注【京東科技開發者】公衆號

相關文章
相關標籤/搜索