三、redis6 叢集 線上遷移
環境:
1.基於【redis6 叢集部署】
原叢集 | 新叢集 |
192.168.109.137:7000 | 192.168.109.139:7000 |
192.168.109.137:7001 | 192.168.109.139:7001 |
192.168.109.137:7002 | 192.168.109.139:7002 |
192.168.109.138:7000 | 192.168.109.140:7000 |
192.168.109.138:7001 | 192.168.109.140:7001 |
192.168.109.138:7002 | 192.168.109.140:7002 |
2.線上遷移就得保障業務的可用性;這就必須要求新舊叢集主機間網路連通性,業務連線redis叢集介面配置檔案無論從哪一個節點都能操作叢集
1).模擬線上環境,後臺執行上一章節redis6 叢集 擴縮容中提到的指令碼set_key.sh(注意增加配置,相當於修改業務介面配置檔案操作)模擬線上實時寫入key
操作:
1.檢視老叢集狀態、key等資訊
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster info 192.168.109.137:7000 -a 'wang!321' 2>/dev/null
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster check 192.168.109.137:7000 -a 'wang!321' 2>/dev/null
2.參考【redis6 叢集部署】將新叢集節點都安裝上redis,並把各節點加入老叢集先
加入規劃:
3主:192.168.109.139:7000、7001、7002
3從:192.168.109.140:7000、7001、7002
3從分別指向3主
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster add-node 192.168.109.139:7000 192.168.109.137:7000 -a 'wang!321'
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster add-node 192.168.109.139:7001 192.168.109.137:7000 -a 'wang!321'
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster add-node 192.168.109.139:7002 192.168.109.137:7000 -a 'wang!321'
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster check 192.168.109.137:7000 -a 'wang!321' 2>/dev/null
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster add-node 192.168.109.140:7000 192.168.109.137:7000 -a 'wang!321' --cluster-slave --cluster-master-id c7a05ce237bd8177af154af3ce48fd89d7c86453
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster add-node 192.168.109.140:7001 192.168.109.137:7000 -a 'wang!321' --cluster-slave --cluster-master-id 8f2ed53955dfe9fc22de255e91ba2a9e696055b2
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster add-node 192.168.109.140:7002 192.168.109.137:7000 -a 'wang!321' --cluster-slave --cluster-master-id e30842d360247cad83e2b2e4d7369e65607fcb85
開始遷移:
1.先檢視當前叢集狀態
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster check 192.168.109.137:7000 -a 'wang!321' 2>/dev/null
M: 5ff72f7e629f8dd290a66e06d73e85378e4e1349 192.168.109.138:7000
slots:[5516-10922] (5407 slots) master
1 additional replica(s)
M: fe0d43871950c7b2a9b7082bfe9b52f56aa4c65f 192.168.109.138:7002
slots:[0-5515],[10923-10976] (5570 slots) master
1 additional replica(s)
M: 776134007b961293086f6248b0ad05a094a5f19a 192.168.109.138:7001
slots:[10977-16383] (5407 slots) master
1 additional replica(s)
老叢集的3主分別如上,並各有一個從,接下來我們一個一個主的遷移,先遷移192.168.109.138:7000
如下;
1).先刪除192.168.109.138:7000的從節點
S: 98ec10ff7e5b788130dd5283422ae52358599084 192.168.109.137:7002
slots: (0 slots) slave
replicates 5ff72f7e629f8dd290a66e06d73e85378e4e1349
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster del-node 192.168.109.137:7002 98ec10ff7e5b788130dd5283422ae52358599084 -a 'wang!321'
2).分片遷移,即遷移槽;192.168.109.138:7000 遷移到192.168.109.139:7000
檢視192.168.109.138:7000 老節點的槽數量,並全部遷移到192.168.109.139:7000
192.168.109.138:7000 (5ff72f7e...) -> 449 keys | 5407 slots | 0 slaves.
M: 5ff72f7e629f8dd290a66e06d73e85378e4e1349 192.168.109.138:7000
slots:[5516-10922] (5407 slots) master
M: c7a05ce237bd8177af154af3ce48fd89d7c86453 192.168.109.139:7000
slots: (0 slots) master
1 additional replica(s)
命令:
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster reshard 192.168.109.137:7000 -a 'wang!321' --cluster-from 5ff72f7e629f8dd290a66e06d73e85378e4e1349 --cluster-to c7a05ce237bd8177af154af3ce48fd89d7c86453 --cluster-slots 5407 --cluster-yes
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster check 192.168.109.137:7000 -a 'wang!321' 2>/dev/null
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster info 192.168.109.137:7000 -a 'wang!321' 2>/dev/null
3).192.168.109.138:7000老節點刪除~
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster del-node 192.168.109.138:7000 5ff72f7e629f8dd290a66e06d73e85378e4e1349 -a 'wang!321'
至此,老叢集的一個主節點就遷移完成了~......其他老叢集主節點參照上面步驟操作!!!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster del-node 192.168.109.137:7001 5f9f852f5ebf0d6ccc357e1eadfad7a2a4cade47 -a 'wang!321'
[apprun@localhost apprun]$ /apprun/redis/bin/redis-cli --cluster reshard 192.168.109.137:7000 -a 'wang!321' --cluster-from776134007b961293086f6248b0ad05a094a5f19a --cluster-to8f2ed53955dfe9fc22de255e91ba2a9e696055b2 --cluster-slots 5407 --cluster-yes
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster del-node 192.168.109.138:7001 776134007b961293086f6248b0ad05a094a5f19a -a 'wang!321'
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster del-node 192.168.109.137:7000 79d3d38b893eb9e301481d04fe39fc1ff54d2155 -a 'wang!321'
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster reshard 192.168.109.139:7000 -a 'wang!321' --cluster-from fe0d43871950c7b2a9b7082bfe9b52f56aa4c65f --cluster-to e30842d360247cad83e2b2e4d7369e65607fcb85 --cluster-slots 5570 --cluster-yes
[apprun@localhost ~]$ /apprun/redis/bin/redis-cli --cluster del-node 192.168.109.138:7002 fe0d43871950c7b2a9b7082bfe9b52f56aa4c65f -a 'wang!321'
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
遷移完成:
線上遷移期間通過模擬線上環境,利用指令碼set_key.sh每秒向叢集寫入key共寫入3037個,我們接下來核對這些:
查詢:
由此可驗證線上叢集遷移成功~!!!