1、简要说明
2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂度大大降低。
2、创建集群步骤
1、创建目录
新建目录:/usr/local/redis/redis_cluster
2、下载源码并解压编译
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar xzf redis-5.0.0.tar.gz
cd redis-5.0.0
make && make install
3、创建6个Redis配置文件
6个配置文件不能在同一个目录,此处我们定义如下:
/usr/local/redis/redis_cluster/7000/redis.conf
/usr/local/redis/redis_cluster/7001/redis.conf
/usr/local/redis/redis_cluster/7002/redis.conf
/usr/local/redis/redis_cluster/7003/redis.conf
/usr/local/redis/redis_cluster/7004/redis.conf
/usr/local/redis/redis_cluster/7005/redis.conf
配置文件的内容为:
port 7001 #端口
cluster-enabled yes #启用集群模式
cluster-config-file nodes.conf
cluster-node-timeout 5000 #超时时间
appendonly yes
daemonize yes #后台运行
protected-mode no #非保护模式
pidfile /var/run/redis_7001.pid
#requirepass xxx (设置redis访问密码)
#masterauth xxx (设置集群节点间访问密码,跟上面一致)
其中 port 和 pidfile 需要随着 文件夹的不同调增。
4、启动节点
redis-server /usr/local/redis/redis_cluster/7000/redis.conf
redis-server /usr/local/redis/redis_cluster/7001/redis.conf
redis-server /usr/local/redis/redis_cluster/7002/redis.conf
redis-server /usr/local/redis/redis_cluster/7003/redis.conf
redis-server /usr/local/redis/redis_cluster/7004/redis.conf
redis-server /usr/local/redis/redis_cluster/7005/redis.conf
5、启动集群
/usr/local/redis/redis-5.0.0/src/redis-cli --cluster create --cluster-replicas 1 10.10.2.134:7000 10.10.2.134:7001 10.10.2.134:7002 10.10.2.134:7003 10.10.2.134:7004 10.10.2.134:7005
3、集群其他操作
redis5 提供了集群的工具,在如下目录:
/usr/local/redis/redis-5.0.0/utils/create-cluster/create-cluster
,修改端口PROT
设置为6999,NODES为6,工具会自动累加1 生成 7000-7005 六个节点 用于操作。
1、关闭集群
/usr/local/redis/redis-5.0.0/utils/create-cluster/create-cluster stop
2、重新启动集群 (不能指定redis.conf文件,慎用)
/usr/local/redis/redis-5.0.0/utils/create-cluster/create-cluster start
3、使用脚本文件启动集群
cd /usr/local/redis/redis_cluster/7000
redis-server redis.conf
cd /usr/local/redis/redis_cluster/7001
redis-server redis.conf
cd /usr/local/redis/redis_cluster/7002
redis-server redis.conf
cd /usr/local/redis/redis_cluster/7003
redis-server redis.conf
cd /usr/local/redis/redis_cluster/7004
redis-server redis.conf
cd /usr/local/redis/redis_cluster/7005
redis-server redis.conf
4、开始水平扩展
1、增加节点
cd /usr/local/redis/redis_cluster
mkdir 7006 7007
cp 7000/redis.conf 7006
cp 7000/redis.conf 7007
按之前的方法修改7006、7007中redis.conf参数,修改完成后进行启动
配置7006为集群主节点(设置了密码为123456)
redis-cli --cluster add-node 10.10.2.134:7006 10.10.2.134:7000 -a 123456
7000为已知存在节点
手工分配hash槽
使用redis-cli命令为7006分配hash槽,找到集群中的任意一个主节点(7000),对其进行重新分片工作
redis-cli --cluster reshard 10.10.2.134:7000 -a 123456
会询问要分多少个槽出来(1000)?分给哪个节点(7006)
all是随机的,比如说我们要分出1000个,则3个主节点分别拿出333个,333个,334个节点分别8007,这里我们选择done,从7000拿1000个给7006
添加从节点到集群中
redis-cli --cluster add-node 10.10.2.134:7007 10.10.2.134:7000 -a 123456
可以看到7007是一个master节点,没有被分配任何的hash槽。 我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的7006节点的客户端,然后使用集群命令进行操作,把当前的7007(slave)节点指定到一个主节点下
redis-cli -c -h 10.10.2.134 -p 7007
CLUSTER REPLICATE aa5524c6666d457b629e5e943025314734284dd3
查看节点状态
至此,我们扩展redis集群已经实现
2、删除节点
删除从节点
redis-cli --cluster del-node 10.10.2.134:7007 dcbb43ff44cbd42e31a4d94c1da05eaccceffb96
删除主节点
我们尝试删除之前加入的主节点,这个步骤相对比较麻烦一些,因为主节点的里面是有分配了hash槽的,所以我们这里必须先把节点里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能)
#master的数据迁移到一个节点上
redis-cli --cluster reshard 10.10.2.134:7006
#删除节点
redis-cli --cluster del-node 10.10.2.134:7006 aa5524c6666d457b629e5e943025314734284dd3