欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Redis 哨兵与集群基础:数据冗余与备份的主从舞蹈

Redis 哨兵与集群基础:数据冗余与备份的主从舞蹈

2025/9/27 8:49:39 来源:https://blog.csdn.net/weixin_45065854/article/details/144518403  浏览:    关键词:Redis 哨兵与集群基础:数据冗余与备份的主从舞蹈

1、redis主从配置

1.1、简介

像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构。 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承担。 redis的主从同步是异步进行的,这意味着主从同步不会影响主逻辑,也不会降低redis的处理性能。 主从架构中,可以考虑关闭主服务器的数据持久化功能,只让从服务器进行持久化,这样可以提高主服务器的处理性能

1.2、概念

redis提供的一种高可用机制。允许一个主节点(Master)将所有数据同步到多个从节点(Slave)

主节点(Master):写操作--数据同步至从节点(Slave)

从节点(Slave):读操作--数据来源于Master

1.3、原理

        +-----------+

        |   Master  |

        |  (主节点)  |

        +-----------+

         /      \

        /        \

       /          \

      /            \

+-----------+   +-----------+

|   Slave 1 |   |   Slave 2 |

| (从节点1)  |   | (从节点2)  |

+-----------+   +-----------+

1、从节点发送SYNC命令:当一个从节点启动时,首先会向主节点发送SYNC命令,请求进行数据同步。

2、主节点进行全量复制:主节点收到SYNC命令后,会创建一个RDB快照文件,并将该文件发送给从节点BGSAVE指令。同时,在RDB文件生成期间,主节点会记录所有新的写操作,并在RDB传输完成后,将这些增量写操作也一并发送给从节点。从节点接收到RDB文件后,会加载该文件,覆盖本地已有的数据,从而达到全量数据同步的效果。

3、从节点接收增量数据:在全量复制完成后,从节点会继续接收主节点的实时写操作,并将这些写操作应用到自己的数据集中,保持数据的一致性。如果从节点与主节点断开连接,当从节点恢复连接后,主节点会将自从连接断开后的增量数据发送给从节点,以保持数据的同步。

4、在Redis 2.8之后,Redis引入了PSYNC命令来替代原来的SYNC命令,用于支持断点续传。PSYNC命令允许从节点在与主节点断开连接后重新连接时,从上次断开的地方继续同步数据,而不是重新进行全量复制。

1.4扩展:BGSAVE指令执行过程

执行BGSAVE命令时,Redis会首先检查是否存在正在执行的子进程。如果存在,BGSAVE命令会直接返回,而不会启动新的保存操作。

如果不存在正在执行的子进程,Redis会执行fork操作来创建一个新的子进程。在fork操作期间,父进程(即Redis主进程)会处于阻塞状态,直到子进程被成功创建。

子进程创建成功后,它开始将数据从父进程的内存空间转储到磁盘上。这个过程是异步的,意味着父进程可以在子进程进行磁盘写入的同时,继续处理客户端的请求。

当子进程完成数据保存后,它会退出。此时,父进程会得到通知,并可以使用新的RDB文件替换旧的RDB文件(如果配置了自动替换的话)。

2、redis主从复制实战

2.1、环境准备

10.211.55.52Master
10.211.55.53Slave1
10.211.55.54slave2

三台设备均安装部署redis完毕。详细安装教程见这里

精简版
[root@iycms ~]# wget http://download.redis.io/releases/redis-7.2.6.tar.gz
[root@iycms /]# tar -zxvf /root/redis-7.2.6.tar.gz  -C /usr/
[root@iycms /]# cd /usr/redis-7.2.6/
[root@iycms redis-7.2.6]# make

2.2、主节点redis配置

[root@master redis-7.2.6]# vim redis.conf 
#修改以下内容
#ip设置为0.0.0.0,其他服务器才能连接上
bind 0.0.0.0
#关闭保护模式
protected-mode no
#设置后台启动
daemonize yes
#开启AOF存储
appendonly yes

2.3、从节点1、2redis配置

[root@slave1 redis-7.2.6]# vim redis.conf 
Slave1、Slave2修改以下内容
#ip设置为0.0.0.0,其他服务器才能连接上
bind 0.0.0.0
#关闭保护模式
protected-mode no
# replicaof <masterip> <masterport> 设置为Master地址端口
replicaof 10.211.55.52 6379

2.4、重启服务

执行启动命

/usr/redis-7.2.6/src/redis-server   /usr/redis-7.2.6/redis.conf

启动如果提示:

7724:C 16 Dec 2024 08:56:36.992 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328.To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

执行sysctl vm.overcommit_memory=1

2.5、主从配置信息查看

进入命令端后执行info replication

[root@master redis-7.2.6]# ./src/redis-cli 
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.211.55.53,port=6379,state=online,offset=434,lag=1
slave1:ip=10.211.55.54,port=6379,state=online,offset=434,lag=1
master_failover_state:no-failover
master_replid:ac24ee2a81b58f75706fa750b6b89ccfc94f1e97
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:434
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:434

2.6、验证

Master设置一个键值

[root@master redis-7.2.6]# ./src/redis-cli 
127.0.0.1:6379> set name zhangjp
OK
127.0.0.1:6379> get name
"zhangjp"
127.0.0.1:6379> 

Slave1、Slave2查看

因为Slave1、Slave2没有设置后台模式,所以我们新建窗口验证效果

至此,主从复制就结束了,接下来是哨兵模式,哨兵模式顾名思义就是站哨的啦。

大概就是监视几个节点的状态,当主节点Master出现故障时,选举出新的Master,详解见下一章啦

版权声明:

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

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

热搜词