天天看點

兩個Redis叢集 如何平滑資料遷移

項目推薦: Spring Cloud 、Spring Security OAuth2的RBAC權限管理系統 歡迎關注

問題

由于生産環境的各種原因,我們需要對現有伺服器進行遷移,包括線上正在運作的 redis 叢集環境 如何去做?

涉及到資料源變動,原有資料如何平滑遷移到新執行個體,進而可以實作無縫遷移?

方案彙總

基于 redis 自身的RDB/AOF 備份機制

兩個Redis叢集 如何平滑資料遷移
  1. 執行

    save\bgsave

    觸發資料持久化

    RDB

    檔案
  2. 拷貝redis備份檔案(dump.rdb)到目标機器
  3. 重新開機目标執行個體重新

    load

    RDB 檔案
  • 關于 save/bgsave 的差別
指令 save bgsave
IO阻塞 同步 異步
複雜度 O(n)
缺點 阻塞用戶端 需要fork,消耗記憶體

基于

redis-dump

導入導出

json

備份

redis-dump 基于JSON 備份還原Redis的資料https://github.com/delano/redis-dump
兩個Redis叢集 如何平滑資料遷移
# 導出指令
redis-dump –u 127.0.0.1:6379 > lengleng.json
# 導出指定資料庫資料
redis-dump -u 127.0.0.1:6379 -d 15 > lengleng.json
# 如果redis設有密碼
redis-dump –u :[email protected]:6379 > lengleng.json

# 導入指令
< lengleng.json redis-load
# 指定redis密碼
< lengleng.json redis-load -u :[email protected]:6379           

redis-shake

實作

redis-cluster

遷移

  

redis-shake是阿裡雲Redis&MongoDB團隊開源的用于redis資料同步的工具https://github.com/alibaba/RedisShake。
兩個Redis叢集 如何平滑資料遷移
  • Docker

    建立兩個叢集
docker run --name redis-cluster1 -e CLUSTER_ANNOUNCE_IP=192.168.0.31 -p 8000-8005:7000-7005 -p 18000-18005:17000-17005  pig4cloud/redis-cluster:4.0           

  

docker run --name redis-cluster2 -e CLUSTER_ANNOUNCE_IP=192.168.0.31 -p 8000-8005:7000-7005 -p 18000-18005:17000-17005  pig4cloud/redis-cluster:4.0           
  • 配置

    redis-shake.conf

source.type: cluster
source.address: [email protected]:7000   #配置一個節點自動發現
target.type: cluster
target.address: [email protected]:8000   #配置一個節點自動發現           
  • 執行全量、增量同步
  • restful監控名額
# 使用者可以通過restful監控名額檢視内部運作狀況,預設的restful端口是9320:

http://127.0.0.1:9320/metric             
兩個Redis叢集 如何平滑資料遷移
最近時間寬裕。整點花哨的系列,歡迎關注。

繼續閱讀