Redis学习-4-3 Redis主从复制
1.主从复制:
Redis提供的高可用的解决方案,通过主从复制可以实现
1>读写分离
2>故障处理: 可以在某一台服务器出现故障的时候可以由其它服务器代替它保证应用可持续稳定的运行;
1:3的主从的集群结构,4台redis提供相同的功能;
主redis:负责数据的写
从redis:只负责数据的读
主的写会同步到从服务器,提高每台服务器的效率;
当主挂掉的时候,从服务器的某一个升级为主服务器,剩下两台从连接到新的主服务器上,继续提供数据的读取;
master-slave
2.主从复制的实现:
两种方式:
1>./redis-server --slaveof来指定从服务器的信息,很少使用
2>修改配置文件:
(1)新建配置文件:copy原redis.conf拷贝三份,分别命名为redis6380.conf,redis6382.conf和redis6384.conf
(2)master: 6380 slave: 6382 6384(1024-65535都可以当作自定义的端口号来使用)
将以下内容复制到redis6380的文件中
#引入原配置文件,注意引入的路径问题
include /usr/local/redis-3.2.9/redis.conf
#表示后台启动
daemonize yes
#该redis指定的端口号
port 6380
#进程号
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb
redis-server ../redis.conf &
从服务器中配置
include /usr/local/redis-3.2.9/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6382.pid
logfile 6380.log
dbfilename dump6382.rdb
slaveof 127.0.0.1 6380 -->当前6382是6380的从,指定主从关系
同理6384
把服务器启动起来,每个配置文件启动一个独立的redis
./redis-server ../redis6380.conf
./redis-server ../redis6382.conf
./redis-server ../redis6384.conf
查看进程 ps -ef | grep redis
./redis-cli -p 6380
info -->统计信息的 info cpu:显示cpu的信息 info Replication
./redis-cli -p 6382查看6382的信息 master_link_status:up up表示master正在运行,down表示master已挂掉;
./redis-cli -p 6384
info Replication
验证读写分离:
在第一个窗口主中 set k1 v1 set k2 v2
在第二个窗口从中 keys *
然后set k3 v3 报错readonly
第三个窗口中同第二个窗口一致
3.故障处理的实现
1>冷处理方式:当redis出现故障的时候,人为的处理
命令 slaveof no one:将某一个服务器提升为master
slaveof 127.0.0.1 6381(将slave挂至一台新的服务器)
设置主服务器挂掉shut down
将6382升级为主
进入6382的窗口执行命令slaveof no one
info Replaction 查看role为master
然后在从服务器的redis窗口执行slaveof 127.0.0.1 6382
数据读的性能有所下降,因为读的服务器少了一台
如果6380修好,那么启动6380服务器 ./redis-server ../redis6380.conf
ps -ef | grep redis
./redis-cli -p 6380
info Replication 查看role是master,把6380挂在6382上
slaveof 127.0.0.1 6382
最大的弊端就是:处理问题有时间延迟,因为是人为操作,对读写性能有一定的影响
2>热处理方式:
哨兵系统:
哨兵也是redis,不做读写,只监控多个redis服务实例的运行情况,有三个主要任务:
监控:不断的检查主服务和从服务器是否按照预期正常工作;
提醒:被监控的redis出现问题时,通知管理员或其它应用程序;
自动故障转移:
哨兵系统的处理方式:
配置哨兵系统:
1>copy哨兵文件:
cp sentinel.conf sentinel26380.conf
cp sentinel.conf sentinel26382.conf
cp sentinel.conf sentinel26384.conf
2>修改配置文件信息:
sentinel monitor <name> <masterIP> <masterPort> <投票数>
例如修改port 26380
修改监控信息: sentinel monitor mymaster 127.0.0.1 6382[master] 2[投票数]
3>启动redis,启动哨兵监控3个redis的运行状态
./redis-sentinel ../sentinel26380.conf 不是后台启动,是前台启动方式
./redis-sentinel ../sentinel26382.conf
./redis-sentinel ../sentinel26384.conf
稍等哨兵的心跳机制,shutdown主6382,查看哨兵的打印信息,发现自动选举出新的master
启动6382的redis,发现哨兵将其作为新的从服务器挂在master上。
哨兵崩溃的话怎么办?需要人为关注一下哨兵和主从的运行状态。
从服务器自动升级为主,另一个从服务器挂在新的主服务器上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理