面試官:兩個Redis集群 如何平滑數據遷移

問題

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

涉及到數據源變動,原有數據如何平滑遷移到新實例,從而可以實現無縫遷移?

方案彙總

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

面試官:兩個Redis集群 如何平滑數據遷移

  1. 執行 save\\bgsave 觸發數據持久化 RDB文件
  2. 拷貝redis備份文件(dump.rdb)到目標機器
  3. 重啟目標實例重新load RDB 文件

· 關於 save/bgsave 的區別

面試官:兩個Redis集群 如何平滑數據遷移

基於 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 #配置一個節點自動發現

· 執行全量、增量同步

面試官:兩個Redis集群 如何平滑數據遷移

· restful監控指標

# 用戶可以通過restful監控指標查看內部運行狀況,默認的restful端口是9320:

http://127.0.0.1:9320/metric
面試官:兩個Redis集群 如何平滑數據遷移


最近時間寬裕。整點花哨的系列,歡迎關注。

我新建了一個群QQ技術交流群,想要學習資料的、討論交流面試以及技術可以私信我進群。


分享到:


相關文章: