您的位置:首页 > 文旅 > 旅游 > redis主从复制、哨兵、集群

redis主从复制、哨兵、集群

2024/10/6 8:25:05 来源:https://blog.csdn.net/qq_63214872/article/details/139379866  浏览:    关键词:redis主从复制、哨兵、集群

在实际的生活环境中,如果只使用一个redis进行读写操作,那么面对庞大的访问人群是崩溃的,所以可以有几个redis,一个用来做主机,提供修改数据操作,而这个主机用来控制其他redis,即将更新的发送,保证一致性,而其他的redis只能是读操作,无法进行更改数据!

所以大致为一个redis用来写,其他redis复制主redis,但是用户只能读不能写!

那么如何配置呢?


1.在redis.conf中添加 replicaof 主机的ip 端口号

例:

2.在从机中的redis.conf中添加masterauth "主机redis的密码"

例:

如果在运行中想更改关系,比如

A有两个小弟B,C,我们现在让C的主机变为B,可直接使用命令

slaveof 新主库IP 新主库端口

不过如果出现宕机等重启情况,C的主机还是A

因为命令并未更改redis.conf中的配置

从 变为主

slaveof no one

将当前从机变为主机


复制的原理

slave启动,数据清零 当从机的redis启动时,会把自身体的数据清空

首次连接,全量复制 第一次连接会将主机所有数据打包发给从机

保持通信  在每个周期从机给主机发送包保持连接

每次快照,更新从机

从机下线重连,重连续传  master和slave中都有一个offset,根据判断offset来确定从哪个节点重新传输。

缺点:实际中有许多从机,导致主机IO量大,存在复制延时

master挂了后,不能出现临时master替补,无法进行实时操作

由此引入哨兵

哨兵的作用:

1.监控redis的运行状态,包括master和slave

2.当master down机后,自动将slave切换master

保证读写功能稳定

功能

主从监控 消息通知 故障转移 配置中心

哨兵配置sentinel.conf

启动

redis-sentinel sentinel.conf(文件名) --sentinel

相关问题

如果master宕机两台数据能否访问?

不能,此时需通过哨兵选择新的master后才可以继续访问

之前down机的master恢复后,还会不会是老大?

不会,变为slave,只能读不能写


哨兵流程

哨兵监控多个redis运行

当哨兵发现master超过配置的时间未响应包时,便会投票认为该masterdown机

当哨兵投票个数超过指定时,便认为该master宕机

由哨兵组选出一个哨兵将该master移出,并在slave中选出新的master

选新master流程为:

从master下的slave中按条件挑选

权限高>偏移量大(之前复制master的数据最多,完整性最好)>id号

选出的slave 执行slaveof no one变换为master

将原master下的slave归并到新的master,

当已下线的master上线时,新master对其发送slaveof指令将其变为slave。

集群哨兵+主从复制:并不能保证数据的不丢失,所以引出了redis集群

redis集群:提供多个redis节点间共享数据的程序集,支持多个master

用处:

支持多个master,一个down机可用其他master继续修改数据

无需哨兵功能

客户端只需连接集群中某个节点

通过redis槽位实现数据的分布式存储


分片的方法:

取余分片:通过哈希函数转换成值再对某数取余,得到存放位置

缺点,如果出现down机等情况会导致数据混乱,因为取余的数字发生改变

一致性哈希算法:将所有节点和键值对映射到一个环形的哈希空间中,通常是一个虚拟的圆环。这个圆环的范围是从0到最大哈希值。每个节点被映射到环上的一个点,而键值对也被映射到环上的相应位置。当查找一个键时,算法会沿着圆环顺时针方向查找最近的一个节点,然后将键值对存储在这个节点上。

优点:加入和删除节点只会影响哈希环中顺时针方向的相邻节点

缺点:存在数据倾斜的情况(某个点数据特别多)


CRC16算法

产生的hash值有16bit(65536个),但为什么用16384呢?

1.槽位为65536会导致发送的ping包过大

2.redis集群主节点不可能超过1000个,所以够用

3.槽位越小,节点少情况下方便压缩,容易传输

redis集群不保证数据一致性(因为一个redis收到命令后会异步同步给其他redis,此过程中可能出现down机导致数据不一致)

防止路由失效加-c

info replication 查看当前redis的主从关系

cluster failover 主从关系调整

redis-cli -a 密码 --cluster add-node 新机:端口 旧机:端口

redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

reshard(重新分派槽号)各个主机都分部分坑位给新的节点,故新节点槽位段数会有多个。

删除节点 redis-cli -a 密码 --cluster del-node Ip:从机ip+端口 从机6388节点ID

在集群条件下不能进行set等多元素操作,因为操作数据必须在同一个槽中。

可以通过分组进行多组操作

例: mset k1{x} v1  k2{x} v2 这里{x}表示为一个名为x的分组

cluster keyslot 键名 查看该键在哪个槽位

感谢观看!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com