redis集群數據備份遷移方案
n 遷移環境描述及分析
當前我們面臨的數據遷移環境是:集群->集群。
源集群:
源集群為6節點,3主3備
主 |
備 |
192.168.112.33:8001 |
192.168.112.33:8004-8006 |
192.168.112.33:8002 |
無 |
192.168.112.33:8003 |
無 |
值得注意的是:所有的槽位都分配在192.168.112.33:8001節點上,這樣更方便我們遷移。
目標集群:
也是6節點,3主3備
主 |
備 |
192.168.112.33:6001 |
192.168.112.34:6002 |
192.168.112.33:6005 |
192.168.112.33:6000 |
192.168.112.33:6004 |
192.168.112.34:6003 |
n 選擇合適的遷移方法
1. 使用shell腳本+redis命令
2. 使用dump.rdb或appendonly.aof文件
第一種適用於數據量少,只遷移部分數據的情況。第二種適用於我們當下的情況。
n 遷移步驟
前期准備:
1) 停掉所有節點(先備后主),然后刪除所有節點下的appendonly.aof和dump.rdb文件,再動所有主節點,停掉所有節點(有密碼的話,最好先不要用密碼)
2) 確定目標庫所有節點appendonly為yes,將所有槽位分配到一個主節點
3) 停掉擁有所有槽位的那個節點,等待appendonly.aof文件
停業務遷移:
4) 停業務,此時可以同步對所有應用修改redis配置(釘釘,管理門戶,搜索引擎)
5) 源庫手動觸發bgrewriteaof 源端(2分鍾)
6) 復制發送備份appendonly.aof 源端,目標端(5分鍾)
7) 啟動目標節點 目標端(5分鍾)
8) reshared槽位,啟動備節點,設置密碼 目標端(5分鍾)
恢復應用:
9) 啟動所有應用,並驗證
n 遷移測試實施
以下是遷移步驟的整個實施過程:
目標端停集群(先備后主):
清除appendonly.aof和dump.rdb
啟動所有主節點
轉移槽位到192.168.112.36:6004節點
./redis-trib.rb reshard --from bdd63e1f522d78eb1bb2574b2461a7302e14944a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5461 --yes 192.168.112.36:6004
./redis-trib.rb reshard --from be5b41880afac9c41b09e0d4e3be1ce1eb00959a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5462 --yes 192.168.112.36:6004
改配置文件,並停掉節點
原端集群,停業務備份數據
copy文件appendonly.aof到目標庫分配了所有槽位的那個節點指定的appendonly.aof路徑下,並啟動節點。
再重新分配槽位,使槽位平均分配到各主節點。
然后啟動所有的備節點,並設置密碼,
redis-cli -c -h 192.168.112.33 -p 6000 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.33 -p 6000 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.33 -p 6000 config rewrite
redis-cli -c -h 192.168.112.33 -p 6001 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.33 -p 6001 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.33 -p 6001 config rewrite
redis-cli -c -h 192.168.112.34 -p 6002 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.34 -p 6002 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.34 -p 6002 config rewrite
redis-cli -c -h 192.168.112.34 -p 6003 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.34 -p 6003 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.34 -p 6003 config rewrite
redis-cli -c -h 192.168.112.36 -p 6004 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.36 -p 6004 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.36 -p 6004 config rewrite
redis-cli -c -h 192.168.112.36 -p 6005 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.36 -p 6005 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.36 -p 6005 config rewrite
redis集群遷移就到此完成了。