上回说到redis主从同步时,master(主库)如果宕机了怎么解决...
我给出了一个手动解决的办法!
但实际上,如果你配置了Sentinel,它能自动发现master宕机并且进行自动切换slave(从库)变master 。
sentinel(哨兵)主要功能如下:
- 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
- 如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
- 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
1|2安装配置
实验环境:CentOS7虚拟机一台
配置:
一主(6379)两从(6380,6381)
三个 sentinel 检测主节点(26379,26380,26381)
存放位置自定义,运行程序时切换到改文件即可。
在正式环境中,需按照公司需求,安装配置在不同的linux上。
具体步骤请参考上一篇博客 本篇博客不做详细讲解~
1,先准备三个redis实例,




2,启动三个数据库实例
# redis-server redis-6379.conf # redis-server redis-6380.conf # redis-server redis-6381.conf
3,准备三个哨兵文件,监控主从架构

注意:避免冲突,复制前删除注释


4,分别启动三个哨兵实例
# redis-sentinel redis-26379.conf # redis-sentinel redis-26380.conf # redis-sentinel redis-26381.conf
注意: 如果发现不成功,需要删掉所有的哨兵配置文件,从新来过
5,检查哨兵状态是否正常,
# redis-cli -p 26379 info sentinel # 查看配置 # 配置如下表示正常 # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3 # 哨兵主节点名字叫做mymaster,状态ok,监控地址是127.0.0.1:6379,有两个从节点,3个哨兵
1|3故障实验
大致思路
- 杀掉主节点的redis进程6379端口,观察从节点是否会进行新的master选举,进行切换
- 重新恢复旧的“master”节点,查看此时的redis身份
1,首先查看三个redis的进程状态
ps -ef|grep redis
2,干掉master , 然后等待其他俩个节点是否自动被哨兵切换主从身份
kill 进程pid #干掉master进程
3,再查看另外两个slave的状态
发现其中一个节点变为主节点(随机的)
4,然后再开启主节点6379,检查三个节点的复制身份状态
此时,6379状态已经变成 slave 了



2|0redis-cluster
2|1引入
1,redis官方生成可以达到 10万/每秒,每秒执行10万条命令。
假如业务需要每秒100万的命令执行呢?
1,一台服务器内存正常是16~256G。
假如你的业务需要500G内存,那怎么办?
正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力,一堆机器做一件事
2|2cluster实例及配置
使用方式: 官方提供通过ruby语言的脚本一键安装
1,环境配置
redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。
通过配置,开启redis-cluster
port 7000 daemonize yes dir "/opt/redis/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes # 开启集群模式 cluster-config-file nodes-7000.conf # 集群内部的配置文件 cluster-require-full-coverage no # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
每个节点仅仅是端口运行的不同!
[root@localhost /opt/redis/config 17:12:30]#ls redis-7000.conf redis-7002.conf redis-7004.conf redis-7001.conf redis-7003.conf redis-7005.conf #确保每个配置文件中的端口修改!!
2,分别运行redis实例
# redis-server redis-7000.conf # redis-server redis-7001.conf # redis-server redis-7002.conf # redis-server redis-7003.conf # redis-server redis-7004.conf # redis-server redis-7005.conf
注意:此时集群还不可用
3,准备ruby的编程环境
# 1.下载ruby的源码包 wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz # 2.解压缩ruby源码 tar -xvf ruby-2.3.1.tar.gz # 3.进入ruby源码包,配置安装位置 ./configure --prefix=/opt/ruby/ # 4.开始编译且编译安装 make && make install # 5.配置ruby的环境变量 vim /etc/profile # 写入如下配置 PATH=$PATH:/opt/ruby/bin
4,安装ruby操作redis的模块
# 1.下载ruby操作redis的模块 wget http://rubygems.org/downloads/redis-3.3.0.gem # 2.安装 gem install -l redis-3.3.0.gem # 3.搜索创建redis集群的命令 find /opt -name redis-trib.rb /opt/redis-4.0.10/src/redis-trib.rb # 搜索结果
5,一键创建redis集群
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 # replicas 1 --代表每个主节点,有一个从节点 # 集群自动分配主从关系,默认: # 7000,7001,7001 为主库 # 7003,7004,7005 为从库
6,查看集群状态
redis-cli -p 7000 cluster info redis-cli -p 7000 cluster nodes #等同于查看nodes-7000.conf文件节点信息 # 集群主节点状态 redis-cli -p 7000 cluster nodes | grep master # 集群从节点状态 redis-cli -p 7000 cluster nodes | grep slave
6,开启集群
redis-cli -p 7000 -c # -p 指定数据库端口 # -c 指定开启集群模式
7,测试写入集群数据
127.0.0.1:7000> set name peng -> Redirected to slot [5798] located at 127.0.0.1:7001 OK 127.0.0.1:7001> exit [root@yugo /opt/redis/src 18:46:07]#redis-cli -c -p 7000 127.0.0.1:7000> ping PONG 127.0.0.1:7000> keys * (empty list or set) 127.0.0.1:7000> get name -> Redirected to slot [5798] located at 127.0.0.1:7001 "peng"
集群已经搭建完毕啦!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
2020-03-10 php redis做mysql的缓存,怎么异步redis同步到mysql数据库?