前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Cluster高可用集群在线迁移操作记录

Redis Cluster高可用集群在线迁移操作记录

作者头像
洗尽了浮华
发布2018-11-22 14:42:18
8860
发布2018-11-22 14:42:18
举报
文章被收录于专栏:散尽浮华散尽浮华

之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移。由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上。考虑到是线上生产环境,决定在线迁移,迁移过程,不中断服务。操作过程如下:

一、机器环境

代码语言:javascript
复制
迁移前机器环境
-------------------------------------------------------------------------------
主机名                   ip地址                  节点端口
redis-node01       172.16.60.207     7000,7001
redis-node02       172.16.60.208     7002,7003
redis-node03       172.16.60.209     7004,7005

迁移后机器环境
-------------------------------------------------------------------------------
主机名                   ip地址                  节点端口
redis-new01       172.16.60.202     7000,7001
redis-new02       172.16.60.204     7002,7003
redis-new03       172.16.60.205     7004,7005

二、迁移前redis cluster高可用集群环境部署(这里采用"三主三从"模式)

代码语言:javascript
复制
三台节点机器安装操作如下一致
[root@redis-node01 ~]# yum install -y gcc g++ make gcc-c++ kernel-devel automake autoconf libtool make wget tcl vim ruby rubygems unzip git
[root@redis-node01 ~]# /etc/init.d/iptables stop
[root@redis-node01 ~]# setenforce 0
[root@redis-node01 ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

下载并编译安装redis
[root@redis-node01 ~]# mkdir -p /data/software/
[root@redis-node01 software]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz
[root@redis-node01 software]# tar -zvxf redis-4.0.6.tar.gz
[root@redis-node01 software]# mv redis-4.0.6 /data/
[root@redis-node01 software]# cd /data/redis-4.0.6/
[root@redis-node01 redis-4.0.6]# make

-------------------------------------------------------------------------------
分别创建和配置节点
节点1配置
[root@redis-node01 ~]# mkdir /data/redis-4.0.6/redis-cluster
[root@redis-node01 ~]# cd /data/redis-4.0.6/redis-cluster
[root@redis-node01 redis-cluster]# mkdir 7000 7001
[root@redis-node01 redis-cluster]# vim 7000/redis.conf
port 7000
bind 172.16.60.207
daemonize yes
pidfile /var/run/redis_7000.pid
cluster-enabled yes
cluster-config-file nodes_7000.conf
cluster-node-timeout 10100
appendonly yes

[root@redis-node01 redis-cluster]# vim 7001/redis.conf
port 7001
bind 172.16.60.207
daemonize yes
pidfile /var/run/redis_7001.pid
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 10100
appendonly yes

节点2配置
[root@redis-node02 ~]# mkdir /data/redis-4.0.6/redis-cluster
[root@redis-node02 ~]# cd /data/redis-4.0.6/redis-cluster
[root@redis-node02 redis-cluster]# mkdir 7002 7003
[root@redis-node02 redis-cluster]# vim 7000/redis.conf
port 7002
bind 172.16.60.208
daemonize yes
pidfile /var/run/redis_7002.pid
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 10100
appendonly yes

[root@redis-node01 redis-cluster]# vim 7003/redis.conf
port 7003
bind 172.16.60.208
daemonize yes
pidfile /var/run/redis_7003.pid
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 10100
appendonly yes

节点3配置
[root@redis-node01 ~]# mkdir /data/redis-4.0.6/redis-cluster
[root@redis-node01 ~]# cd /data/redis-4.0.6/redis-cluster
[root@redis-node01 redis-cluster]# mkdir 7004 7005
[root@redis-node01 redis-cluster]# vim 7004/redis.conf
port 7004
bind 172.16.60.209
daemonize yes
pidfile /var/run/redis_7004.pid
cluster-enabled yes
cluster-config-file nodes_7004.conf
cluster-node-timeout 10100
appendonly yes

[root@redis-node01 redis-cluster]# vim 7005/redis.conf
port 7005
bind 172.16.60.209
daemonize yes
pidfile /var/run/redis_7005.pid
cluster-enabled yes
cluster-config-file nodes_7005.conf
cluster-node-timeout 10100
appendonly yes

-------------------------------------------------------------------------------
分别启动redis服务(这里统一在/data/redis-4.0.6/redis-cluster路径下启动redis服务,即nodes_*.conf等文件也在这个路径下产生)
节点1
[root@redis-node01 redis-cluster]# for((i=0;i<=1;i++)); do /data/redis-4.0.6/src/redis-server /data/redis-4.0.6/redis-cluster/700$i/redis.conf; done
[root@redis-node01 redis-cluster]# ps -ef|grep redis
root      1103     1  0 15:19 ?        00:00:03 /data/redis-4.0.6/src/redis-server 172.16.60.207:7000 [cluster]                   
root      1105     1  0 15:19 ?        00:00:03 /data/redis-4.0.6/src/redis-server 172.16.60.207:7001 [cluster]                   
root      1315 32360  0 16:16 pts/1    00:00:00 grep redis

节点2
[root@redis-node02 redis-cluster]# for((i=2;i<=3;i++)); do /data/redis-4.0.6/src/redis-server /data/redis-4.0.6/redis-cluster/700$i/redis.conf; done
[root@redis-node02 redis-cluster]# ps -ef|grep redis
root      9446     1  0 15:19 ?        00:00:03 /data/redis-4.0.6/src/redis-server 172.16.60.208:7002 [cluster]                   
root      9448     1  0 15:19 ?        00:00:03 /data/redis-4.0.6/src/redis-server 172.16.60.208:7003 [cluster]                   
root      9644  8540  0 16:17 pts/0    00:00:00 grep redis

节点3
[root@redis-node01 redis-cluster]# for((i=4;i<=5;i++)); do /data/redis-4.0.6/src/redis-server /data/redis-4.0.6/redis-cluster/700$i/redis.conf; done
[root@redis-node03 ~]# ps -ef|grep redis
root      9486     1  0 15:19 ?        00:00:03 /data/redis-4.0.6/src/redis-server 172.16.60.209:7004 [cluster]                   
root      9488     1  0 15:19 ?        00:00:03 /data/redis-4.0.6/src/redis-server 172.16.60.209:7005 [cluster]                   
root      9686  9555  0 16:17 pts/0    00:00:00 grep redis

-------------------------------------------------------------------------------
接着在节点1上安装 Ruby(只需要在其中一个节点上安装即可)
[root@redis-node01 ~]# yum -y install ruby ruby-devel rubygems rpm-build
[root@redis-node01 ~]# gem install redis

温馨提示:
在centos6.x下执行上面的"gem install redis"操作可能会报错,坑很多!
默认yum安装的ruby版本是1.8.7,版本太低,需要升级到ruby2.2以上,否则执行上面安装会报错!

首先安装rvm(或者直接下载证书:https://pan.baidu.com/s/1slTyJ7n  密钥:7uan   下载并解压后直接执行"curl -L get.rvm.io | bash -s stable"即可)
[root@redis-node01 ~]# curl -L get.rvm.io | bash -s stable          //可能会报错,需要安装提示进行下面一步操作
[root@redis-node01 ~]# curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -      //然后再接着执行:curl -L get.rvm.io | bash -s stable
[root@redis-node01 ~]# find / -name rvm.sh
/etc/profile.d/rvm.sh
[root@redis-node01 ~]# source /etc/profile.d/rvm.sh
[root@redis-node01 ~]# rvm requirements
  
然后升级ruby到2.3
[root@redis-node01 ~]# rvm install ruby 2.3.1
[root@redis-node01 ~]# ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
  
列出所有ruby版本
[root@redis-node01 ~]# rvm list
  
设置默认的版本
[root@redis-node01 ~]# rvm --default use 2.3.1
  
更新下载源
[root@redis-node01 ~]# gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org
https://gems.ruby-china.org/ added to sources
source https://rubygems.org not present in cache
  
[root@redis-node01 ~]# gem sources
*** CURRENT SOURCES ***
  
https://rubygems.org/
https://gems.ruby-china.org/
  
最后就能顺利安装了
[root@redis-node01 ~]# gem install redis
Successfully installed redis-4.0.6
Parsing documentation for redis-4.0.6
Done installing documentation for redis after 1 seconds
1 gem installed

-------------------------------------------------------------------------------
接着创建redis cluster集群(在节点1机器上操作即可)

首先手动指定三个master节点。master节点最好分布在三台机器上
[root@redis-node01 ~]# /data/redis-4.0.6/src/redis-trib.rb create  172.16.60.207:7000 172.16.60.208:7002  172.16.60.209:7004

然后手动指定上面三个master节点各自的slave节点。slave节点也最好分布在三台机器上
[root@redis-node01 ~]# /data/redis-4.0.6/src/redis-trib.rb add-node --slave 172.16.60.208:7003  172.16.60.207:7000
[root@redis-node01 ~]# /data/redis-4.0.6/src/redis-trib.rb add-node --slave 172.16.60.209:7005  172.16.60.208:7002
[root@redis-node01 ~]# /data/redis-4.0.6/src/redis-trib.rb add-node --slave 172.16.60.207:7001  172.16.60.209:7004

然后检查下redis cluster集群状态
[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-trib.rb check 172.16.60.207:7000
>>> Performing Cluster Check (using node 172.16.60.207:7000)
M: 971d05cd7b9bb3634ad024e6aac3dff158c52eee 172.16.60.207:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: e7592314869c29375599d781721ad76675645c4c 172.16.60.209:7005
   slots: (0 slots) slave
   replicates 0060012d749167d3f72833d916e53b3445b66c62
S: 52b8d27838244657d9b01a233578f24d287979fe 172.16.60.208:7003
   slots: (0 slots) slave
   replicates 971d05cd7b9bb3634ad024e6aac3dff158c52eee
S: 213bde6296c36b5f31b958c7730ff1629125a204 172.16.60.207:7001
   slots: (0 slots) slave
   replicates e936d5b4c95b6cae57f994e95805aef87ea4a7a5
M: e936d5b4c95b6cae57f994e95805aef87ea4a7a5 172.16.60.209:7004
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 0060012d749167d3f72833d916e53b3445b66c62 172.16.60.208:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

写入几条测试数据
登录三个master节点上写入数据
[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.207 -c -p 7000
172.16.60.207:7000> set test1 207-test1
OK

[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.208 -c -p 7002 
172.16.60.208:7002> set test2 208-test2
OK

[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.209 -c -p 7004 
172.16.60.209:7004> set test3 209-test3
OK

登录三个slave节点上写入数据,发现会自动跳到master节点上进行写入
[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.208 -c -p 7003
172.16.60.208:7003> set test5 208-test5
-> Redirected to slot [4644] located at 172.16.60.207:7000
OK

[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.207 -c -p 7001
172.16.60.207:7001> set test4 207-test4
-> Redirected to slot [517] located at 172.16.60.207:7000
OK

[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.209 -c -p 7005
172.16.60.209:7005> set test6 209-test6
-> Redirected to slot [8775] located at 172.16.60.208:7002
OK

读数据
[root@redis-node01 redis-cluster]# /data/redis-4.0.6/src/redis-cli -h 172.16.60.207 -c -p 7000
172.16.60.207:7000> get test1
"207-test1"
172.16.60.207:7000> get test2
-> Redirected to slot [8899] located at 172.16.60.208:7002
"208-test2"
172.16.60.208:7002> get test3
-> Redirected to slot [13026] located at 172.16.60.209:7004
"209-test3"
172.16.60.209:7004> get test4
-> Redirected to slot [517] located at 172.16.60.207:7000
"207-test4"
172.16.60.207:7000> get test5
"208-test5"
172.16.60.207:7000> get test6
-> Redirected to slot [8775] located at 172.16.60.208:7002
"209-test6"
172.16.60.208:7002> get test5
-> Redirected to slot [4644] located at 172.16.60.207:7000
"208-test5"
172.16.60.207:7000> get test4
"207-test4"
172.16.60.207:7000> get test3
-> Redirected to slot [13026] located at 172.16.60.209:7004
"209-test3"
172.16.60.209:7004> get test4
-> Redirected to slot [517] located at 172.16.60.207:7000
"207-test4"
172.16.60.207:7000> get test2
-> Redirected to slot [8899] located at 172.16.60.208:7002
"208-test2"
172.16.60.208:7002> get test1
-> Redirected to slot [4768] located at 172.16.60.207:7000
"207-test1"
172.16.60.207:7000> 

三、在线迁移

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档