Redis®是一个开源、可扩展的分布式内存缓存应用,用于存储和提供字符串、哈希、列表、集合及有序集合形式的数据。
Redis® Cluster 概述
免责声明:Redis是Redis Ltd.的注册商标。其所有权利归Redis Ltd.所有。Bitnami的任何使用仅为参考目的,不表示Redis Ltd.的任何赞助、认可或关联。
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/redis-cluster
希望在生产环境中使用Redis® Cluster?请尝试VMware Tanzu Application Catalog,即Bitnami目录的商业版。
自2025年8月28日起,Bitnami将升级其公共目录,通过新的Bitnami Secure Images计划提供精选的强化、安全聚焦镜像。作为过渡的一部分:
这些变更旨在通过推广软件供应链完整性和最新部署的最佳实践,提升所有Bitnami用户的安全态势。更多详情,请访问Bitnami Secure Images公告。
此Chart使用Helm包管理器在Kubernetes集群上引导Redis®部署。
您可以选择以下两种Redis® Helm Chart部署Redis®集群: Redis® Helm Chart使用Redis® Sentinel部署主从集群,而Redis® Cluster Helm Chart部署支持分片的Redis®集群。两者的主要特性如下:
| Redis® | Redis® Cluster |
|---|---|
| 支持多数据库 | 仅支持一个数据库,适用于大型数据集 |
| 单写入点(单个主节点) | 多写入点(多个主节点) |
| !Redis®拓扑 | !Redis® Cluster拓扑 |
使用发布名称my-release安装Chart:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/redis-cluster
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm Chart仓库和存储库的引用。例如,Bitnami的情况下,使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
该命令使用默认配置在Kubernetes集群上部署Redis®。参数部分列出了安装过程中可配置的参数。
注意:如果等待钩子完成时出现超时错误,请增加默认超时时间(300秒),例如:
consolehelm install --timeout 600s myrelease oci://REGISTRY_NAME/REPOSITORY_NAME/redis-cluster
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm Chart仓库和存储库的引用。例如,Bitnami的情况下,使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。 提示:使用helm list查看所有发布。
Bitnami Chart允许为Chart部署中的所有容器设置资源请求和限制,这些配置位于resources值中(参见参数表)。设置请求对于生产工作负载至关重要,应根据具体用例调整。
为简化此过程,Chart包含resourcesPreset值,可根据不同预设自动设置resources部分。有关这些预设,请查看bitnami/common Chart。但在生产工作负载中,不建议使用resourcesPreset,因为它可能无法完全适应您的具体需求。有关容器资源管理的更多信息,请参见Kubernetes***文档。
通过将metrics.enabled设置为true,可将Chart与Prometheus集成。这将在所有Pod中部署带有redis_exporter的Sidecar容器和metrics服务,可在metrics.service部分下配置。此metrics服务将包含必要的注解,以便被Prometheus自动抓取。
集成需要Prometheus或Prometheus Operator正常安装。安装Bitnami Prometheus Helm Chart或Bitnami Kube Prometheus Helm Chart,可在集群中轻松部署Prometheus。
通过设置metrics.serviceMonitor.enabled=true,Chart可部署ServiceMonitor对象以与Prometheus Operator集成。确保集群中已安装Prometheus Operator的CustomResourceDefinitions,否则将失败并显示以下错误:
textno matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
安装Bitnami Kube Prometheus Helm Chart以获取必要的CRD和Prometheus Operator。
强烈建议在生产环境中使用不可变标签。这可确保即使相同标签更新为不同镜像,部署也不会自动更改。
如果主容器有新版本、重大变更或严重漏洞,Bitnami将发布新Chart更新其容器。
要修改此Chart使用的应用版本,可通过image.tag参数指定不同的镜像版本,和/或通过image.repository参数指定不同的仓库。
集群成功部署至少需要3个主节点。节点总数计算公式为:nodes = 主节点数 + 主节点数 * 副本数。因此,默认cluster.nodes=6和cluster.replicas=1表示将部署3个主节点和3个副本节点。
默认情况下,Redis® Cluster无法从Kubernetes集群外部访问。要从外部访问,需在部署时设置cluster.externalAccess.enabled=true。首次安装时将创建6个Load***服务(每个Redis®节点一个),获取每个服务的外部IP后,需通过cluster.externalAccess.service.load***IP数组传递这些IP进行升级。
副本是主节点的只读副本。默认情况下(不使用外部访问模式)仅公开一个服务。无论读写操作,客户端均连接到公开的服务。当写操作到达副本时,副本会将客户端重定向到正确的主节点。例如,使用redis-cli时需提供-c标志以自动跟随重定向。
使用外部访问模式时,可连接到任何Pod,从节点将以相同方式重定向客户端,但所有IP均为公共IP。
若主节点崩溃,其从节点之一将升级为主节点。崩溃主节点存储的槽位在从节点完成升级前不可用。若主节点及其所有从节点均崩溃,集群将不可用,直至其中一个节点恢复。要避免 downtime,可通过cluster.nodes和cluster.replicas配置Redis®节点数量。例如:
cluster.nodes=9(3个主节点,每个主节点2个副本)cluster.replicas=2注意:默认
cluster.init=true以在首次安装时初始化Redis® Cluster。若仅测试部署或升级节点而避免创建集群,可设置cluster.init=false。
可通过post-upgrade钩子执行作业添加新节点。需提供以下参数:
password参数提供安装时使用的密码。若未提供密码,可按照NOTES.txt中的说明获取生成的密码。cluster.nodes为所需节点数。cluster.update.currentNumberOfNodes为当前节点数。cluster.update.addNodes=true。以下是添加一个节点的示例:
consolehelm upgrade --timeout 600s <release> --set "password=${REDIS_PASSWORD},cluster.nodes=7,cluster.update.addNodes=true,cluster.update.currentNumberOfNodes=6" oci://REGISTRY_NAME/REPOSITORY_NAME/redis-cluster
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm Chart仓库和存储库的引用。例如,Bitnami的情况下,使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
其中REDIS_PASSWORD是Helm Chart首次安装后显示的命令获取的密码。集群将在重启Pod时保持可用,前提是未丢失法定人数。
使用外部访问时,添加新节点需执行两次升级。首次升级添加新Redis®节点并获取Load***IP服务:
consolehelm upgrade <release> --set "password=${REDIS_PASSWORD},cluster.externalAccess.enabled=true,cluster.externalAccess.service.type=Load***,cluster.externalAccess.service.load***IP[0]=<load***ip-0>,cluster.externalAccess.service.load***IP[1]=<loadbalanacerip-1>,cluster.externalAccess.service.load***IP[2]=<load***ip-2>,cluster.externalAccess.service.load***IP[3]=<load***ip-3>,cluster.externalAccess.service.load***IP[4]=<load***ip-4>,cluster.externalAccess.service.load***IP[5]=<load***ip-5>,cluster.externalAccess.service.load***IP[6]=,cluster.nodes=7,cluster.init=false" oci://REGISTRY_NAME/REPOSITORY_NAME/redis-cluster
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm Chart仓库和存储库的引用。例如,Bitnami的情况下,使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。 重要:为避免索引错误,需为新节点的load***IP参数留空。
设置cluster.nodes=7并为新节点留空LoadIP,集群将提供正确的IP。此时,新Redis® Pod将处于crashLoopBackOff状态,直至提供新服务的LoadIP。
等待集群提供新服务的Load***IP后,执行第二次升级:
consolehelm upgrade <release> --set "password=${REDIS_PASSWORD},cluster.externalAccess.enabled=true,cluster.externalAccess.service.type=Load***,cluster.externalAccess.service.load***IP[0]=<load***ip-0>,cluster.externalAccess.service.load***IP[1]=<load***ip-1>,cluster.externalAccess.service.load***IP[2]=<load***ip-2>,cluster.externalAccess.service.load***IP[3]=<load***ip-3>,cluster.externalAccess.service.load***IP[4]=<load***ip-4>,cluster.externalAccess.service.load***IP[5]=<load***ip-5>,cluster.externalAccess.service.load***IP[6]=<load***ip-6>,cluster.nodes=7,cluster.init=false,cluster.update.addNodes=true,cluster.update.newExternalIPs[0]=<load-***ip-6>" oci://REGISTRY_NAME/REPOSITORY_NAME/redis-cluster
注意:需将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm Chart仓库和存储库的引用。例如,Bitnami的情况下,使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
需在cluster.update.newExternalIPs提供新IP,设置cluster.update.addNodes=true以启用添加节点的作业,并设置新服务的Load***IP(不再留空)。
注意:为避免再次创建初始化Redis® Cluster的作业,需提供
cluster.init=false。
缩容Redis® Cluster步骤如下:
首先执行常规升级,将cluster.nodes设置为所需节点数。节点数不得少于6,且当前节点数与所需节点数之差应小于或等于cluster.replicas,以避免同时移除主节点及其从节点。还需通过password提供密码。例如,从多于6个节点缩容至6个节点:
consolehelm upgrade --timeout 600s <release> --set "password=${REDIS_PASSWORD},cluster.nodes=6" .
只要未丢失法定人数,集群将在更新期间继续运行。
注意:为避免再次创建初始化Redis® Cluster的作业,需提供
cluster.init=false。
所有节点就绪后,使用CLUSTER NODES命令获取集群节点列表。记录显示fail的节点ID,在每个集群节点上执行redis-cli -a $REDIS_PASSWORD CLUSTER FORGET NODE_ID。
要使用密码文件,需创建包含密码的Secret(密码文件必须命名为redis-password),然后部署时指定:
textusePassword=true usePasswordFile=true existingSecret=redis-password-secret metrics.enabled=true
通过指定tls.参数启用TLS支持,需配置证书Secret、证书文件名等。示例:
consolekubectl create secret generic certificates-tls-secret --from-file=./cert.pem --from-file=./cert.key --from-file=./ca.pem
部署参数:
consoletls.enabled="true" tls.existingSecret="certificates-tls-secret" tls.certFilename="cert.pem" tls.certKeyFilename="cert.key" tls.certCAFilename="ca.pem"
通过sidecars和initContainers参数添加额外容器,遵循Kubernetes容器规范。
包括添加额外环境变量、主机内核设置、网络策略、Pod亲和性配置等,详情参见完整文档。
默认挂载Persistent Volume(动态供应),禁用时使用emptyDir(仅测试环境),因缺少nodes.conf文件可能导致节点独立运行。
注意:此Chart的README因超出DockerHub限制被截断。完整README请参见[***]
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429