一、前言

Redis-Shake是阿里雲技術團隊開源的一款Redis數據遷移與處理工具,支持數據遷移、備份、恢復和實時同步等多種功能。能夠幫助你在不同Redis環境之間穩定高效的移動數據。

核心功能

sync(同步):支持全量數據遷移和增量數據實時同步,適用於業務不停服遷移、異地容災、多活架構

dump(備份):將源Redis的數據備份到RDB文件中,適用於為數據備份、數據恢復做準備

Restore(恢復):將RDB文件中的數據恢復到目標Redis實例。適用於數據恢復、從備份文件快速搭建新環境

rump(掃描): 通過SCMP命令遷移數據,適用於不支持SYNC/PSYNC命令的環境。適用於遷移Codis、Twemproxy等代理架構的數據

二、實施步驟

2.1 下載redis-shake二進制安裝包

#wget https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz
#tar zxvf redis-shake-linux-amd64.tar.gz -C /root/

2.2 配置rsync模塊文件

在這裏定義源端redis和目標redis相關信息即可

[sync_reader]
address = "源Redis地址:端口"  # 例如:192.168.1.1:6379

[redis_writer]
address = "目標Redis地址:端口" # 例如:r-bp1xxxxx.redis.rds.aliyuncs.com:6379

[advanced]
parallel = 32  # 併發線程數,根據服務器性能調整

[filter]
# 可選:跳過以"temp:"或"cache:"開頭的Key
block_key_prefix = ["temp:", "cache:"]

2.3 配置systemd

配置redis-shake服務,將其託管至systemd

#vim /etc/systemd/system/redis-shake.service
[Unit]
Description=RedisShake Data Sync Service
After=network.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root/redis-shake
ExecStart=/root/redis-shake/redis-shake /root/redis-shake/sync.toml
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2.4 啓動並設置為自啓

啓動後,Redis-Shake會先在屏幕上打印全量同步的進度日誌。當你看到 sync rdb done 的提示時,就意味着它已經進入了增量同步階段,會持續將源實例的變更實時同步到目標實例

#systemctl daemon-reload
# systemctl enable --now redis-shake
Created symlink from /etc/systemd/system/multi-user.target.wants/redis-shake.service to /etc/systemd/system/redis-shake.service.

基於Redis-Shake實現Redis實時同步_redis

三、驗證

測試我們可以在源端redis創建測試鍵值對。如下

127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> SET test_bxy "test_value1"
OK

基於Redis-Shake實現Redis實時同步_Redis_02

在目標端redis驗證 鍵值對是否同步過來。

redis-cli -h 192.168.x.x  -p 9736 -a 123456 -n 1 GET test_bxy

由此可見,目標端鍵值對數據已同步過來了。

基於Redis-Shake實現Redis實時同步_數據_03