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.52 | Master |
10.211.55.53 | Slave1 |
10.211.55.54 | slave2 |
三台设备均安装部署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,详解见下一章啦
标签:Redis,redis,节点,7.2,master,0.0,root,主从,冗余 From: https://blog.csdn.net/weixin_45065854/article/details/144518403