前言
因爲公司服務器架構調整,現在需要將redis cluster遷移到其他機器上,但中間服務又不能停,且數據不能丟失。
環境
原搭建環境的服務器
IP | hostname | 角色 |
---|---|---|
10.1.24.127 | bd127 | master |
10.1.24.128 | bd128 | master |
10.1.24.129 | bd129 | master |
10.1.24.130 | bd130 | slave |
10.1.24.131 | bd131 | slave |
10.1.24.132 | bd132 | slave |
選擇想要遷移的服務器
IP | hostname | 角色 |
---|---|---|
10.1.24.126 | bd126 | master |
10.1.24.127 | bd127 | master |
10.1.24.132 | bd132 | master |
10.1.24.198 | bd198 | slave |
10.1.24.199 | bd199 | slave |
10.1.24.205 | bd205 | slave |
然後在這幾臺機器上搭建好redis的環境。並修改redis相關配置,要和原環境的一致。
遷移
redis cluster模式通過redis-trib.rb
,這個工具進行節點的增刪改等操作。因爲這個腳本工具是用ruby
開發的,所以還需要安裝ruby語言環境,並下載ruby語言的redis
依賴包gem install redis
。需要注意的是,redis依賴包需要ruby2.2.2
版本以上,但centos的yum命令對ruby只支持到2.0.0
,所以yum install ruby
是不行的,只能手動安裝。
- 啓動所有需要加入到集羣的節點
redis-server ./cluster/redis.conf
- 然後將所有需要遷移到的服務器按照預先設計的架構添加到對應的master下。
src/redis-trib.rb add-node --slave --master-id <node_id> new_host:new_port existing_host:existing_port
那麼添加完成之後的架構應該如下這樣:
master | slave |
---|---|
bd127 | bd130, bd199 |
bd128 | bd131, bd126, bd199 |
bd129 | bd132, bd205 |
- 刪除掉不需要的
slave
,bd130, bd131
src/redis-trib.rb del-node existing_host:existing_port node_id
- shutdown不需要的
master
,bd128, bd129
連接到相應服務器,然後netstat -tunlp|grep 28275
,然後kill
即可。這時候集羣會自動從slave中選舉一個節點作爲新的master。 - 啓動第四步中shutdown的master,這時候這些master就會變成slave,直接刪除掉即可。
說明
node id
所有節點的node_id,可以在redis.conf
中配置的cluster-config-file /home/redis/redis-5.0.5/cluster/nodes-28275.conf
中查看。內容如下:
9429cdaad3fe4d606d0c8783b8263bdfcd37c31d 10.1.24.132:28275@38275 master - 0 1592384081025 7 connected 5461-10922
3e66f565c33b4eeeee0f25d9de57a9ed8b9ecc64 10.1.24.127:28275@38275 master - 0 1592384083031 1 connected 0-5460
e6ee647f394f4c59ac4c60240f585fa8d9a166fd 10.1.24.205:28275@38275 slave 9429cdaad3fe4d606d0c8783b8263bdfcd37c31d 0 1592384084033 7 connected
a9e28984ae28467fdb98edf67e61062b67dd4532 10.1.24.198:28275@38275 slave dcb99c462a462fae131271676d14d0065a2dc2f7 0 1592384081000 8 connected
dcb99c462a462fae131271676d14d0065a2dc2f7 10.1.24.126:28275@38275 master - 0 1592384082028 8 connected 10923-16383
a65861d7fc132d175b1877155781e9ca68d2b014 10.1.24.199:28275@38275 myself,slave 3e66f565c33b4eeeee0f25d9de57a9ed8b9ecc64 0 1592384082000 0 connected
使用redis-trib.rb
的密碼問題
修改/usr/local/rvm/gems/ruby-2.5.1/gems/redis-4.0.3/lib/redis/client.rb
文件,將password
修改爲redis的密碼即可。
class Client
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "redisPass",
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:reconnect_delay => 0,
:reconnect_delay_max => 0.5,
:inherit_socket => false
}