前言
本文主要对Redis的单点模式、主从模式、Sentinel模式、cluster模式做一个简单介绍,并且每一个都进行演示案例相关的细节请参阅文章中给出的链接,几乎涵盖了所有Redis在集群方面的知识点(语法方面)
一、Redis集群知识点总览
Redis有如下几种工作模式:
①单点模式②主从复制模式③Sentinel模式(哨兵模式)④cluster模式(集群模式)
①单点模式
单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis还是很轻松的,做为一个 key/value数据库也是可以胜任的在
实际开发场景中几乎不会使用
②主从复制模式
在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本
主从模式一般用来:
备份数据:这样当一个节点损坏(指不可恢复的硬件损坏)时,数据因为有备份,可以方便恢复负载均衡:所有客户端都访问一个节点肯定会影响Redis工作效率,有了主从以后,查询操作就可以通过查询从节点来完成
主从模式缺点:
master 节点挂了以后,redis 就不能对外提供写服务了,因为剩下的 slave 不能成为master这个缺点影响是很大的,尤其是对生产环境来说,是一刻都不能停止服务的,所以一般的生产坏境是不会单单只有主从模式的。所以有了下面的 sentinel 模式
备注:主从模式做到高可用,除了sentinel模式,还有lvs+keepalived方案可以解决
主从复制模式的相关文章请参阅(几乎包含所有知识点):
https://blog.csdn.net/qq_41453285/article/details/106151825https://blog.csdn.net/qq_41453285/article/details/106151899https://blog.csdn.net/qq_41453285/article/details/106160219
③Sentinel模式(哨兵模式)
主从模式虽然实现了数据的分离,但是没提高可用性,也就是说当主节点宕机之后,所有从节点也跟着不能再使用。
为了提高高可用性,Redis提供了Sentinel模式Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可 以实现对Redis的监控、通知、自动故障转移
sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或 sentinel模式就不能满足需求了,
这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中,就是下面要介绍的cluster模式Sentinel模式的相关文章请参阅(几乎包含所有知识点):
https://blog.csdn.net/qq_41453285/article/details/106379064https://blog.csdn.net/qq_41453285/article/details/106383157https://blog.csdn.net/qq_41453285/article/details/106419183
④cluster模式(集群模式)
Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的主要是针对海量数据+高并发+高可用的场景,海量数据,如果你的数据量很大,那么建议就用 redis cluster
cluster模式的相关文章请参阅(几乎包含所有知识点):
https://blog.csdn.net/qq_41453285/article/details/106420056https://blog.csdn.net/qq_41453285/article/details/106451296https://blog.csdn.net/qq_41453285/article/details/106456106https://blog.csdn.net/qq_41453285/article/details/106460256https://blog.csdn.net/qq_41453285/article/details/106463895https://blog.csdn.net/qq_41453285/article/details/106464512https://blog.csdn.net/qq_41453285/article/details/106481966
二、主从复制演示案例
第一步:创建一个redis-slave目录作为复制相关的目录,然后进入redis-slave目录进去创建redis11、redis12、redis13三个目录,用来存放三个redis节点,其中redis11作为主节点,redis12、redis13作为从节点都复制于redis11
mkdir redis-slave
cd redis-slave
mkdir redis11 redis12 redis13
第二步:分别进入redis11、redis12、redis13目录创建redis11-8001.conf、redis12-8002.conf、redis13-8003.conf三个配置文件,用来启动三个节点
# redis11-8001.conf
bind 0.0.0.0
port 8001
logfile "redis11-8001.log"
dbfilename "dump-redis11-8001.rdb"
daemonize yes
rdbcompression yes
# redis12-8002.conf
bind 0.0.0.0
port 8002
logfile "redis11-8002.log"
dbfilename "dump-redis12-8002.rdb"
daemonize yes
rdbcompression yes
#复制主节点
slaveof 127.0.0.1 8001
# redis11-8003.conf
bind 0.0.0.0
port 8003
logfile "redis11-8003.log"
dbfilename "dump-redis13-8003.rdb"
daemonize yes
rdbcompression yes
#复制主节点
slaveof 127.0.0.1 8001
第三步:在cluster-slave目录下创建如下shell脚本(start-all.sh),用来启动三个节点
#!/bin/bash
cd redis11/
redis-server redis11-8001.conf &
cd ..
cd redis12/
redis-server redis12-8002.conf &
cd ..
cd redis13/
redis-server redis13-8003.conf &
cd ..
第四步:为脚本添加可执行权限,然后启动脚本,启动之后,可以通过netstat查看情况
chmod +x start-all.sh
./start-all.sh
netstat -anop | grep redis
第五步:进入主节点或从节点,输入下面的命令可以查看主从复制的信息
info replication
第六步:测试主从模式,首先进入8001、8002、8003节点查看都无name键。然后进入8001建立name键,值为dongshao,之后再查看都成功显示
三、sentienl模式演示案例
第一步:创建一个redis-sentinel目录作为哨兵相关的目录,然后进入redis-sentinel目录进去创建redis21、redis22、redis23三个目录,用来存放三个redis节点,其中redis21作为主节点,redis22、redis23作为从节点都复制于redis21
mkdir redis-sentinel
cd redis-sentinel
mkdir redis21 redis22 redis23
第二步:分别进入redis21、redis22、redis23目录创建redis21-9001.conf、redis22-9002.conf、redis23-9003.conf三个配置文件,用来启动三个节点
# redis21-9001.conf
bind 0.0.0.0
port 9001
logfile "redis21-9001.log"
dbfilename "dump-redis21-9001.rdb"
daemonize yes
rdbcompression yes
# redis22-9002.conf
bind 0.0.0.0
port 9002
logfile "redis22-9002.log"
dbfilename "dump-redis22-9002.rdb"
daemonize yes
rdbcompression yes
#复制主节点
slaveof 127.0.0.1 9001
# redis23-9003.conf
bind 0.0.0.0
port 9003
logfile "redis23-9003.log"
dbfilename "dump-redis23-9003.rdb"
daemonize yes
rdbcompression yes
#复制主节点
slaveof 127.0.0.1 9001
第三步:在redis-sentinel目录中创建一个sentienl目录用来存放sentinel节点的相关配合,然后在sentienl目录中再创建一个sentinel-26379.conf作为配置文件,命令与配置文件内容如下:
mkdir sentinel
vim sentinel/sentinel-26379.conf
# sentinel-26379.conf
# 端口号默认为26379
port 26379
daemonize yes
logfile "sentinel-26379.log"
# 监控的主节点为9001节点, 1代表主节点失败至少需要1个sentinel节点同意
sentinel monitor mymaster 127.0.0.1 9001 1
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
第四步:在cluster-sentinel目录下创建如下shell脚本(start-all.sh),用来启动三个节点和sentinel节点
#!/bin/bash
cd redis21/
redis-server redis21-9001.conf &
cd ..
cd redis22/
redis-server redis22-9002.conf &
cd ..
cd redis23/
redis-server redis23-9003.conf &
cd ..
cd sentinel/
redis-sentinel sentinel-26379.conf &
cd ..
第五步:为脚本添加可执行权限,然后启动脚本,启动之后,可以通过netstat查看情况
chmod +x start-all.sh
./start-all.sh
netstat -anop | grep redis
第六步:在sentinel中输入下面的命令可以来查看相关信息
redis-cli -p 26379 info sentinel
第七步:测输入下面的命令可以看到当前sentinel监控的主节点为9001节点
redis-cli -p 26379 sentinel master mymaster
第八步:通过kill命令,我们将9001节点关闭
第九步:等到failover-timeout参数所指定的180000毫秒过去之后,再次查看sentinel监控的主节点,发现变为了9003(这是自动完成的)
四、cluster模式演示案例
第一步:创建一个redis-cluster目录作为cluster相关的目录,然后进入redis-cluster目录进去创建redis01、redis02、redis03、redis04、redis05、redis06六个目录,用来存放6个redis节点,
mkdir redis-cluster
cd redis-cluster
mkdir redis01 redis02 redis03 redis04 redis05 redis06
第二步:分别进入redis01、redis02、redis03、redis04、redis05、redis06目录创建redis01.conf、redis02.conf、redis03.conf、redis04.conf、redis05.conf、redis06.conf六个配置文件。下面就不列出配置文件了(文件太多内容太多),我们以redis的默认配置文件为基础然后修改,先修改各自对应的端口(分别为7001、7002、7003、7004、7005、7006),然后修改daemonize为yes,然后将cluster-enabled改为yes
第三步:在cluster-cluster目录下创建如下shell脚本(start-all.sh),用来启动6个节点
#!/bin/bash
cd redis01
redis-server redis.conf &
cd ..
cd redis02
redis-server redis.conf &
cd ..
cd redis03
redis-server redis.conf &
cd ..
cd redis04
redis-server redis.conf &
cd ..
cd redis05
redis-server redis.conf &
cd ..
cd redis06
redis-server redis.conf &
cd ..
第四步:为脚本添加可执行权限,然后启动脚本,启动之后,可以通过netstat查看情况可以看到六个节点启动
chmod +x start-all.sh
./start-all.sh
netstat -anop | grep redis
第五步:用一个redis客户端,输入下面的命来开启集群,输入命令之后输入yes,然后redis开始配置集群,最后显示成功
# 创建3个集群主节点和3个集群从节点
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
第六步:测可以输入下面的命令来检查集群的完整性
redis-cli --cluster check 127.0.0.1:7001