redis cluster 數據熱遷移

前言

因爲公司服務器架構調整,現在需要將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是不行的,只能手動安裝。

  1. 啓動所有需要加入到集羣的節點
    redis-server ./cluster/redis.conf
  2. 然後將所有需要遷移到的服務器按照預先設計的架構添加到對應的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
  1. 刪除掉不需要的slavebd130, bd131
    src/redis-trib.rb del-node existing_host:existing_port node_id
  2. shutdown不需要的masterbd128, bd129
    連接到相應服務器,然後netstat -tunlp|grep 28275,然後kill即可。這時候集羣會自動從slave中選舉一個節點作爲新的master。
  3. 啓動第四步中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
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章