Docker 环境下 Redis 主从复制与哨兵机制的搭建实战​

107 阅读6分钟

Docker 环境下 Redis 主从复制与哨兵机制的搭建实战

在当今的互联网应用开发中,Redis 作为高性能的键值数据库,被广泛应用于缓存、消息队列等场景。为了保障 Redis 服务的高可用性和数据安全性,主从复制与哨兵机制是不可或缺的架构设计。本文将详细介绍如何在 Docker 环境下搭建 Redis 主从复制与哨兵机制,助力开发者构建稳定可靠的 Redis 服务。

一、启动 redis-master

1、操作说明

在使用 Docker 启动 Redis 主节点容器时,--name redis-master 这一参数用于为容器指定一个唯一且易于识别的名字。这个名字不仅方便后续在命令行操作中快速定位容器,还在容器间通信等场景中发挥着重要作用。例如,当其他容器需要与 Redis 主节点进行交互时,可以通过这个名字来建立连接,而无需关注容器实际的 IP 地址,因为 Docker 会自动进行域名解析。

2、redis.conf 配置文件

redis.conf 配置文件是 Redis 服务器运行的核心配置文件,它包含了 Redis 的各种运行参数和行为设置。虽然这里没有展示具体的配置内容,但通常会涉及到端口设置、持久化策略、安全认证等关键配置。比如,端口设置决定了 Redis 服务对外提供服务的端口号,默认是 6379;持久化策略则关系到数据在磁盘上的存储方式,常见的有 RDB(快照)和 AOF(追加文件)两种,合理的持久化配置可以确保数据在服务器重启或故障时不丢失;安全认证配置则用于限制对 Redis 服务的访问,防止未经授权的操作。

二、启动 redis-slave

1、操作说明

在启动 Redis 从节点容器时,--link redis-master 这一参数至关重要。它建立了从节点容器与主节点容器之间的通信桥梁。通过这种方式,从节点容器可以在配置文件中直接使用容器名redis-master 来替代主节点的实际 IP 地址,实现与主节点的连接。这种基于容器名的通信方式,极大地增强了系统的灵活性和可维护性。当主节点容器的 IP 地址发生变化时,从节点无需手动修改配置文件中的 IP 地址,Docker 会自动处理域名解析,保证连接的正常建立。

2、redis-6380.conf 配置文件

redis-6380.conf 配置文件是 Redis 从节点的专属配置文件。其中,关键配置 replicaof redis-master 6379 明确指定了该 Redis 实例作为从节点,并且要连接的主节点容器名为 redis-master ,端口号为 6379。通过这一配置,从节点会主动向主节点发起连接请求,一旦连接成功,从节点就会开始复制主节点的数据。在数据复制过程中,从节点会定期向主节点发送心跳包,以确保连接的有效性和数据的实时同步。

三、配置 Sentinel 哨兵

1、进入容器

要对 Redis 容器进行 Sentinel 配置,首先需要进入容器内部。使用命令 docker exec -it redis-master /bin/bash 可以进入 redis-master 容器的命令行界面。这里的 -it 参数分别表示以交互模式和分配伪终端的方式进入容器,使得我们能够在容器内部进行各种操作,就如同直接登录到容器操作系统一样。对于每个 Redis 容器(包括主节点和从节点),都需要进行这一步操作,因为每个节点都需要配置 Sentinel 来实现高可用性监控。

2、创建配置和日志文件

进入容器后,依次执行以下命令创建 Sentinel 所需的配置文件和日志文件:

cd / && mkdir sentinel
cd /sentinel && touch sentinel.conf && touch log.txt

mkdir sentinel 命令用于在根目录下创建一个名为 sentinel 的文件夹,用于存放 Sentinel 的相关文件。touch sentinel.conf && touch log.txt 命令则分别创建了 sentinel.conf 配置文件和 log.txt 日志文件。配置文件用于存储 Sentinel 的各种运行参数,而日志文件则记录了 Sentinel 运行过程中的各种信息,包括节点状态监控、故障切换等操作的详细记录,这些日志信息对于后续的故障排查和系统维护至关重要。

3、修改 sentinel.conf 配置

使用 cat >>./sentinel.conf <<EOF 命令可以向 sentinel.conf 配置文件中追加内容。以下是配置文件的关键内容及其含义:

sentinel monitor mymaster redis-master 6379 1
#添加为后台运行
daemonize yes
#指定日志目录
logfile "/sentinel/log.txt"
  • sentinel monitor mymaster redis-master 6379 1:这条配置指定了 Sentinel 要监控的主节点名称为 mymaster ,主节点的容器名是 redis-master ,端口号为 6379。最后的数字 1 表示在进行主节点故障切换时,至少需要有 1 个 Sentinel 实例同意才能进行切换操作。这一参数的设置需要根据实际的集群规模和可靠性要求来确定,数值过大可能会导致故障切换延迟,数值过小则可能增加误判的风险。
  • daemonize yes:将 Sentinel 设置为后台运行模式,这样 Sentinel 进程会在后台持续监控 Redis 节点,而不会占用当前的命令行终端,方便进行其他操作。
  • logfile "/sentinel/log.txt":指定了 Sentinel 的日志文件路径为 /sentinel/log.txt ,所有的运行日志都会记录到这个文件中,便于后续查看和分析。

4、启动哨兵

配置完成后,使用命令 redis-sentinel sentinel.conf 启动 Sentinel。此时,Sentinel 会按照配置文件中的参数开始运行,实时监控 Redis 主从节点的状态。在启动过程中,如果配置文件存在语法错误或其他问题,Sentinel 会在命令行输出相应的错误信息,我们可以根据这些信息及时调整配置文件。

5、查看日志

启动 Sentinel 后,可以使用命令 tail -f log.txt 实时查看 Sentinel 的运行日志。通过日志,我们可以了解到 Sentinel 对 Redis 节点的监控情况,例如是否成功连接到主从节点、是否检测到节点故障、故障切换是否成功等信息。如果在运行过程中出现问题,日志将是我们排查故障的重要依据。例如,当发现从节点数据同步异常时,通过查看日志可以获取到同步过程中的错误信息,从而快速定位问题所在。

通过以上步骤,我们成功在 Docker 环境下搭建了 Redis 主从复制与哨兵机制。这种架构能够有效提高 Redis 服务的可用性和数据安全性,在实际的生产环境中具有重要的应用价值。在实际应用中,还可以根据业务需求对 Redis 的配置进行进一步优化,例如调整主从复制的同步策略、优化 Sentinel 的监控参数等,以满足不同场景下的性能和可靠性要求。