一,官方cluster分区
Redis3.0之后,Redis企业网站定制开发官方提供了完整的集群解决方案。
企业网站定制开发方案采用的方式,包括:sharding(分区)、replication(复制)、failover(故障转移)。称为RedisCluster。
Redis5.0前采用redis-trib企业网站定制开发企业网站定制开发进行集群的创建和管理,需要支持
Redis5.0企业网站定制开发可以直接使用Redis-cli进行集群的创建和管理
二,部署架构
三,集群搭建
RedisCluster最少需要三台主服务器,三台从服务器。端口号分别为:7001~7006
mkdir -p /root/redis-cluster/7001cd /root/redis/redis-5.0.5/srcmake install PREFIX=/root/redis-cluster/7001cp /root/redis/redis-5.0.5/redis.conf /root/redis-cluster/7001/bin
- 1
- 2
- 3
- 4
第一步:创建7001实例,并编辑redis.conf文件,修改port为7001。cluster-enable yes
注意:创建实例,即拷贝单机版安装时,生成的bin目录,为7001目录。
第二步:复制7001,创建7002~7006实例,修改端口。
cp -r /root/redis-cluster/7001/* /root/redis-cluster/7002cp -r /root/redis-cluster/7001/* /root/redis-cluster/7003cp -r /root/redis-cluster/7001/* /root/redis-cluster/7004cp -r /root/redis-cluster/7001/* /root/redis-cluster/7005cp -r /root/redis-cluster/7001/* /root/redis-cluster/7006
- 1
- 2
- 3
- 4
- 5
第三步:创建start.sh,启动所有的实例
cd 7001/bin./redis-server redis.confcd ..cd ..cd 7002/bin./redis-server redis.confcd ..cd ..cd 7003/bin./redis-server redis.confcd ..cd ..cd 7004/bin./redis-server redis.confcd ..cd ..cd 7005/bin./redis-server redis.confcd ..cd ..cd 7006/bin./redis-server redis.confcd ..cd ..
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
chmod u+x start.sh (赋写和执行的权限)
./start.sh(启动RedisCluster)
第四步:创建Redis集群(创建时Redis里不要有数据)
# cluster-replicas : 1 1从机 前三个为主[root@localhost bin]# ./redis-cli --cluster create 192.168.159.139:7001 192.168.159.139:7002 192.168.159.139:7003 192.168.159.139:7004192.168.159.139:7005 192.168.159.139:7006 --cluster-replicas 1
- 1
- 2
- 3
命令客户端连接集群
命令:
./redis-cli -h 127.0.0.1 -p 7001 -c
- 1
注意:-c 表示是以redis集群方式进行连接
[root@localhost redis-cluster]# cd 7001[root@localhost 7001]# ./redis-cli -h 127.0.0.1 -p 7001 -c127.0.0.1:7001> set name1 aaa-> Redirected to slot [12933] located at 127.0.0.1:7003OK127.0.0.1:7003>
- 1
- 2
- 3
- 4
- 5
- 6
查看集群的命令:
(1)查看集群状态
cluster info
- 1
(2)查看集群中的节点:
cluster nodes
- 1
四,集群节点扩容
添加主节点
先创建7007节点 和7008节点(无数据),扩展一主一从
mkdir -p /root/redis-cluster/7007cd /root/redis/redis-5.0.5/srcmake install PREFIX=/root/redis-cluster/7007cp /root/redis/redis-5.0.5/redis.conf /root/redis-cluster/7007/bin
- 1
- 2
- 3
- 4
添加7007结点作为新节点,并启动
执行命令
[root@localhost bin]# cd 7001/bin[root@localhost bin]# ./redis-cli --cluster add-node 192.168.159.139:7007192.168.159.139:7001
- 1
- 2
- 3
查看集群结点发现7007已添加到集群中
cluster nodes
- 1
hash槽重新分配(数据迁移)
添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。查看集群中槽占用情况
cluster nodes
- 1
redis集群有16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占用情况
给刚添加的7007结点分配槽
第一步:连接上集群(连接集群中任意一个可用结点都行)
./redis-cli --cluster reshard 192.168.72.128:7007
- 1
第二步:输入要分配的槽数量, 输入:3000,表示要给目标节点分配3000个槽
How many slots do you want to move (from 1 to 16384)? 3000
- 1
第三步:输入接收槽的结点id
PS:这里准备给7007分配槽,通过cluster nodes查看7007结点id为:50b073163bc4058e89d285dc5dfc42a0d1a222f2
- 1
- 2
第四步:输入源结点id
输入:all
第五步:输入yes开始移动槽到目标结点id
输入yes
查看结果
添加从节点
添加7008从结点,将7008作为7007的从结点
命令:
./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave --cluster-master-id 主节点id
- 1
- 2
举例:
./redis-cli --cluster add-node 192.168.159.139:7008 192.168.159.139:7007 --cluster-slave --cluster-master-id ae12faaec70f71c887cf0ccdeef2c95278472c88
- 1
- 2
ae12faaec70f71c887cf0ccdeef2c95278472c88 是7007结点的id,可通过cluster nodes查看。
注意:如果原来该结点在集群中的配置信息已经生成到cluster-config-file指定的配置文件中(如果
cluster-config-file没有指定则默认为nodes.conf),这时可能会报错:
[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (checkwith CLUSTER NODES) or contains some key in database 0
- 1
- 2
解决方法是删除生成的配置文件nodes.conf,删除后再执行./redis-cli --cluster add-node 指令
查看集群中的结点,刚添加的7008为7007的从节点:
缩容
./redis-cli --cluster del-node 192.168.127.128:70086be94480315ab0dd2276a7f70c82c578535d6666
- 1
- 2
删除已经占有hash槽的结点会失败,报错如下:
[ERR] Node 192.168.127.128:7008 is not empty! Reshard data away and try again.
- 1
需要将该结点占用的hash槽分配出去。