阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 集群

113次阅读
没有评论

共计 7650 个字符,预计需要花费 20 分钟才能阅读完成。

sentinel 模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或 sentinel 模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个 Redis 实例中。cluster 模式的出现就是为了解决单机 Redis 容量有限的问题,将 Redis 的数据根据一定的规则分配到多台机器。

一、集群模式概述

1.1、什么是集群模式

Redis 的哨兵和主从模式基本已经可以实现高可用和读写分离,但是在这种模式下每台 Redis 服务器都存储相同的数据,浪费内存空间,所以在 redis 上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说 Redis 节点上存储不同的内容。

Redis 集群

1.2、集群模式特点

多个 redis 节点网络互联,数据共享

所有的节点都是一主一从(也可以是一主多从),其中从节点不提供服务,仅作为备用

不支持同时处理多个 key(如 MSET/MGET),因为 redis 需要把 key 均匀分布在各个节点上,并发量很高的情况下同时创建 key-value 会降低性能并导致不可预测的行为

支持在线增加、删除节点

客户端可以连接任何一个主节点进行读写

1.3、集群工作方式

数据存取工作方式

在 Redis 的每一个节点上,都有这么两个东西,一个是插槽(slot),一个是 cluster。

插槽的取值范围是:0-16383。cluster,可以理解为是一个集群管理的插件。

当我们的存取 Key 的时候,Redis 会根据算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

集群工作方式

为了保证高可用,redis 集群模式引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。

那么如何发现主节点宕机?当其它主节点 ping 一个主节点 C 时,如果半数以上的主节点与 C 通信超时,那么认为主节点 C 宕机了。如果主节点 C 和它的从节点 C1 都宕机了,那么该集群就无法再提供服务了。

二、集群模式的搭建

2.1、搭建前的准备

集群搭建:至少要三个 master

第一步:创建一个文件夹 redis-cluster,然后在其下面分别创建 6 个文件夹如下:

[root@zutuanxue redis]# mkdir redis-cluster [root@zutuanxue redis]# cd redis-cluster/ [root@zutuanxue redis-cluster]# mkdir 7001 [root@zutuanxue redis-cluster]# mkdir 7002 [root@zutuanxue redis-cluster]# mkdir 7003 [root@zutuanxue redis-cluster]# mkdir 7004 [root@zutuanxue redis-cluster]# mkdir 7005 [root@zutuanxue redis-cluster]# mkdir 7006

第二步:把之前的 redis.conf 配置文件分别 copy 到 700* 下

[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7001/redis.conf [root@zutuanxue redis]# cp redis.conf ./redis-cluster/7002/redis.conf [root@zutuanxue redis]# cp redis.conf ./redis-cluster/7003/redis.conf [root@zutuanxue redis]# cp redis.conf ./redis-cluster/7004/redis.conf [root@zutuanxue redis]# cp redis.conf ./redis-cluster/7005/redis.conf [root@zutuanxue redis]# cp redis.conf ./redis-cluster/7006/redis.conf

第三步:由于 redis 集群需要使用 ruby 命令,所以我们需要安装 ruby

yum install ruby yum install rubygems gem install redis #(安装 redis 和 ruby 的接口)

2.2、修改集群配置

[root@zutuanxue redis]# vim ./redis-cluster/7001/redis.conf # 需要修改的配置 daemonize yes port 700* #(分别对每个机器的端口号进行设置) bind 192.168.1.171 #(必须要绑定当前机器的 ip,不然会无限悲剧下去哇.. 深坑勿入!!!) dir /usr/local/redis-cluster/700*/ #(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据,深坑勿入!!!) appendonly yes cluster-enabled yes #(启动集群模式,开始玩耍) cluster-config-file nodes700*.conf#(这里 700x 最好和 port 对应上) cluster-node-timeout 5000 #redis 节点宕机被发现的时间

注意:

每个文件要修改端口号,bind 的 ip,数据存放的 dir,并且 nodes 文件都需要进行修改!

2.3、启动 redis 服务

[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7001/redis.conf [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7002/redis.conf [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7003/redis.conf [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7004/redis.conf [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7005/redis.conf [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7006/redis.conf

2.4、创建集群

执行 redis-cli –cluster create 命令

[root@zutuanxue redis]# ./src/redis-cli --cluster create 192.168.1.121:7001 192.168.1.121:7002 192.168.1.121:7003 192.168.1.121:7004 192.168.1.121:7005 192.168.1.121:7006 --cluster-replicas 1

说明:

create

表示创建一个 redis 集群。

–cluster-replicas 1

表示为集群中的每一个主节点指定一个从节点,即一比一的复制。

Redis 集群

2.5、查看 redis 服务状态

[root@zutuanxue redis]# ps -ef|grep redis

Redis 集群

2.6、进入一个节点

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7001 192.168.1.121:7001> info cluster # Cluster cluster_enabled:1 # 节点是否为 cluster 模式。1 是 0 否

2.7、测试操作

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> set b fdfsfsd -> Redirected to slot [3300] located at 192.168.1.121:7001 OK 192.168.1.121:7001> get b "fdfsfsd" 192.168.1.121:7001> set c fdsfdfdsfds -> Redirected to slot [7365] located at 192.168.1.121:7002 OK 192.168.1.121:7002> get c "fdsfdfdsfds" 192.168.1.121:7002> set x fdsfdsfsdf -> Redirected to slot [16287] located at 192.168.1.121:7003 OK 192.168.1.121:7003> keys * 1) "x" 2) "a" 192.168.1.121:7003> get b -> Redirected to slot [3300] located at 192.168.1.121:7001 "fdfsfsd" 192.168.1.121:7001> keys * 1) "b" 192.168.1.121:7001> set d fdsfdsfsd -> Redirected to slot [11298] located at 192.168.1.121:7003 OK 192.168.1.121:7003> get d "fdsfdsfsd" 192.168.1.121:7003> set x zhangsan OK 192.168.1.121:7003> get x "zhangsan"

三、集群操作

3.1、主从切换

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7001 192.168.1.121:7001> cluster nodes # 查看集群中的节点

Redis 集群

停掉 7003,在查看节点信息

[root@zutuanxue redis]# ps -ef|grep redis root 31370 1 0 21:04 ? 00:00:05 ./src/redis-server 192.168.1.121:7001 [cluster] root 31375 1 0 21:04 ? 00:00:05 ./src/redis-server 192.168.1.121:7002 [cluster] root 31380 1 0 21:04 ? 00:00:05 ./src/redis-server 192.168.1.121:7003 [cluster] root 31385 1 0 21:05 ? 00:00:05 ./src/redis-server 192.168.1.121:7004 [cluster] root 31394 1 0 21:05 ? 00:00:05 ./src/redis-server 192.168.1.121:7005 [cluster] root 31399 1 0 21:05 ? 00:00:05 ./src/redis-server 192.168.1.121:7006 [cluster] root 32361 2769 0 22:39 pts/0 00:00:00 grep --color=auto redis [root@zutuanxue redis]# kill -s 9 31380 [root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

启动 7003,查看节点信息

[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7003/redis.conf [root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

3.2、从节点操作

3.2.1、前期准备

准备一个新的 Redis,7007

[root@zutuanxue redis]# cd redis-cluster/ [root@zutuanxue redis-cluster]# ls 7001 7002 7003 7004 7005 7006 [root@zutuanxue redis-cluster]# mkdir 7007 [root@zutuanxue redis-cluster]# cp ./7006/redis.conf ./7007/redis.conf [root@zutuanxue redis-cluster]# cd .. [root@zutuanxue redis]# vim ./redis-cluster/7007/redis.conf [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7007/redis.conf

3.2.2、增加从节点

[root@zutuanxue redis]# ./src/redis-cli --cluster add-node 192.168.1.121:7007 192.168.1.121:7004 --cluster-slave

Redis 集群

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

3.2.3、删除从节点

删除 7007 节点

[root@zutuanxue redis]# ./src/redis-cli --cluster del-node 192.168.1.121:7007 99d2ceb080ef0d701546dea0901d4784a201fc06 >>> Removing node 99d2ceb080ef0d701546dea0901d4784a201fc06 from cluster 192.168.1.121:7007 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

3.3、主节点操作

3.3.1、添加主节点

将 7007 设置为 7006 的主节点

保证 7007 服务是启动的

[root@zutuanxue redis]# ./src/redis-cli --cluster add-node 192.168.1.121:7007 192.168.1.121:7006

Redis 集群

查看节点信息,未分配槽位不能存储数据

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

重新分配槽位

[root@zutuanxue redis]# ./src/redis-cli --cluster reshard 192.168.1.121:7007

Redis 集群

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

3.3.2、给主节点加从节点

准备一个新的 Redis,7008

[root@zutuanxue redis]# cd redis-cluster/ [root@zutuanxue redis-cluster]# ls 7001 7002 7003 7004 7005 7006 7007 [root@zutuanxue redis-cluster]# mkdir 7008 [root@zutuanxue redis-cluster]# cp ./7007/redis.conf ./7008/redis.conf [root@zutuanxue redis-cluster]# vim ./7008/redis.conf [root@zutuanxue redis-cluster]# cd .. [root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7008/redis.conf

为 7007 添加从节点 7008

[root@zutuanxue redis]# ./src/redis-cli --cluster add-node 192.168.1.121:7008 192.168.1.121:7007 --cluster-slave

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

3.4、主节点操作

3.4.1、删除主节点

删除从节点

[root@zutuanxue redis]# ./src/redis-cli --cluster del-node 192.168.1.121:7008 8e52c94dafa72df26b1eddf94363a4780bed9339 >>> Removing node 8e52c94dafa72df26b1eddf94363a4780bed9339 from cluster 192.168.1.121:7008 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.

移动数据将 7007 移动到 7001 节点

[root@zutuanxue redis]# ./src/redis-cli --cluster reshard 192.168.1.121:7007

Redis 集群

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

删除主节点

[root@zutuanxue redis]# ./src/redis-cli --cluster del-node 192.168.1.121:7007 d7a3e48cd142dce6566023fce21e31669e9fa3d5 >>> Removing node d7a3e48cd142dce6566023fce21e31669e9fa3d5 from cluster 192.168.1.121:7007 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005 192.168.1.121:7005> cluster nodes

Redis 集群

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-09发表,共计7650字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中