Redis 哨兵模式搭建详解

目录

[1. 哨兵模式的原理](#1. 哨兵模式的原理)

[1.1 监控](#1.1 监控)

[1.2 通知](#1.2 通知)

[1.3 自动故障转移](#1.3 自动故障转移)

[1.4 配置驱动](#1.4 配置驱动)

[1.5 集群拓扑](#1.5 集群拓扑)

[2. 准备](#2. 准备)

[2.1 服务器准备](#2.1 服务器准备)

(1)关闭所有服务器的防火墙

[(2)修改所有服务器的 hosts 文件](#(2)修改所有服务器的 hosts 文件)

[3)Sync 其他配置](#3)Sync 其他配置)

[3. Redis 主从搭建](#3. Redis 主从搭建)

[3.1 Redis 安装](#3.1 Redis 安装)

下载安装

目录结构

[3.2 redis.conf 配置](#3.2 redis.conf 配置)

[3.2.1 主节点配置](#3.2.1 主节点配置)

[3.2.2 从节点配置](#3.2.2 从节点配置)

[3.3 Redis 启动](#3.3 Redis 启动)

启动主节点

启动从节点

[3.4 Redis 状态检查](#3.4 Redis 状态检查)

[3.4.1 主节点信息](#3.4.1 主节点信息)

[3.4.2 从节点信息](#3.4.2 从节点信息)

[4. 哨兵配置](#4. 哨兵配置)

[4.1 sentinel.conf 配置](#4.1 sentinel.conf 配置)

[4.2 哨兵启动](#4.2 哨兵启动)

[4.3 查看启动状态](#4.3 查看启动状态)

[4.4 其他注意事项](#4.4 其他注意事项)

[5. redis.conf 参数详解](#5. redis.conf 参数详解)

[6. sentinel.conf 参数详解](#6. sentinel.conf 参数详解)

[7. 故障转移测试](#7. 故障转移测试)

[7.1 模拟主节点故障](#7.1 模拟主节点故障)

[7.2 检查哨兵的反应](#7.2 检查哨兵的反应)

[7.3 检查新的从节点](#7.3 检查新的从节点)

[8. 小结](#8. 小结)


在现代应用程序中,数据的高可用性和可靠性至关重要。Redis 的哨兵模式(Sentinel)是实现高可用性的一个强大解决方案,它不仅仅提供高可用性,还能进行实时监控及故障自动恢复。这篇文章将深入探讨 Redis 哨兵模式的工作原理,详细的搭建步骤,以及各项配置的深度解析,旨在帮助读者全面掌握 Redis 哨兵架构。

1. 哨兵模式的原理

Redis 哨兵模式的核心在于其能够监控 Redis 服务的状态,并在出现故障时自动进行故障转移。其工作原理可概括为以下几个要点:

1.1 监控

哨兵会定期检查 Redis 主节点和从节点的健康状态。它通过发送 PING 命令到各个 Redis 实例来检测其是否正常运行。在每次检查中,哨兵还会监测节点的延迟和响应时间。

1.2 通知

如果哨兵发现某个 Redis 节点出现问题,它会通过通知机制向系统管理员发送警告消息。这可以通过邮件、Webhook 或其他自定义通知方式实现。

1.3 自动故障转移

当主节点被识别为不可用时,哨兵会激活故障转移流程。它会选择一个从节点提升为新的主节点,并重新配置其他从节点以指向新的主节点。哨兵还会更新自身的监控信息,确保快速恢复服务。

1.4 配置驱动

哨兵的配置可以通过命令行界面或配置文件进行操作。每个哨兵都会共享同样的配置,以确保整个集群的一致性和高可用性。

1.5 集群拓扑

在哨兵模式中,通常建议设置至少三个哨兵实例以避免单点故障。这些哨兵实例可以是分布在不同的物理服务器上,增强系统的容错能力。而主从结构则是 Redis 数据高可用性的基础,每个主节点可以有多个从节点,整个系统形成一个高效的架构。

2. 准备

在搭建 Redis 哨兵模式之前,我们需要进行一些基本准备工作,确保环境的合理和稳定。

2.1 服务器准备

(1)关闭所有服务器的防火墙

为了确保 Redis 和哨兵可以正常通信,首先需在每台服务器上关闭防火墙。这可以通过以下命令来实现,不同系统的命令略有不同:

对于 CentOS/RHEL 系统:

bash 复制代码
# 停止防火墙  
sudo systemctl stop firewalld  
# 禁用防火墙  
sudo systemctl disable firewalld

对于 Ubuntu 系统:

bash 复制代码
# 停止 UFW 防火墙  
sudo ufw disable

确保在关闭防火墙时,理解可能带来的安全隐患,推荐在生产环境中使用更为精细的防火墙规则。

(2)修改所有服务器的 hosts 文件

为了方便节点之间的相互访问,建议在每台服务器的 /etc/hosts 文件中添加其他节点的 IP 地址配置。你可以通过如下命令进行编辑:

bash 复制代码
sudo nano /etc/hosts

添加以下行以确保每个节点能通过名称找到其他节点:

rust 复制代码
192.168.1.1 redis-01  
192.168.1.2 redis-02  
192.168.1.3 redis-03
3)Sync 其他配置

在完成 hosts 文件的修改后,确保所有该配置在集群中的一致性。可以通过在每台机器执行 ping redis-01 等命令确认配置有效。

3. Redis 主从搭建

将 Redis 配置为主从模式是搭建哨兵的关键步骤之一。

3.1 Redis 安装

在所有服务器上执行以下步骤来安装 Redis:

下载安装

首先,下载 Redis 的最新版本并进行解压:

bash 复制代码
cd /usr/local/src  
curl -O http://download.redis.io/releases/redis-6.0.9.tar.gz  
tar xzvf redis-6.0.9.tar.gz  
cd redis-6.0.9  
# 编译并安装  
make  
sudo make install

在此过程中,会生成 Redis 的可执行文件,通常包括 redis-server, redis-cli, 和 redis-sentinel

目录结构

安装完成后,建议创建一个目录用于存放配置文件和数据文件:

bash 复制代码
sudo mkdir /etc/redis  
sudo mkdir /var/lib/redis

3.2 redis.conf 配置

每个 Redis 实例都需要处理其自身的配置文件。在每台服务器上创建一个 redis.conf 文件,可以从示例配置文件中复制:

bash 复制代码
sudo cp /usr/local/src/redis-6.0.9/redis.conf /etc/redis/redis.conf
3.2.1 主节点配置

编辑主节点的配置文件 /etc/redis/redis.conf,进行以下重要配置:

bash 复制代码
# 指定绑定的 IP 地址  
bind 192.168.1.1  
protected-mode no  

# 设置密码  
requirepass yourpassword  

# 开启持久化  
save 900 1  
save 300 10  
save 60 10000  

# 配置数据库文件存储位置(确保对目录有写入权限)  
dir /var/lib/redis
3.2.2 从节点配置

在每个从节点 /etc/redis/redis.conf 中编辑如下:

bash 复制代码
# 指定绑定的 IP 地址  
bind 192.168.1.2  # 或者 192.168.1.3  
protected-mode no  

# 设置密码  
requirepass yourpassword  
masterauth yourpassword  # 匹配主节点的密码  

# 忽略启动时 Redis 的保护模式  
slaveof 192.168.1.1 6379  

# 配置数据库文件存储位置  
dir /var/lib/redis

3.3 Redis 启动

在完成配置后,接下来依次启动所有服务器上的 Redis 服务。

启动主节点

在主节点上执行:

bash 复制代码
redis-server /etc/redis/redis.conf
启动从节点

在每个从节点上执行相似的命令:

bash 复制代码
redis-server /etc/redis/redis.conf

你可以在后台执行 Redis,使用 & 符号,或者在系统的启动脚本中启用 Redis。

3.4 Redis 状态检查

启动 Redis 实例后,您需要检查每个节点的状态。使用 redis-cli 来获取节点的复制信息。

3.4.1 主节点信息

在主节点上执行:

bash 复制代码
redis-cli -h 192.168.1.1 -a yourpassword info replication

输出的结果应包括:

bash 复制代码
# Replication  
role:master  
connected_slaves:1  
slave0:ip=192.168.1.2,port=6379,state=online,offset=123456,lag=0

确保从节点已成功连接。

3.4.2 从节点信息

在每个从节点上执行:

bash 复制代码
redis-cli -h 192.168.1.2 -a yourpassword info replication

确保输出显示该节点当前为从节点并与主节点相连。

4. 哨兵配置

哨兵的配置将确保在主节点宕机时能够自动进行故障转移。

4.1 sentinel.conf 配置

在 Redis 安装目录下创建配置文件 sentinel.conf,该文件用于配置哨兵。您可以使用以下命令创建并编辑该文件:

bash 复制代码
sudo nano /etc/redis/sentinel.conf

添加以下内容:

bash 复制代码
# 监控主节点  
sentinel monitor mymaster 192.168.1.1 6379 2  
# 指定主节点下线时间  
sentinel down-after-milliseconds mymaster 5000  
# 设置故障转移超时  
sentinel failover-timeout mymaster 60000  
# 设置并行同步的从节点数  
sentinel parallel-syncs mymaster 1

4.2 哨兵启动

启动哨兵服务,您可以在每台哨兵服务器上运行以下命令:

bash 复制代码
redis-sentinel /etc/redis/sentinel.conf

4.3 查看启动状态

您可以使用 Redis 客户端检查哨兵的状态,可以在任意哨兵节点上执行:

bash 复制代码
redis-cli -p 26379 sentinel masters

这将列出当前被监控的主节点及其状态。

4.4 其他注意事项

  • 确保所有哨兵的配置文件都一致。
  • 哨兵之间需要互相通信,以协调故障转移,无需单独配置。
  • 运行环境中需保证网络良好,避免因网络问题导致错误的故障转移。

5. redis.conf 参数详解

理解 redis.conf 文件中的配置参数有助于优化 Redis 的性能和安全性。以下是一些关键参数及说明:

  • bind: 指定服务监听的 IP 地址。为了减少被攻击的风险,通常建议仅绑定私有 IP 地址。
  • protected-mode : 设置为 no 时,Redis 不强制要求设置密码。对于生产环境,建议设置为 yes,增加安全性。
  • save: 该配置用于指定数据持久化的方式,包括快照的保存时间(秒)和数据变更次数。
  • requirepass: 设置 Redis 的访问密码,用于认证客户端请求,增强安全性。
  • maxmemory : 设置 Redis 实例最大内存限制,超过该限制后可以使用 maxmemory-policy 定义的策略处理内存不足的情况。

6. sentinel.conf 参数详解

sentinel.conf 配置文件中的参数对于哨兵的功能至关重要。以下是一些常见参数及其说明:

  • sentinel monitor: 定义需要监控的主节点,包括名称、IP 地址、端口以及哨兵的节点数(用于选举)。
  • down-after-milliseconds: 指定在将主节点视作下线之前的等待时间(单位:毫秒)。在此时间内,如果哨兵未收到主节点的响应则认为其故障。
  • failover-timeout: 设置故障转移过程的超时时间,超过该时间后认为故障转移失败。
  • parallel-syncs: 在故障转移期间最大可以接受的从节点并行同步的数量,以提高故障恢复速度。

7. 故障转移测试

在完成以上配置后,您可以进行一次故障转移的测试,以检验系统的高可用性。

7.1 模拟主节点故障

在主节点上,通过执行以下命令故意使 Redis 主节点停止:

bash 复制代码
redis-cli -h 192.168.1.1 -a yourpassword shutdown

7.2 检查哨兵的反应

在哨兵节点上,执行以下命令来检查哨兵的状态及是否成功执行故障转移:

bash 复制代码
redis-cli -p 26379 sentinel masters

您应当看到新的主节点 IP 地址及状态更新。

7.3 检查新的从节点

使用如下命令连接新的主节点,检查从节点的状态:

bash 复制代码
redis-cli -h <new-master-ip> -a yourpassword info replication

8. 小结

通过以上步骤,我们详细地完成了 Redis 哨兵模式的搭建和配置。我们探讨了其工作原理及技术细节,确保在实际环境中的高可用性。了解 Redis 和哨兵的配置参数,不仅能让您优化性能,还能增强系统的安全性。

在生产环境中建立高可用性架构是很重要的,定期检查和维护各个节点的状态,确保其正常运行是必不可少的。如果您在实施的过程中遇到疑问或问题,请随时和我咨询。希望这篇文章能为您的 Redis 虚拟化旅程提供帮助与支持!

相关推荐
J.P.August2 小时前
如何设置 Data Guard 的报警机制?
数据库·oracle
Listen·Rain2 小时前
Excel拆分脚本
java·数据库·excel
一个略懂代码的程序员4 小时前
Redis02 SpringBoot整合Redis
spring boot·redis·后端
wa的一声哭了4 小时前
word中写论文的一些trick
java·数据库·python·sql·mysql·oracle·perl
初级代码游戏4 小时前
C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型2 处理连接字符串
数据库·mysql·entityframework
开心工作室_kaic4 小时前
springboot423玩具租赁系统boot(论文+源码)_kaic
开发语言·数据库·php·apache
ミカミミミ4 小时前
MySQL 索引事务
数据库·mysql
xzl045 小时前
Kudu 源码编译-aarch架构 1.17.1版本
大数据·数据库·database·kudu
东阳马生架构5 小时前
Redis应用—2.在列表数据里的应用
redis