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
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章