使用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
  2. 修改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

你还可以修改[这里是代码055]此存储库中存在的文件:

复制代码
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
相关推荐
菜鸟plus+21 分钟前
N+1查询
java·服务器·数据库
子夜江寒23 分钟前
MySQL 表创建与数据导入导出
数据库·mysql
菜鸟小九40 分钟前
redis基础(安装配置redis)
数据库·redis·缓存
lang201509281 小时前
Sentinel流控规则检查源码级分析
sentinel
保定公民1 小时前
达梦数据库使用cp备份集恢复报错分析与解决
数据库
少废话h3 小时前
Redis主从与集群搭建全指南
大数据·linux·redis·mysql
中冕—霍格沃兹软件开发测试3 小时前
测试用例库建设与管理方案
数据库·人工智能·科技·开源·测试用例·bug
The star"'3 小时前
mysql(4-7)
数据库·mysql·adb
jiayong233 小时前
Redis面试深度解析
数据库·redis·面试
思成不止于此4 小时前
【MySQL 零基础入门】DQL 核心语法(四):执行顺序与综合实战 + DCL 预告篇
数据库·笔记·学习·mysql