当前位置:网站首页>使用bitnamiredis-sentinel部署Redis 哨兵模式
使用bitnamiredis-sentinel部署Redis 哨兵模式
2022-06-27 12:37:00 【琦彦】
使用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.
使用
docker rundocker 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修改
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
边栏推荐
- Cloud native (30) | kubernetes' app store Helm
- PyQt,PySide-槽函数被执行了两次
- Ali an interview question: use two threads to output letters and numbers alternately
- 阿里一个面试题:使用两个线程,交替输出字母和数字
- 浏览器输入url地址,到页面渲染发生了什么
- How to close windows defender Security Center
- socket阻塞和非阻塞模式
- 全志A13折腾备忘
- Dm8: Dameng database - lock timeout
- Word text box page feed
猜你喜欢

zabbix支持钉钉报警

二叉树的三种遍历方式

Configuration management center of microservices

行业洞察 | 新零售业态下,品牌电商应如何重塑增长?

如何下载带有超链接的图片

Snipaste, the world's strongest screenshot software

ACL 2022 | TAMT proposed by Chinese Academy of Sciences: TAMT: search for a portable Bert subnet through downstream task independent mask training

Private dry goods sharing: how to implement platform in Enterprise Architecture

OpenFeign服务接口调用

PyCharm汉化
随机推荐
Uni app develops wechat applet to dynamically render pages and dynamically change the order of page component modules
与生活握手言和
How to open an account for CSI 500 stock index futures, what are the regular domestic stock index futures platforms, and where is the safest place to open an account?
Pyqt, pyside slot functions are executed twice
ACL 2022 | 中科院提出TAMT:TAMT:通过下游任务无关掩码训练搜索可迁移的BERT子网络
Esp32s3 iperf routine test esp32s3 throughput test
[fans' welfare] today, I'd like to introduce a method to collect money for nothing - convertible bonds. I personally verified that each person can earn 1500 yuan a year
How to participate in openharmony code contribution
消息队列的使用
诗歌一首看看
OpenFeign服务接口调用
nifi从入门到实战(保姆级教程)——身份认证
hibernate操作oracle数据库 主键自增
Win10彻底永久关闭自动更新的步骤
数据库的复习总结
Three traversal methods of binary tree
【TcaplusDB知识库】TcaplusDB-tcapsvrmgr工具介绍(三)
Dm8: Dameng database - lock timeout
执行 npm 指令失败,提示ssh: ... Permission denied
LeetCode_快速幂_递归_中等_50.Pow(x, n)