• 使用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
    
    • 1

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

     docker pull bitnami/redis-sentinel:[TAG]
    
    • 1

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

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

    连接到其他容器

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

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

    使用命令行

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

    第 1 步:创建网络

    docker network create redis-sharednet --driver bridge
    # swarm 跨节点
    docker network create -d overlay --attachable redis-sharednet
    
    • 1
    • 2
    • 3

    第 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    第 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    使用 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    使用以下命令启动容器:

    docker-compose up -d
    
    • 1

    使用主从设置

    在 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    使用以下命令启动容器:

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

    配置

    环境变量

    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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    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
          ...
        ...
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

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

    配置文件

    该镜像在/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
    
    • 1
    • 2
    • 3
    • 4

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

    services:
      redis-sentinel:
      ...
        volumes:
          - /path/to/redis-persistence:/bitnami
      ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第 2 步:编辑配置

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

    vi /path/to/redis-persistence/redis-sentinel/conf/redis.conf
    
    • 1

    第 3 步:重新启动 Redis®

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

    docker restart redis
    
    • 1

    或使用 Docker 撰写:

    docker-compose restart redis
    
    • 1

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

    日志记录

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

    docker logs redis
    
    • 1

    或使用 Docker 撰写:

    docker-compose logs redis
    
    • 1

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

    维护

    升级此镜像

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

    第 1 步:获取更新后的镜像

    docker pull bitnami/redis-sentinel:latest
    
    • 1

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

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

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

    docker stop redis
    
    • 1

    或使用 Docker 撰写:

    docker-compose stop redis
    
    • 1

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

    rsync -a /path/to/redis-persistence /path/to/redis-persistence.bkp.$(date +%Y%m%d-%H.%M.%S)
    
    • 1

    第三步:移除当前运行的容器

    docker rm -v redis
    
    • 1

    或使用 Docker 撰写:

    docker-compose rm -v redis
    
    • 1

    第四步:运行新镜像

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

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

    或使用 Docker 撰写:

    docker-compose up redis
    
    • 1
  • 相关阅读:
    java计算机毕业设计小区物业管理系统MyBatis+系统+LW文档+源码+调试部署
    Trino418版本动态加载catalog不需要重启集群修改思路及实现
    如何进行机器学习
    Spring框架(九):Spring注解开发Annotation
    使用docker创建redis实例、主从复制、哨兵集群
    springboot大学生体质测试管理系统springboot009
    MQ - 17 集群篇_(性能)分布式存储系统的编程技巧
    YZ系列工具之YZ12:VBA_4种方法设计下拉列表
    力扣每日一题67:二进制求和
    Java前后端分离的在线考试系统源码
  • 原文地址:https://blog.csdn.net/fly910905/article/details/125474213