一、背景
银行方面要求生产环境上所有软件的安装都要用普通用户安装,将会收回之前给的root用户的权限,于是我就开始了重装redis集群.
二、准备工作
配置各个端口配置文件主要配置项,这里用7001端口的配置文件为例子:
bind 192.168.33.3 //所在服务器地址
port 7001 //实例端口
pidfile "/home/wxqb/redisdata/redisinstall/data/7001/7001.pid" //pid文件位置
logfile "/home/wxqb/redisdata/redisinstall/logs/7001.log" //生成的日志文件位置
save 900 1 //配置redis持久化的方式,这里我用的是rdb方式的默认参数
save 300 10
save 60 10000
dir "//home/wxqb/redisdata/redisinstall/data/7001/" //配置redis实例持久化数据后生成的dump.rdb文件的存放目录
appendonly no //配置是否开启aof持久化,我这里没有开启
cluster-config-file "/home/wxqb/redisdata/redisinstall/conf/node-9001.conf" //配置实例端口的端口信息
masterauth "123456" //最后这两项是配置端口的密码
requirepass "123456"
至此,6个端口的配置文件按照上述规则配置完成后放到下面要新建的各个redisinstall下的conf目录下
三、安装步骤
1.原集群执行cluster nodes命令,查看各个端口的主从关系和各自占用的槽并记录下来。
192.168.33.3:7001>cluster nodes
2.新建要安装的redis存放目录和安装目录install
--新建redis软件目录以及将要安装的目录--
redis-3.2.8.tar.gz和解压后的redis-3.2.8的目录:
/home/wxqb/redisdata/
预先建好的redis实例的安装目录:
home/wxqb/redisdata/redisinstall
在此安装目录下,新建3个目录:conf data logs。
mkdir conf data logs
cd /home/wxqb/redisdata/redisinstall/data/ ----在data目录下新建各个端口的目录
mkdir 7001 7002
3.开始安装
解压事先放到/home/wxqb/redisdata/redis-3.2.8.tar.gz 生成redis-3.2.8软件
到redis-3.2.8的src目录下:cd redis-3.2.8/src
执行安装命令:
make && make install PREFIX=/home/redisdata/redisinstall
4.原集群redis各个端口执行bgsave,持久化内存中的数据到数据文件中.
5.用正确的shutdown方式来关闭原先的redis集群的各个实例,先从后主。
6.启动新的redis集群各个端口实例
在各个服务器下执行启动redis实例的命令:
cd /home/redisdata/redisinstall/bin
./redis-server ../conf/7001.conf
./redis-server ../conf/7002.conf
./redis-server ../conf/7003.conf
./redis-server ../conf/7004.conf
./redis-server ../conf/7005.conf
./redis-server ../conf/7006.conf
7.手动连接各个端口组成集群
连接其中一个端口,和其他端口进行握手
192.168.33.3:7001>cluster meet 192.168.33.3 7002
192.168.33.3:7001>cluster meet 192.168.33.4 7003
192.168.33.3:7001>cluster meet 192.168.33.4 7004
192.168.33.3:7001>cluster meet 192.168.33.5 7005
192.168.33.3:7001>cluster meet 192.168.33.5 7006
8.给各个端口指定主从关系
192.168.33.3:7001>cluster replicate cfb28ef1deee4e0fa78da86abe5d24566744411e
OK
192.168.33.4:7003>cluster replicate 8e41673d59c9568aa9d29fb174ce733345b3e8f1
OK
192.168.33.5:7005>cluster replicate 40b8d09d44294d2e23c7c768efc8fcd153446746
OK
至此,集群的主从分配完成,master:7002,7004,7006;slave:7001,7003,7005
9.手动给各个master端口分槽
给新集群的3个master端口实例指定其占用的槽位.redis集群中的16384个槽位均匀地分配到各个主节点中,因为这次新建的集群要加载老集群中的数据,所以要迁移数据,就要移动老集群中的数据文件到新的集群中去,这里要注意原先每个端口的数据文件所在的端口实例所占用的槽位必须和原先相同,也就是说如果在老集群中7002这个主节点的dump.rdb文件所在的槽是{5462..10922},那么该dump.rdb文件移动过来之后也要占用新集群中的{5462..10922}的槽位。
cd /home/redisdata/redisinstall/bin
./redis-cli -h 192.168.33.3 -p 7002 -a 123456 cluster addslots {0..5461}
./redis-cli -h 192.168.33.4 -p 7004 -a 123456 cluster addslots {5462..10922}
./redis-cli -h 192.168.33.5 -p 7006 -a 123456 cluster addslots {10923..16383}
到此普通用户集群搭建完毕
四、数据迁移
1.shutdown关闭新集群,先从后主
2.拷贝原先集群下的dump.rdb文件到新的集群目录下.,这里我只拷贝了原先master端口的数据文件到新集群中的master端口的数据存放的目录下,master启动后自动同步数据到相应的slave中去:
cp /redisold/data/7002/dump.rdb /home/wxqb/redisdata/redisinstall/data/7002/
cp /redisold/data/7004/dump.rdb /home/wxqb/redisdata/redisinstall/data/7004/
cp /redisold/data/7006/dump.rdb /home/wxqb/redisdata/redisinstall/data/7006/
3.启动各个端口实例,启动时候先主后从。启动后将dump.rdb中的文件加载到内存中,这里如果dump.rdb文件比较大,也就是说原先老集群的数据量比较大,我这里每个端口的dbsize 大约有7千万左右,每个dump.rdb文件大约有4G,每个端口启动大约要花费10-15分钟左右,当然这还不包括master向slave同步数据的时间
4.启动新集群的各个端口实例,先主后从。(最好事先记录一下主从信息)
./redis-server ../conf/7002.conf
./redis-server ../conf/7004.conf
./redis-server ../conf/7006.conf
./redis-server ../conf/7001.conf
./redis-server ../conf/7003.conf
./redis-server ../conf/7005.conf
原先的数据量越大这里等待的时间比较长,然后所有端口启动完成后,查看集群状态和各个端口的dbsize是否和原集群一致。
cd /home/wxqb/redisdata/redis-3.2.8/src
./redis-trib.rb check 192.168.33.3:7002 //检查集群状态
4.数据迁移完成。
五、总结
特别注意在迁移数据也就是dump.rdb文件时,一定要把相依的端口的槽也一并迁移过来。
此次,启动连接redsi各个实例的时候要进到相应的bin目录下,这里可以在系统里去配置相应的环境变量,在次要用的时候就不必到相应的bin去了,特别方便,直接执行如:
redis-cli h 192.168.33.3 -p 7002 -a 123456
redis-trib.rb check 192.168.33.3:7002
执行完后,出现3主3从集群搭建完成。