redis高可用
redis容量达到90%,通过slave导入master数据,进行扩容。
新开一个redis实例,redis.conf配置slave-read-only yes
,当作为slave时开启只读模式保证数据只从主服务器写入同步到从服务器。
启动redis后进入redis-cli,通过命令把当前redis设置为另一个redis的slave。
1 | 127.0.0.1:5000> slaveof 127.0.0.1 6379 |
然后用info命令查看状态:
1 | Replication |
看到已经是slave状态,根据use_memory判断数据同步是否完成。
新增加slave扩容,虽然可以提高空闲容量,但是master中无效的数据同样会被同步到slave中,造成存储浪费。因此要清除master中已经无效的key(先把数据同步到slave,再从slave中导出key,避免影响master的线上服务):
1 | ./redis-cli -h host -p port keys '*'|grep xxx > keys.dat |
同样为了避免删除数据时,影响redis的线上服务,应对删除速度做限制。可以用jedis写一个java程序去跑,但是为了这么一个简单地操作,要弄一个java程序出来,有种牛刀杀鸡的感觉。这种时候就应该想到python,通过redis-py写一个简单地脚本就可以搞定了。安装redis-py:
1 | sudo pip install redis |
读文件中的key逐个删除,放慢速度。
1 | # !/usr/bin/env python |
清楚完master的数据,然后查看slave中是否同步完成,完成后关闭slave模式,并把新的redis节点加入nutcracker配置。
1 | 127.0.0.1:5000> slaveof no one |