找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2841

积分

1

好友

394

主题
发表于 8 小时前 | 查看: 0| 回复: 0

数据库是应用系统最重要的资产之一。在众多数据库技术中,Redis以其高性能和丰富的数据结构著称。本文将聚焦于如何通过部署哨兵(Sentinel)集群来为Redis服务提供高可用保障。

在了解哨兵原理之后,本小节将通过实际操作,搭建一个高可用的Redis哨兵集群。

架构设计

我们采用一主两从的经典架构,并部署三个哨兵节点进行监控。主从集群的搭建可参考相关教程,搭建成功后,在Master节点执行 info replication 命令,应能看到类似以下输出:

# Replication
role:master
connected_slaves:2
min_slaves_good_slaves:2
slave0:ip=192.168.31.196,port=6379,state=online,offset=85,lag=1
slave1:ip=192.168.31.197,port=6379,state=online,offset=85,lag=2
master_repl_offset:85
repl_backlog_active:1
repl_backlog_size:268435456
repl_backlog_first_byte_offset:2
repl_backlog_histlen:84

部署哨兵

哨兵配置文件在三个节点上基本一致,主要区别在于 bind 参数需要修改为当前节点的IP地址。请注意:哨兵启动后,会自动修改配置文件中的部分运行时信息。

以下是哨兵配置文件 /etc/redis-sentinel.conf 的核心内容示例:

# 哨兵端口
port 26379

# 后台运行
daemonize yes

# 日志文件
logfile "/var/log/redis/sentinel.log"

# 工作目录
dir "/tmp"

# 监控的主节点信息:
# mymaster:主节点名称(可自定义)
# 192.168.31.195 6379:主节点地址和端口
# 2:quorum值(至少需要2个哨兵同意才能判定客观下线)
sentinel monitor mymaster 192.168.31.195 6379 2

# 主节点密码(如果设置了requirepass)
sentinel auth-pass mymaster your_redis_password

# 主观下线时间(毫秒)
sentinel down-after-milliseconds mymaster 5000

# 故障转移超时时间(毫秒)
sentinel failover-timeout mymaster 60000

# 并行同步的从节点数量
sentinel parallel-syncs mymaster 1

# 绑定IP(改为当前节点的IP)
bind 192.168.31.195

启动哨兵

如果通过yum等包管理器安装的Redis,通常会附带哨兵服务,可以直接使用systemctl管理。

systemctl start redis-sentinel
systemctl enable redis-sentinel

查看哨兵信息

启动后,可以通过以下命令连接到任意哨兵节点查看状态:

redis-cli -h 192.168.31.195 -p 26379 info

在输出信息中,找到 Sentinel 部分,可以看到类似以下内容,表明哨兵已成功监控到1个主节点,该主节点有2个从节点,并且集群中有3个哨兵节点。

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.31.195:6379,slaves=2,sentinels=3

宕机测试与故障转移

现在,让我们模拟主节点宕机,来验证哨兵(Sentinel)集群的自动故障转移能力。你可以通过观察哨兵的日志文件(如 /var/log/redis/sentinel.log)来了解完整的选举过程。日志中会记录从客观下线判定到新主节点切换的全过程,下面是一个简化的示例:

1137:X 18 Jan 23:32:26.642 # -odown master mymaster 192.168.31.195 6379
...
1137:X 18 Jan 23:33:25.601 # +switch-master mymaster 192.168.31.195 6379 192.168.31.196 6379
1137:X 18 Jan 23:33:25.601 * +slave slave 192.168.31.197:6379 192.168.31.197 6379 @ mymaster 192.168.31.196 6379
1137:X 18 Jan 23:33:25.601 * +slave slave 192.168.31.195:6379 192.168.31.195 6379 @ mymaster 192.168.31.196 6379

从日志可以看到,主节点已从 192.168.31.195 切换到了 192.168.31.196。这个过程实际上隐藏了一个需要注意的“坑”,你发现了吗?

故障转移后的配置变化

故障转移完成后,哨兵会自动修改Redis节点的配置文件。

新Master节点的配置
查看新主节点(192.168.31.196)的配置文件,会发现原来指向旧主节点的 replicaof(或 slaveof)配置行已经被自动移除,它现在是一个独立的Master。

Redis新主节点配置文件,replicaof指令已被注释或删除

其他从节点的配置
另一个存活的从节点(192.168.31.197)的配置文件会被自动更新,其 replicaof 指令指向了新的主节点 192.168.31.196

Redis从节点配置文件,replicaof指令指向新的主节点IP

通过以上步骤,一个具备自动故障转移能力的Redis哨兵高可用集群就部署完成了。如果你想了解更多关于分布式系统和高可用的实践,欢迎到云栈社区后端与架构板块交流探讨。

历史内容推荐

MongoDB 角色和权限,管理员,复制集,分片集群,wiredtiger,OpLog,纯内存引擎

PostgreSQL 权限,模式,块复制,逻辑复制,Patroni,物理备份,模式

MySQL crud,user,innodb,索引,主从,物理备份,系统表,视图,MariaDB

Elasticsearch(es) 倒排索引,分词,lucene,ELFK,索引,副本,分片,web管理

Hadoop HDFS dn,nn,jn,分块,副本,配额,快照,回收站,追加模式,Kerberos

RabbitMQ,虚拟主机,交换机,队列,绑定,持久化,镜像队列,网络分区,RocketMQ

Kafka-集群部署,Topic,分区,副本,生产者,消费者(组),持久化,顺序读写,零拷贝,扩容

ZooKeeper-集群部署和选举,读写流程,事务日志,数据和快照,ACL,4字命令,监控和备份

Squid,HAProxy,LVS,Keepalived,内网穿透FRP

Web服务器-Nginx反向代理,负载均衡,安全配置,日志,流量镜像,websocket,跨域

Kubernetes(k8s)-基本概念,部署,工作负载,服务,网络,存储,配置,调度,证书,监控

Docker-docker基本信息,基本命令,dockerfile,原理,仓库,存储网络日志,番外篇

云计算&虚拟化-包括服务器购买,虚拟化介绍,虚拟磁盘,虚拟网络,创建虚拟机,安装虚拟机

dashboard,xml解释,克隆,快照,初始化,esxi介绍

Linux进阶-硬件,日常运维,基础软件,日志,进阶命令,防火墙,shell,内核,初始化

Linux基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置




上一篇:Java后端日志实践:SLF4J与Logback配置详解
下一篇:ThinkPad T14p Gen 2二手行情:Ultra9+RTX4050高端商务本如何半价入手
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 16:12 , Processed in 0.238353 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表