当前位置:网站首页>Redis的集群模式
Redis的集群模式
2022-08-02 03:15:00 【Dumpling_skin】
如果redis是单机版的,出现单机故障后会导致redis无法使用,如果程序使用redis,间接导致我们的程序出错。
redis的集群模式有哪些?
1、主从复制模式
2、哨兵模式
3、集群化模式
(1)主从复制模式
一主多从模式。一个主节点,多个从节点,那么主节点可以负责读操作和写操作。从节点只能负责读操作,不能负责写操作。这样就可以把读的压力从主节点分摊到从节点,以减少主节点的压力。当主节点执行完写命令,会把数据同步到从节点。
如何搭建主从关系
原则:配从不配主。
条件:三台机器,一主二从。7001主节点 7002和7003作为从节点。这里在一台虚拟机上开三个redis服务。
修改端口号和rdb文件的名称。
启动redis服务进入客户端
查看三个redis服务的主从关系
配置7002和7003为从节点
查看redis服务的主从关系
在主节点上写入数据,在从节点查看
主节点可以读和写。但是从节点只能读。
如果主节点宕机,从节点也不会变成主节点
当主节点重新启动之后两个从节点依旧连接这个主节点。
redis主从复制优缺点
优点:
1、实现读写分离,提高了可用性,解决了单机故障2、主从复制期间master和slave都是非阻塞方式,仍然可用。
缺点:
1、master宕机期间,需要手动切换主机,同时会有部分数据不能及时同步从服务器,造成数据不一致(需要人工手动介入)
2、slave宕机后,多个slave恢复后,大量的SYNC同步会造成master IO压力倍增(可以手动规避启动时间)
3、在线扩容较复杂。
总结:
redis主从复制提高了可用性
(2)哨兵模式
主从复制模式中切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用。redis从2.8提供Sential哨兵架构解决问题。增加一 个哨兵服务,该哨兵时刻监master,如果master挂了,哨兵会在从节点中选举一位为主节点,使用的是哨兵投票机制。
修改配置文件
启动哨兵服务
redis-sentinel sentinel.conf
当主节点宕机后,观察哨兵服务
Sentinel 哨兵优缺点
优点:
哨兵模式基于主从复制,因此主从复制的优点哨兵都具备2、哨兵具备了主从切换和故障转移,因此集群有了更高的可用性
缺点:
Redis较难支持在线扩容,在线扩容比较复杂。
总结:
sentinel 哨兵主要用来监控redis主从集群,提高了redis 主从集群的可用性。
(3)集群化模式
主从模式实现了数据的热备份,哨兵模式实现了redis的高可用。但是有一个问题,这两种模式都没有解决,这两种模式都只能有一个master节点负责写操作,在高并发的写操作场景,master节点就会成为性能瓶颈。redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。
如图所示集群模式其实就是多个主从复制的结构组合起来的,每一个主从复制结构可以看成一个节点,那么上面的Cluster集群中就有三个节点。
Redis Cluster是一种服务器 Sharding 技术,redis 3.0版本开始正式提供。
Sentinel基本已经实现了高可用,但是每台机器都存储相同内容,很浪费内存,所以Redis Cluster实现了分布式存储。每台机器节点上存储不同的内容。
Redis Cluster 数据分片原理
redis 数据分片使用的是hash slot, redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪一个槽。
当存取redis key时候,redis会根据CRC16算法得到一个结果,然后把结果和16384求余,通过这个值去对应得节点获取数据。
这个时候,应用客户端实际上只需要连接其中任意一个节点即可,然后Redis Cluster 中每个节点都保存了其他节点得槽信息。这样当存取key计算完槽之后,通过保存槽信息从配置中获取节点信息,然后再去对应得节点获取数据。
Redis Cluster 复制原理
redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了。
搭建redis集群
三主三从
6001 6002 6003 为主节点
6004 6005 6006 为从节点
修改redis的配置文件redis.conf,如果是多台服务器的话只用修改加粗部分即可
设置任意ip可访问
bind 0.0.0.0 -::1 87行附近修改端口号
port 6001 138行附近设置后台运行
daemonize yes 309行附近设置rdb持久化的文件名
dbfilename dump6001.rdb 481行附近打开aof持久化
appendonly yes 1379行附近设置aof持久化的文件目录和文件名
appendfilename "appendonly6001.aof" 1406行附近
appenddirname "appendonlydir6001" 1412行附近开启集群(打开注释)
cluster-enabled yes 1576行附近集群的配置文件,会自动生成(打开注释)
cluster-config-file nodes-6001.conf 1584行附近集群的超时时间(打开注释)
cluster-node-timeout 15000 1590行
启动六个redis服务
分配哈希槽
redis-cli --clustercreate --cluster-replicas1192.168.100.130:6001 192.168.100.130:6001192.168.100.130:6001 192.168.100.130:6001192.168.100.130:6001 192.168.100.130:6001
测试
边栏推荐
猜你喜欢
随机推荐
分布式事务解决方案模型
R16 Type II量化反馈码本的产生
知识体系树
WebShell connection tools (Chinese kitchen knife, WeBaCoo, Weevely) use
2022.7.30 js笔记 运算符和流程控制符、循环
第二章——堆栈、队列
WebShell Feature Value Summary and Detection Tool
利用WebShell拿Shell技巧
Kubernetes 基本概念
MySQL8 -- use msi (graphical user interface) under Windows installation method
mysql8.0.28下载和安装详细教程,适配win11
Keil development environment installation tutorial
运维理想和现实,你是?
dropout
OD-Model【4】:SSD
嵌入式分享合集25
Scaffolding installation
关于#sql#的问题:该怎么写sql语句,
基于优化的多核局部费舍尔判别分析的故障分类
Go语学习笔记 - gorm使用 - 表增删改查 Web框架Gin(八)