使用bitnamiredis-sentinel部署Redis 哨兵模式

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用bitnamiredis-sentinel部署Redis 哨兵模式

使用bitnami/redis-sentinel部署Redis 哨兵模式

为什么使用 Bitnami 镜像?

  • Bitnami 密切跟踪上游源代码更改,并使用我们的自动化系统及时发布此镜像的新版本。
  • 借助 Bitnami 镜像,可以尽快提供最新的错误修复和功能。
  • Bitnami 容器、虚拟机和云镜像使用相同的组件和配置方法 - 可以根据你的项目需求轻松切换格式。
  • 我们所有的镜像都基于minideb,这是一个基于 Debian 的极简容器镜像,它为你提供了一个小型基础容器镜像和领先 Linux 发行版的熟悉度。
  • Docker Hub 中可用的所有 Bitnami 镜像都使用Docker Content Trust (DCT)进行签名。你可以使用它DOCKER_CONTENT_TRUST=1来验证镜像的完整性。
  • Bitnami 容器镜像会定期发布,并提供最新的分发包。

获取此镜像

获取 Bitnami Redis® Sentinel Docker 镜像的推荐方法是从Docker Hub Registry中提取预构建的镜像。

docker pull bitnami/redis-sentinel:latest

要使用特定版本,你可以拉取版本化标签。你可以在 Docker Hub Registry 中查看可用版本的列表。

docker pull bitnami/redis-sentinel:[TAG]

如果你愿意,你也可以自己构建镜像。

docker build -t bitnami/redis-sentinel:latest 'https://github.com/bitnami/bitnami-docker-redis-sentinel.git#master:7.0/debian-11'

连接到其他容器

使用Docker 容器网络,你的应用程序容器可以轻松访问在容器内运行的 Redis® 服务器。

连接到同一网络的容器可以使用容器名称作为主机名相互通信。

使用命令行

在此示例中,我们将创建一个 Redis® Sentinel 实例,该实例将监视在同一 docker 网络上运行的 Redis® 实例

第 1 步:创建网络
docker network create redis-sharednet --driver bridge
# swarm 跨节点
docker network create -d overlay --attachable redis-sharednet
第 2 步:启动 Redis® 实例

使用命令的--network app-tier参数,将 Redis® 容器附加到app-tier网络。

# 从节点docker run -d --name redis-server \
    -e ALLOW_EMPTY_PASSWORD=yes \
    --network app-tier \
    bitnami/redis:4.0.14
# swarm 跨节点  
# 主节点
docker run -d --name redis-server -p 6388:6379\
    -e REDIS_REPLICATION_MODE=master \
    -e REDIS_PASSWORD=root123 \
    --network redis-sharednet \
    bitnami/redis:4.0.14
第 3 步:启动你的 Redis® Sentinel 实例

最后,我们创建一个新的容器实例来启动 Redis® 客户端并连接到上一步中创建的服务器:

docker run -it --rm \
    -e REDIS_MASTER_HOST=redis-server \
    --network app-tier \
    bitnami/redis-sentinel:4.0.14
# swarm 跨节点
# 从节点
docker run -d --name redis-slave -p 6399:6379\
    -e REDIS_REPLICATION_MODE=slave \
    -e REDIS_MASTER_HOST=redis-server \
    -e REDIS_MASTER_PASSWORD=root123 \
    -e REDIS_PASSWORD=root123 \
    --network redis-sharednet \
    bitnami/redis:4.0.14
# 哨兵节点    
docker run -d --name redis-sentinel \
    -e REDIS_MASTER_HOST=redis-server \
    -e REDIS_MASTER_PASSWORD=root123 \
    --network redis-sharednet \
    bitnami/redis-sentinel:4.0.14
docker run -d --name redis-sentinel-02 \
    -e REDIS_MASTER_HOST=redis-server \
    -e REDIS_MASTER_PASSWORD=root123 \
    --network redis-sharednet \
    bitnami/redis-sentinel:4.0.14
docker run -d --name redis-sentinel-03 \
    -e REDIS_MASTER_HOST=redis-server \
    -e REDIS_MASTER_PASSWORD=root123 \
    --network redis-sharednet \
    bitnami/redis-sentinel:4.0.14

使用 Docker 撰写

如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将明确定义一个bridge名为 的新网络app-tier。在此示例中,我们假设你希望从你自己的自定义应用程序镜像连接到 Redis® 服务器,该镜像在以下代码段中由服务名称标识myapp

version: '2'
networks:
  app-tier:
    driver: bridge
services:
  redis:
    image: 'bitnami/redis:latest'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    networks:
      - app-tier
  redis-sentinel:
    image: 'bitnami/redis-sentinel:latest'
    environment:
      - REDIS_MASTER_HOST=redis
    ports:
      - '26379:26379'
    networks:
      - app-tier

使用以下命令启动容器:

docker-compose up -d
使用主从设置

在 Master-Slave 设置中使用 Sentinel 时,如果要设置 Master 和 Slave 节点的密码,请考虑为它们设置相同REDIS_PASSWORD的密码REDIS_MASTER_PASSWORD#23)。

version: '2'
networks:
  app-tier:
    driver: bridge
services:
  redis:
    image: 'bitnami/redis:latest'
    environment:
      - REDIS_REPLICATION_MODE=master
      - REDIS_PASSWORD=str0ng_passw0rd
    networks:
      - app-tier
    ports:
      - '6379'
  redis-slave:
    image: 'bitnami/redis:latest'
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis
      - REDIS_MASTER_PASSWORD=str0ng_passw0rd
      - REDIS_PASSWORD=str0ng_passw0rd
    ports:
      - '6379'
    depends_on:
      - redis
    networks:
      - app-tier
  redis-sentinel:
    image: 'bitnami/redis-sentinel:latest'
    environment:
      - REDIS_MASTER_PASSWORD=str0ng_passw0rd
    depends_on:
      - redis
      - redis-slave
    ports:
      - '26379-26381:26379'
    networks:
      - app-tier

使用以下命令启动容器:

docker-compose up --scale redis-sentinel=3 -d

配置

环境变量

Redis® Sentinel 实例可以通过在第一次运行时指定环境变量来定制。提供以下环境值以自定义 Redis® Sentinel:

  • REDIS_MASTER_HOST:要监控的 Redis® 主控的主机。默认值:redis
  • REDIS_MASTER_PORT_NUMBER:要监控的 Redis® master 的端口。默认值:6379
  • REDIS_MASTER_SET:要监控的 Redis® 实例集的名称。默认值:mymaster
  • REDIS_MASTER_PASSWORD:与主服务器进行身份验证的密码。没有默认值。作为替代方案,你可以使用密码挂载文件并设置REDIS_MASTER_PASSWORD_FILE变量。
  • REDIS_MASTER_USER: 为 master 启用 ACL 时进行身份验证的用户名。没有默认值。这仅适用于 Redis® 6 或更高版本。如果未指定,Redis® Sentinel 将尝试仅使用密码进行身份验证(使用sentinel auth-pass <master-name> <password>)。
  • REDIS_SENTINEL_PORT_NUMBER:Redis® 哨兵端口。默认值:26379
  • REDIS_SENTINEL_QUORUM:需要就 master 不可访问这一事实达成一致的 Sentinel 数量。默认值:2
  • REDIS_SENTINEL_PASSWORD:使用此哨兵进行身份验证和向其他哨兵进行身份验证的密码。没有默认值。所有哨兵都需要相同。作为替代方案,你可以使用密码挂载文件并设置REDIS_SENTINEL_PASSWORD_FILE变量。
  • REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS: 宣布 master 关闭之前的毫秒数。默认值:60000
  • REDIS_SENTINEL_FAILOVER_TIMEOUT:以毫秒为单位指定故障转移超时。默认值:180000
  • REDIS_SENTINEL_RESOLVE_HOSTNAMES:启用哨兵主机名支持。这仅适用于 Redis® 6.2 或更高版本。默认值:
  • REDIS_SENTINEL_TLS_ENABLED:是否为流量启用 TLS。默认值:
  • REDIS_SENTINEL_TLS_PORT_NUMBER:用于 TLS 安全流量的端口。默认值:26379
  • REDIS_SENTINEL_TLS_CERT_FILE:包含 TLS 流量的证书文件的文件。没有默认值。
  • REDIS_SENTINEL_TLS_KEY_FILE:包含证书密钥的文件。没有默认值。
  • REDIS_SENTINEL_TLS_CA_FILE: 包含证书 CA 的文件。没有默认值。
  • REDIS_SENTINEL_TLS_DH_PARAMS_FILE: 包含 DH 参数的文件(为了支持基于 DH 的密码)。没有默认值。
  • REDIS_SENTINEL_TLS_AUTH_CLIENTS:是否要求客户端进行身份验证。默认值:
  • REDIS_SENTINEL_ANNOUNCE_IP:在 HELLO 消息中使用指定的 IP 地址来八卦它的存在。默认值:自动检测到的本地地址
  • REDIS_SENTINEL_ANNOUNCE_PORT: 使用 HELLO 消息中的指定端口来八卦它的存在。默认值:在 中指定的端口REDIS_SENTINEL_PORT_NUMBER

保护 Redis® Sentinel 流量

从版本 6 开始,Redis® 添加了对 SSL/TLS 连接的支持。如果你希望启用此可选功能,你可以使用上述REDIS_SENTINEL_TLS_*环境变量来配置应用程序。

启用 TLS 时,默认情况下会禁用常规标准流量。然而,这个新功能并不是相互排斥的,这意味着可以同时监听 TLS 和非 TLS 连接。要启用非 TLS 流量,请设置REDIS_SENTINEL_PORT_NUMBER为不同于0.

  1. 使用docker run
docker run --name redis-sentinel \
    -v /path/to/certs:/opt/bitnami/redis/certs \
    -v /path/to/redis-sentinel/persistence:/bitnami \
    -e REDIS_MASTER_HOST=redis \
    -e REDIS_SENTINEL_TLS_ENABLED=yes \
    -e REDIS_SENTINEL_TLS_CERT_FILE=/opt/bitnami/redis/certs/redis.crt \
    -e REDIS_SENTINEL_TLS_KEY_FILE=/opt/bitnami/redis/certs/redis.key \
    -e REDIS_SENTINEL_TLS_CA_FILE=/opt/bitnami/redis/certs/redisCA.crt \
    bitnami/redis-cluster:latest
    bitnami/redis-sentinel:latest
  1. 修改docker-compose.yml此存储库中存在的文件:
redis-sentinel:
  ...
    environment:
      ...
      - REDIS_SENTINEL_TLS_ENABLED=yes
      - REDIS_SENTINEL_TLS_CERT_FILE=/opt/bitnami/redis/certs/redis.crt
      - REDIS_SENTINEL_TLS_KEY_FILE=/opt/bitnami/redis/certs/redis.key
      - REDIS_SENTINEL_TLS_CA_FILE=/opt/bitnami/redis/certs/redisCA.crt
    ...
    volumes:
      - /path/to/certs:/opt/bitnami/redis/certs
    ...
  ...

或者,你也可以在自定义配置文件中提供此配置。

配置文件

该镜像在/bitnami/redis-sentinel/conf/. 你可以/bitnami/path/to/redis-persistence/redis-sentinel/conf/. conf/如果目录为空,则默认配置将填充到目录中。

第 1 步:运行 Redis® Sentinel 镜像

运行 Redis® Sentinel 镜像,从你的主机挂载一个目录。

docker run --name redis-sentinel \
    -e REDIS_MASTER_HOST=redis \
    -v /path/to/redis-sentinel/persistence:/bitnami \
    bitnami/redis-sentinel:latest

你还可以修改docker-compose.yml此存储库中存在的文件:

services:
  redis-sentinel:
  ...
    volumes:
      - /path/to/redis-persistence:/bitnami
  ...
第 2 步:编辑配置

使用你喜欢的编辑器编辑主机上的配置。

vi /path/to/redis-persistence/redis-sentinel/conf/redis.conf
第 3 步:重新启动 Redis®

更改配置后,重新启动 Redis® 容器以使更改生效。

docker restart redis

或使用 Docker 撰写:

docker-compose restart redis

有关配置选项的完整列表,请参阅Redis® 配置手册。

日志记录

Bitnami Redis® Sentinel Docker Image 将容器日志发送到stdout. 查看日志:

docker logs redis

或使用 Docker 撰写:

docker-compose logs redis

如果你希望以不同的方式使用容器日志,你可以使用该选项配置容器日志记录驱动程序。--log-driver在默认配置中,docker 使用json-file驱动程序。

维护

升级此镜像

Bitnami 在上游制作后不久就提供最新版本的 Redis® Sentinel,包括安全补丁。我们建议你按照以下步骤升级你的容器。

第 1 步:获取更新后的镜像
docker pull bitnami/redis-sentinel:latest

或者,如果你使用的是 Docker Compose,请将 image 属性的值更新为 bitnami/redis-sentinel:latest.

第 2 步:停止并备份当前正在运行的容器

使用命令停止当前运行的容器

docker stop redis

或使用 Docker 撰写:

docker-compose stop redis

接下来,使用以下命令拍摄持久卷的快照/path/to/redis-persistence

rsync -a /path/to/redis-persistence /path/to/redis-persistence.bkp.$(date +%Y%m%d-%H.%M.%S)
第三步:移除当前运行的容器
docker rm -v redis

或使用 Docker 撰写:

docker-compose rm -v redis
第四步:运行新镜像

从新镜像重新创建你的容器。

docker run --name redis bitnami/redis-sentinel:latest

或使用 Docker 撰写:

docker-compose up redis
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
Kubernetes NoSQL Redis
k8s快速部署Redis单机
k8s快速部署Redis单机
|
11天前
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
|
3月前
|
监控 NoSQL Redis
Redis Sentinel:秒杀系统背后的可靠性保障神器!
本文详细介绍了如何在个人项目中利用 Redis 哨兵模式保障系统的可靠性与高可用性。哨兵模式通过监控主从服务器状态、自动故障转移和通知客户端等功能,确保在主服务器宕机时系统仍能正常运行。适用于读请求多于写请求的场景,如秒杀系统,能有效缓解数据库压力。同时也探讨了哨兵模式在高并发场景下的优化方法及潜在缺陷,帮助开发者更好地应用该模式。
70 7
Redis Sentinel:秒杀系统背后的可靠性保障神器!
|
2月前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
116 4
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
35 3
|
2月前
|
NoSQL Linux Shell
Redis 的安装与部署(图文)
Redis 的安装与部署(图文)
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
4月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
3月前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
|
4月前
|
Kubernetes NoSQL Redis
【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server
【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server
【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server