再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式
返回以支持三种群集方法,以提高性能,可用性和可扩展性。主要模式适用于高公共汽车和公交读数,典型的指示包括一名老师和两个关注者,并且该副本提供了高可用的。
典型的配置是一位主,两个和三个警惕是一,两个和三个和三个和建议。
大规模扩张,建议部署三名教师和三名。
主要库中数据同步的主要模式的核心和信息作为高可用性。
从模型中引入自动故障翻译的事实,但写入性能是有限的。
BOTRI模式通过中继插槽和节点扩展的分布分布,以实现数据分布式存储,从而增强了群集的写作能力和可扩展性。
构建环境时,主要库和库需要配置主和从模式。
监视器并配置监视器节点。
通过证明,无论是客户端还是Sparsboot应用程序,都可以验证要读写和一致性的数据。
玩转Redis的高可用(主从、哨兵、集群)
所谓高可用性,也称为HA(HighAvailability),是分布式系统架构设计必须考虑的因素之一。
是保证系统SLA的重要指标。
Redis高可用主要有三种模式:主从模式、哨兵模式和集群模式。
Redis提供Redis提供了复制功能。
当某个redis数据库中的数据发生变化时,这种变化会自动同步到其他redis机器上。
当Redis部署在多台机器上时,这些机器节点会被分为两类,一类是主节点(master node),一类是从节点(slave node)。
一般情况下,主节点可以进行读写操作,而从节点只能进行读操作。
一个主节点可以有多个从节点,但一个从节点只能有一个主节点,即所谓的一主多从结构。
·支持主从复制,主机会自动同步数据到从机,读写可以分离;
·Master以非方式向主从提供服务 -阻塞方式。
因此,在Master-Slave同步过程中,客户端仍然可以提交查询或者修改请求;
·Slave也以非阻塞的方式完成数据同步。
同步过程中,如果客户端提交查询请求,Redis会返回同步前的数据。
·Redis不具备自动容错和恢复功能。
主从机宕机会导致部分前端读写请求失败。
需要等待机器重启或手动切换前端IP才能恢复;
·主机宕机。
在机器宕机之前,部分数据无法及时同步到从机。
IP切换后,会引入数据不一致的情况。
系统可用性降低;
·Redis很难支持在线扩容,当集群容量达到上限时在线扩容会变得非常复杂;
·Redis主节点和从节点 中的数据是一样的,但是内存可用性降低了
在实际生产中,我们优先采用哨兵模式。
在这种模式下,如果master宕机了,sentinel会自动选举master,并将其他slave指向新的master。
在主从模式下,redis还提供了哨兵命令redis-sentinel。
哨兵是一个独立的进程。
作为一个进程,它将独立运行。
其原理是哨兵进程向所有Redis机器人发送命令并等待Redis服务器响应,从而监控多个正在运行的Redis实例。
一般情况下,使用奇数个哨兵来促进决策和选举。
多个哨兵组成哨兵集群。
哨兵之间会直接通信,检查哨兵是否正常运行。
同时,他们会发现战士大师和哨兵会做出决定,选出新的主人
哨兵模式的作用:
· 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器;
·但是哨兵进程监控Redis服务器时也可能出现问题。
为此,我们可以使用多个哨兵进行监控。
每个哨兵也会受到监控,从而形成多种哨兵模式。
Sentinel与kafka集群中zookeeper的功能非常相似。
·哨兵模式是基于主从模式的,哨兵模式具有主从模式的所有优点。
·主从自动切换,使系统更加健壮、高可用。
·具有主从模式的缺点,每台机器上的数据都是相同的,并且内存的可用性很低。
·Redis很难支持在线扩展。
当集群容量达到上限时,在线扩展将变得非常复杂。
redis群集模式本身不使用一致的哈希算法,而是使用插槽。
redis前哨模式基本上可以实现高可用性和读写分离。
但是,在此模式下,每个Redis服务器存储相同的数据,这是浪费内存的数据,因此将群集添加到Redis3.0中。
集群模式实现了redis和shards数据的分布式存储,这意味着每个redis节点存储不同的。
每个节点通过群集总线(clusterbus)与其他节点通信。
特殊端口号用于通信,即外部服务端口号加10000。
例如,如果节点的端口号为6379,则与其他节点通信的端口号为16379。
节点之间的通信 使用特殊的二进制协议。
对于客户端,查看了整个群集。
客户端可以连接到任何用于操作的节点,就像操作单个redis实例一样。
当客户端运行时未分配键时,REDIS将返回转向说明指向正确的节点。
这有点像浏览器页面上的302重定向。
根据官方建议,群集部署至少需要三个主节点,并且最好使用三个大师和三个奴隶的六节点模型。
在redis的每个节点上,都有两件事。
一个是插槽。
它的值范围是:0-16383。
您可以从上面的redis-trib.rb中读取它的执行结果显示了这三个大师在这三个大师上的分布。
另一个是集群,可以理解为类似于Sentinel的群集管理插件。
当我们的访问密钥到达时,REDIS将根据CRC16算法计算结果,然后计算结果的其余部分和16384,以便每个密钥将与在0之间的数字相对应的位置。
-16383使用此值来查找与相应插槽相对应的节点,然后自动跳到访问操作的相应节点。
为了确保高可用性,Redis-Cluster群集引入了主奴隶模式,其中一个主节点对应于一个或多个从属节点。
当其他主节点ping master节点master1时,如果超过一半的主节点与master1通信以进行超时,则将master1视为降低,并且Master1的从属节点从slave1启用,从 提供服务。
如果Master1及其从属节点从均为下降,则整个群集将进入失败状态,因为群集的插槽映射不完整。
如果集群中的大师中有一半以上,则群集将进入失败状态,无论是否有奴隶。
redis-cluster采用权力下放的想法。
没有中央节点。
客户端直接连接到redis节点,而无需中间代理层。
客户端无需连接到群集中的所有节点,并且可以连接到群集中的任何节点。
只有一个可用的节点就足够了。
REDIS群集的扩展是将计算机添加到群集中,而还原是将计算机从群集中删除,并将16383插槽重新分布到集群中的节点(数据迁移)。
群集管理工具redis-tri.rb也用于扩展和收缩。
扩展时,首先使用redis-tri.rbadd节点将新计算机添加到群集中。
尽管新机器已经在集群中,但它没有分配的插槽,但仍然不起作用。
的。
新节点只有在使用redis-tri.rbreshard进行碎片重新施加(数据迁移)才能生效(数据迁移)将旧节点上的槽位分配给新节点。
缩容时,先使用redis-tri.rbreshard移除机器上的槽位,然后使用redis-tri.rbadd-del移除机器。
采用去中心化的思想,数据按照时隙存储分布在多个节点中,节点之间数据共享,数据分布可动态调整;
可扩展性: 可线性扩展至1000多个节点,可动态添加或删除节点;
高可用性:当部分节点不可用时,集群仍然可用。
通过添加一个Slave作为备用数据副本,可以实现自动故障转移。
节点之间通过gossip协议交换状态信息,利用投票机制完成从Slave到Master的角色晋升;
降低运维成本,提高系统可靠性。
可扩展性和可用性。
1. RedisCluster是一种没有中心节点的集群架构。
它依靠Goss协议(谣言传播)来协作自动修复集群的状态。
然而GosSIp存在消息延迟和消息冗余的问题。
当集群节点过多时,节点之间需要持续进行PING/PANG通信,不必要的流量占用大量网络资源。
虽然Reds4.0对此进行了优化,但这个问题仍然存在。
2. 数据迁移问题
RedisCluster可以动态扩容和缩容节点。
在目前的实现中,这个过程仍然是半自动的,需要人工干预。
当扩容或缩容时,需要进行数据迁移。
为了保证迁移的一致性,所有Redis迁移操作都是同步操作。
进行迁移时,两端的Redis都会进入不同长度的阻塞状态。
对于小按键来说,这个时间可以忽略。
,但如果Key的内存使用量过大,严重时会引发集群中的故障移动,造成不必要的切换。
主从模式:主节点挂掉后,需要手动指定新的master。
可用性不高,基本不用。
Sentinel模式:Master节点挂掉后,哨兵进程会主动选举新的Master,可用性高,但每个节点存储的数据都是一样的,浪费内存空间。
数据量不大,集群规模也不是很大。
自动容错、灾难时需要使用。
集群模式:数据量较大,QPS要求较高。
Rediscuster在Redis 3.0之后正式上线。
已经很晚了。
目前能够证明在大规模生产环境中成功的案例并不多,还需要时间来检验。
java 开发框架 Redis 之 sentinel 和集群
Redis高可用解决方案——sentinel(哨兵模式) 搭建Redis主从复制方案后,当主服务器出现故障时,需要手动将从服务器切换到新的主服务器,既耗时又不方便。Sentinel 模式被创建,旨在在主服务器故障后自动将从服务器升级为主服务器,以避免人工干预。
Sentry模式简介:Sentinel模式是官方提供的一种高可用解决方案,通过发送命令来监控正在运行的Redis实例,以确保其运行状态。
Sentinel模式还采用分布式架构,支持多个哨兵进程协同工作,实现哨兵的高可用性。
Sentinel工作流程:通过向主服务器和从服务器发送ping命令来监控执行状态。
一旦检测到主服务器故障,Sentinel会自动将一台从服务器升级为主服务器,并通过发布订阅模式通知其他从服务器修改配置,实现数据同步。
定时哨兵任务:哨兵每秒进行一次心跳检测,每10秒进行一次信息收集,每2秒交换一次信息,以提供所有Redis守卫和节点的实时状态。
Sentinel网络:Sentinel是一个分布式系统,多个sentinel进程自动连接形成一个分布式网络,相互通信并共享被监控的服务器信息。
Sentinel网络故障修复原理: 1、主观下线:当主服务器出现故障时,Sentinel会进行确认,不会立即进行故障转移。
2.目标下线:当多个监护人确认失败时,其中一个监护人发起投票,经过一定数量的监护人确认后,主服务器将被标记为客观下线。
3.守护者选择:失败时选择一个领导者守护者。
4、主服务器选择:故障切换过程中,选择优先级高、数据同步量大的从服务器作为新的主服务器。
5、新的主服务器通过发布-订阅模式通知所有守卫更新监控信息。
故障发生及修复流程:Sentinel检测到故障后,执行自动切换流程。
配置Sentinel模式在一台机器上实现Sentinel模式,包括创建不同端口的Redis实例、配置主从复制、搭建Sentinel集群、创建Sentinel配置文件、启动Sentinel以及测试等。
集群哨兵模式解决了主服务器故障后自动故障转移的问题,但不支持动态伸缩。
随着Redis3.0的发布,引入了集群模式。
集群设计:集群采用无中心结构,每个节点负责数据存储和集群状态管理,节点之间相互连接。
集群特点: 节点分布和数据分布:预设16384个桶,采用哈希槽算法均匀分布数据。
当添加新节点时,部分哈希节点由新节点中的其他节点分配。
主从集群模式:集群采用主从架构。
组构建:该组至少需要一个奇数个节点,因此已使用的6个节点,每个节点均配置至少一个从属节点。
组创建:使用特定的脚本创建组并配置主LAVIC关系,以确保即使汽车失败,该组仍然可以提供服务。
Redis 四种集群方案介绍+优缺点对比
在服务创建中,单机部署存在单点故障问题。为了提高服务的高可用性,分布式服务不时出现。
Redis作为分布式系统的关键组件,针对单机故障引入了主从模式,使得主服务器和多服务器之间数据能够同步。
但主服务器故障后手动切换主服务器到新主服务器的问题,需要人工干预,可能会导致服务暂时不可用。
为了解决这个问题,Redis引入了Sentry模式,具有自动故障切换功能。
主从模型和哨兵模型虽然提供了基本的高可用,但并没有实现真正的数据分片存储,每个Redis实例都存储完整的数据。
为了解决数据存储瓶颈,RedisCluster应运而生,实现数据分片存储,每个分区对应一个Redis实例。
不过,RedisCluster直到2015年才正式发布。
各大企业迫切希望提升性能,开发自己的Redis集群解决方案,如Twemproxy、Codis、Ett等。
主要模式:REDIS通过单节点RDB和AOF机制实现数据持久化,但数据只存储在一台服务器上。
同一服务器。
为了解决数据持久化和读写分离的问题,利用复制功能实现主库数据更新从Redis数据库的自动同步。
介绍。
主模式由主节点和几个节点组成,该节点可以从节点创建一个级别的接头结构。
前哨模式:在主服务器故障之后,主模式需要主服务器的切换操作。
橙色模式REDIS已在2.6版本上发布,但是后一个版本需要提高稳定性。
橙色型号基于副本的主要副本。
还可以互相监视橙色节点,以实现分布式系统中的高可用性。
客户端碎片:客户端片段将逻辑保存在Radice客户端上。
该方案易于扩展,并且正在自由工作以促进服务器 - 放射线实例管理。
一致性哈希算法确保替换服务器群集时路由调整的影响最小。
Agent Shard:Twemproxy是基于Twitter的开源代理。
Twemproxy在提供REDIS群集功能时,减轻了管理几个示例的管理负担。
Codis:Codis是由Pea Pods独立开发的重新剂。
Codis使用芯片前方法来定义提前排水的分配,支持跨列表数据迁移并提供更灵活的群集管理。
RedisCluster:RedisCluster通过虚拟哈希插槽感觉数据碎片存储。
大型数据,高合并和高度可用的方案支持,性能和可用性比橙色模型更好。
集群模式下放化使用P2P体系结构来实现自动路由和平衡平衡 है।