玩转Redis的高可用(主从、哨兵、集群)
所谓高可用,也称为高可用,是设计分布式系统架构时必须考虑的因素之一。
Redis High Guestability 主要有三种模式:主从模式、哨兵模式和集群模式。
Redis 为 Redis 提供复制功能。
多引擎Redis部署时,这些机器节点分为两类,一类是主节点(master node),一类是主节点(slave node)。
通常,主节点可以读写,从节点只能执行读操作。
一个主节点可以有多个节点,但其中一个节点只会有一个主节点,这就是所谓的Master Multi-Structure。
· 支持主从复制。
阻塞 因此,主从同步期间,客户端仍然可以发送查询或修改请求; 在同步期间,如果客户端发出request请求,Redis会返回同步前的数据。
· Redis没有自动容错和恢复功能。
切换后引入IP,降低系统可用性; >
· Redis master 与节点中的数据相同。
在此模式下,Master 将被丢弃,Sentry 将自动选择 Master,并将另一个 Slave 分配给新的 Master。
在Master和Slave模式下,Redis还提供了Sentinel命令Redis-Sentinel。
原理是Sentry进程向所有Redis机器人发送命令,等待Redis服务器响应来监控多个Redis实例。
作为一般规则,为了让决策者更容易,请使用奇怪的警卫。
多个Sentinel组成一个Sentinel集群,Sentinel之间会直接通信,检查Sentinel是否正常工作。
/p>
守护者
也可能有问题。
构成不同Sentry模型的Sentry之间也会进行监控。
Guardian 与 Kafka 集群中的 Zookeeper 功能非常相似。
· 哨兵模式基于主斯托夫模式。
·主可自动切换,系统更强,可用性更高。
· 主模式的缺点,每台机器上的数据都是一样的,内存可用性差低的。
·Redis更难维持在线扩展,当群集容量达到上限时,在线扩展将变得非常困难。
redis群集模式不使用序列的哈希算法,而是使用插槽插槽。
REDIS Sentinel模式主要可以实现高可用性,读取和记录redis3.0。
在通信过程中使用特殊端口号,即服务端口的外部数字加10,000,如果端口号为6379,则与其他节点连接的端口号为16379。
由特殊的二进制协议收到。
为客户端观察到整个群集。
客户可以连接到任何单元进行工作,就像使用Redis副本时一样。
当键在工作客户端时未分配给设备时,Redis将返回管理命令以指向正确的节点。
它与在浏览器页面上重定向302有点相似。
根据官方建议,部署群集需要至少三个主要节点,并且最好使用带有三个主要和三个下属节点的六核模型。
每个节点上有两件事。
其中之一是一个插槽。
其值的范围:0–16383。
它可以从上面的文件redis-trib.rb中读取。
执行的结果显示分布。
其中,三个大师的16383个老虎机。
另一个是一个群集,可以理解为类似于Sentinel的群集控制插件。
搜索与相应插槽相对应的节点,然后自动移动到相应的节点以进行访问操作。
为了确保高可用性,Redis-Cluster群集实现了“主要下属”模式,其中一个主要节点对应于一个或多个下属节点。
lisum。
每个函超时期间与master1通信,则认为master1宕机,从节点master1将开启,slave1将成为主节点继续运行。
提供服务。
如果master1和它的从机slave1都down了,整个集群就会因为集群槽位映射不完整而进入失败状态。
如果集群中超过一半的master挂掉,那么无论是否有slave,集群都会进入故障状态。
redis-cluster采用了去中心化的思想。
客户端直接连接到Redis节点,无需连接到中间代理层。
集群中的所有节点,并且可以连接到集群中的任何节点。
一个可用节点就足够了。
扩容redis集群涉及向集群添加机器,缩小集群涉及从集群中移除机器以及在集群中的节点之间重新分配slot 16383(数据迁移)。
扩缩容也使用集群管理工具redis-tri.rb。
扩容时,首先使用redis-tri.rbadd-node向集群添加新机器。
虽然新机器已经在集群中,但它没有分配插槽,仍然无法工作。
从。
新节点只有使用redis-tri.rbreshard重新哈希segment(数据迁移)并将旧节点上的slot分配给新节点后才能生效。
缩容时,先使用redis-tri.rbreshard移除机器上的槽位,然后使用redis-tri.rbadd-del移除机器。
采用去中心化的思想,数据按照时隙跨多个节点存储和分布,数据在节点间分布,数据分布可动态调整;
可扩展:线性扩展至1000个。
多个节点,可以动态添加或删除节点;
高可用性:当部分节点不可用时,集群仍然可用。
通过添加slave作为数据备份,可以实现自动故障转移,节点之间通过gossip协议交换状态信息,并采用投票机制从下属到主的角色的增加;
1。
RedisCluter是一个没有中央节点的群集体系结构。
他使用戈斯协议(传播谣言)共同恢复集群的状况。
但是,八卦在延迟和消息的冗余方面存在问题。
当组件太多时,节点之间存在ping/pang连接,而不必要的流量需要许多网络资源。
尽管RedS4.0优化了,但仍然存在此问题。
2。
数据迁移的问题
重新排列器可以动态扩展和压缩节点。
在当前的实施中,此过程仍然是半自动的,需要手动干预。
在缩放或向下扩展时,需要数据迁移。
为了确保迁移的一致性,所有redis迁移操作都是同步的。
执行迁移时,两端的redis进入了各种长度的阻塞状态。
对于小键,这次可以忽略。
。
但是,如果密钥内存太大,在严重的情况下,这将导致群集发生故障。
主奴隶:主结悬挂后,您需要手动指示新的主人。
可访问性不高,实际上不使用。
前哨模式:在主节点冻结后,巡逻过程会积极选择一个新的主节点,该节点具有很高的可访问性,但是每个节点中存储的数据是相同的,这会导致空白的内存浪费。
数据量很小,群集的大小不是很大。
当需要自动故障容忍度和紧急恢复时使用它。
群集模式:当数据量相对较大并且人员数量较高时,请使用群集模式。
Redis 3.0后,Rediscluter是正式推出的。
相对较晚。
很少有案例能证明他在大型生产媒体中的成功。
测试将需要时间。
Docker搭建Redis哨兵模式
Redis哨兵模式旨在自动故障转移主节点并确保Redis集群的高可用性。接下来我们将通过Docker反射快速部署一个Redis Sentinel集群。
该环境将使用 3 台服务器构建,配置为一台主服务器、两台辅助服务器和三台哨兵服务器。
首先,确保每台服务器上都创建了“/usr/local/redis/conf”和“/usr/local/redis/data”目录来存储配置文件和数据。
在主节点服务器上创建 redis.conf 文件,配置如下: 主节点设置必须包含从节点 10.129.12.5 和 10.129.12.6 的 master 角色和 Slave 角色信息。
在从节点服务器上,创建相应的`redis.conf`文件,设置相应的`slave`属性,并指向主节点的地址和端口。
请注意,在考虑服务器性能时,仅在 10.129.12.6 上启用了“AOF”和“RDB”用于数据持久化,其他节点均被禁用。
启动容器时,需要在主备节点主机上依次运行Docker命令。
在主节点服务器上,使用容器执行“info”命令来验证它现在是否具有“master”角色,并确认有两个“slave”节点。
通过在从节点上执行相同的操作,可以检查`slave`状态和主节点信息,以确保主从复制正常。
接下来,配置三台 Sentinel 服务器。
在每个哨兵服务器上创建一个“sentinel.conf”文件。
配置包括敏感信息和集群参数。
启动sentinel容器后,就可以进行故障转移测试。
关闭主节点服务器上的Redis服务,等待几秒,然后再次检查辅助节点服务器上的Redis容器的状态。
如果切换成功,Secondary节点将升级为主节点,实现故障自动切换。
至此,一个通过Docker部署的Redis哨兵模式集群就搭建完成了,主节点故障自动切换,保证了Redis服务的高可用。
如果文章有用,记得点赞支持。
欢迎收藏、关注。
我们将持续更新更多技术。
docker 配置redis主从,哨兵sentinel
注意:使用Docker自己添加。
将Redis与两个主人和两个奴隶一起使用,请使用前哨进行高可用性。
主服务器失败时 该服务器自动升级为主服务器。
主奴隶简介 - 主奴隶 该数据库分为两种类型:主数据库(Master)和从属数据库(从属)。
复制的特征:主数据库支持读写操作。
读写操作引起的数据更改将自动同步到从数据库。
从数据库主要用于从主数据库接收数据和访问数据。
虽然主人可能有许多奴隶,但奴隶仅适用于主人。
奴隶的阅读和写作活动将在重新开始大师的阅读和写作活动后同时进行,而不会伤害其他奴隶的阅读。
大师掉下后, 从将不会自动推广到主服务器。
动作被淘汰 - 当奴隶开始开始时 它将积极交付到主的同步顺序。
收到它后, Master将Kash存储在背景和背景的背景中,并发送快照文件和快照文件订单。
收到后, 从机打开快照文件并执行缓存命令。
开始复制后, Master收到的命令会同时发送给Writer,以保证数据的一致性。
环境准备和配置:下载并安装Redis。
找到配置文件目录,如果不存在则创建它。
下载并检查redis.conf文件并复制三份。
配置文件修改如下:允许远程连接; 关闭保护模式; 修改redis-6379.conf以启用持久性并定义日志文件。
修改redis-6380.conf和redis-6381.conf; 设置主服务器IP; 将其配置为只读模式; 允许远程连接; 持续打开 指定日志文件。
启动容器:-d; - 姓名, -p 以及三个容器,一个主服务器(redis-6379)和两个使用 -v 参数的从服务器(redis-6380、redis-6381)。
测试容器是否启动成功,并查看容器名称是否出现。
将redis-6380和redis-6381设置为主服务器。
测试主从配置成功。
使用三个客户端窗口,主服务器设置密钥值,从服务器获取密钥值验证。
Sentinel配置(哨兵模式):Sentinel用于监控Redis集群的运行状态:Sentinel模式基于主从模式。
当主服务器出现故障时。
从属服务器的哨兵选择新的主服务器并更新配置文件。
主服务器重启后, 它成为一个从属服务器。
一个Sentinel集群可以管理多个主从Redis,但是最好不要部署在同一台机器上。
工作机制:看门狗发送 PING 命令以按频率监视事件,然后标记程序化离线状态。
其他看门狗确认目标的离线状态; 然后主从状态会自动调整。
启动Redis服务器; 配置主从关系和Sentinel集群,并使用Docker运行测试。
哨兵模式说明:启动三台Redis服务器; 将它们作为哨兵进行监控并配置主从关系。
测试步骤:查看Sentinel授权状态日志文件。
主服务器容器停止,从服务器自动提升为主服务器。
检查从服务器是否已成为新的主服务器。
Redis 哨兵模式 - 源码梳理
本文基于 Redis 7.0.11 版本。哨兵模式代码的处理逻辑如下:哨兵节点向已知的主节点以及从节点到节点发送信息命令。
收到主节点的信息响应后,解析从字段信息,创建对应的从节点实例。
收到节点的信息回复后,解析slave_master_host、slave_master_port、slave_master_li nk_status、slave_priority、slave_repl_affset、replica_annound等信息(步骤2和sentinelinflycallback)。
在Sentinel的初步数据中。
通过__Sentinel__订阅:Hello Channel,获取其他哨兵节点的信息。
其中link->act_pin_time表示没有收到响应的时间传输的初始ping请求是最早的,收到响应后会重置为0。
所以当它不为0时,表示还没有收到ping请求。
link->last_avail_time表示最近一次收到ping有效响应的时间,link->last_pong_time表示收到ping响应的时间(有效和无效),link->pc_last_activity表示最近收到消息,RI ->role_reported_time说的是上次收到信息并返回时,角色与上次相比发生变化的情况。
Thesecretlivesofdata.com Raft 一致性算法
redis 哨兵模式 至少多少个节点
当配置了Redis从属节点时, 您需要编辑从属节点的配置文件:Slaved92.168.0.1006379-从设备将连接主节点和端口号的192.168.0.100 IP地址。6379。
如果在主节点上启用了密码身份验证, 在编队文件中包括MasteradAdmin。
它被认为是主节点的密码管理员。
组成完成后, 重新启动从属节点的REDIS服务。
Sentinel模式是Redis束的高可用解决方案。
在Sentry模式下,REDIS事件分为主节点和从属节点。
大师节点负责数据编写活动,从属节点负责数据阅读活动。
当大师节点被打破时 前哨将自动找到并选择一个新的主节点,以确保系统的高可用性。
设置前哨模式时, 至少需要3个节点。
其中一个用作主节点,另外两个用作setInel节点。
Sentinel节点负责监视主节点的状态。
哨兵将根据配置的规则选择一个新的主节点。
Sentinel模式的优点是它会自动识别失败,并且不会干扰继承。
输入前哨模式时, 不同网络中的节点以促进系统的灾难性推荐分发。
同时, 为了保证系统的高可用性, 当数量小于3时, 建议至少配置3个哨兵节点,因为可能会出现仲裁庭选举的问题。
在哨兵模式下, 节点之间的通信是通过Redis协议进行的。
哨兵节点定期发送PING命令来检查主节点的状态。
如果主要点头没有反应。
假定主节点发生故障,并将启动故障转移过程。
Sentinel模式还支持多master模式; 这意味着集群中可以并发运行多个主节点,以提高系统的读写性能。
哨兵模式自动失效; Sentinel模式提供了多种监控主节点状态的功能,大大提高了Redis集群的可用性和可靠性。