Redis主从结构搭建
主从模式的搭建
环境说明 windows11下安装的linux子系统wsl2,版本是Ubuntu22.04
- redis下载/解压/编译
由于redis官网下载需要使用他的cloud,好像要登陆啥的,直接一顿github源码下载一顿梭哈。
wget https://github.com/redis/redis/archive/refs/tags/7.2.5.tar.gz
tar zxvf 7.2.5.tar.gz
cd redis-7.2.5
make
cd src
make install
- 修改主从的配置文件
从redis解压的主目录中拷贝redis.conf文件,拷贝三份,分别是一主两从,重命名redis.conf1,redis.conf2,redis.conf3,并修改配置文件中部分配置。以下列举的都是修改的配置。
redis.conf1
# 让所有主机都能连接redis服务
bind 0.0.0.0
# 保护模式关闭,非回环地址也能连接redis服务
protected-mode no
# 由于是单个机器,所以就采用不同端口,后面的从节点会改变这个值
port 6379
# 后台运行
daemonize yes
# 跟随port
pidfile /var/run/redis_6379.pid
# 日志文件
logfile "/data/logs/log1"
redis.conf2
# 让所有主机都能连接redis服务
bind 0.0.0.0
# 保护模式关闭,非回环地址也能连接redis服务
protected-mode no
# 由于是单个机器,所以就采用不同端口,后面的从节点会改变这个值
port 6380
# 后台运行
daemonize yes
# 跟随port
pidfile /var/run/redis_6380.pid
# 日志文件
logfile "/data/logs/log2"
# 这里配成自己本机的IP地址,指向第一台master节点
replicaof xxx.xxx.xxx.xxx 6379
redis.conf3
# 让所有主机都能连接redis服务
bind 0.0.0.0
# 保护模式关闭,非回环地址也能连接redis服务
protected-mode no
# 由于是单个机器,所以就采用不同端口,后面的从节点会改变这个值
port 6381
# 后台运行
daemonize yes
# 跟随port
pidfile /var/run/redis_6381.pid
# 日志文件
logfile "/data/logs/log3"
# 这里配成自己本机的IP地址,指向第一台master节点
replicaof xxx.xxx.xxx.xxx 6379
- 运行起来
为了能方便启动和关闭,写了个脚本启动和关闭
启动脚本
sudo ./redis-server redis.conf1
sudo ./redis-server redis.conf2
sudo ./redis-server redis.conf3
关闭脚本
sudo ps -ef|grep redis|awk '{print $2}'|xargs sudo kill
- 验证
使用了一个可视化客户端工具AnotherRedisDesktopManager 下载链接如下: gitee.com/qishibo/Ano…
打开后连接master节点
连接slave节点
master节点添加一个key
查看slave节点有没有同步复制过去
以上,主从模式完成搭建,功能正常
主从模式的原理和分析
主从复制是如何实现的? 主从复制包括全量复制和增量复制。 全量复制:
- 新slave节点加入,slave节点会发送一个psync命令给master节点。
- master节点接收到psync指令之后,执行bgsave命令,生成一个快照。期间执行的写命令会添加到缓冲区中,后面发给slave。
- 生成快照之后,会把快照文件发送给slave节点,期间执行的写命令会添加到缓冲区中。
- slave节点接收到快照文件,会存储到磁盘中,随后清除旧数据,并把快照文件载入到内存中。
- master同时会把缓冲区的命令发送给slave节点,当slave节点完成快照的载入,就会逐个执行master发送过来的写命令。
增量复制: 增量复制就是当slave节点连接上后,完成全量复制,就会进行增量同步。当master节点执行了一个写命令,完成操作之后,会把写命令发给slave节点,slave节点接收到信息后也会执行该命令。这就是增量复制。
单节点有什么问题?
- redis单节点都能支持10w并发,固然强大,但是单节点cpu、内存、网络等资源有限,总会有一个上限,无法支撑更多的并发。
- 单节点不能做到高可用,单兵作战,当该节点挂了就没有办法正常提供服务了。
主从复制有什么好处呢?
- 数据冗余
- 故障恢复
- 负载均衡
主从复制有什么缺点呢?
- 时延:主从复制之间会存在复制的动作,会存在一定的时延,而且slave节点越多,时延问题越严重。
- 同步过程会消耗额外资源。同步会消耗额外的资源,会有一定的吞吐量降低
- 不能自己故障切换,需要人工介入,或者哨兵模式。
转载自:https://juejin.cn/post/7385373226875256847