redis集群真正支持ipv6需同时配置bind、cluster-announce-ip和cluster-announce-bus-port为有效ipv6地址及端口,否则节点无法握手;bind不可仅用::1,cluster-announce-ip须填真实公网ipv6地址,docker需额外启用ipv6支持。

Redis 集群要真正支持 IPv6,光改 bind 不够,cluster-announce-ip 和 cluster-announce-bus-port 必须同步设为 IPv6 地址和端口,否则节点间无法握手、集群创建失败或状态异常。
bind 配置必须显式包含 IPv6 地址,不能只留空或依赖默认行为
Redis 默认不绑定任何地址(即监听所有接口)仅在未配置 bind 且 protected-mode no 时生效;但集群模式下,这个“默认监听所有”对 IPv6 并不可靠——尤其在 Docker 或 systemd 环境中,它往往只暴露 IPv4。你必须显式写入 IPv6 地址:
-
bind 127.0.0.1 ::1:仅允许本地 IPv4/IPv6 连接(开发调试可用) -
bind :::绑定所有 IPv6 地址(等价于 IPv4 的0.0.0.0),但需确保宿主机已启用 IPv6 转发且防火墙放行 -
bind 2001:db8::100 ::1:指定具体公网 + 回环 IPv6 地址,生产推荐
⚠️ 常见错误:bind ::1 看似支持 IPv6,但会导致集群节点无法被其他机器访问——因为 ::1 是回环地址,外部节点连不上;必须用真实网卡的 IPv6 地址或 ::。
cluster-announce-ip 必须设为节点真实的 IPv6 地址,不能是 ::1 或 127.0.0.1
Redis 集群节点通过 cluster-announce-ip 向其他节点宣告自己的“可被访问地址”。如果这里填 127.0.0.1 或 ::1,其他节点会尝试连接本机回环,握手失败,CLUSTER NODES 显示 ip 字段为 127.0.0.1:xxxx 或 ::1:xxxx,且状态为 fail。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 查本机全局 IPv6 地址:
ip -6 addr show scope global | grep inet6 - 在
redis-cluster.tmpl中写死该地址:cluster-announce-ip 2001:db8::100 - 若使用 Docker,且容器走 host 网络,直接填宿主机 IPv6;若走 bridge 网络,需确保容器有 IPv6 地址并正确分配(Docker 默认禁用 IPv6)
cluster-announce-bus-port 必须与 cluster-announce-port 匹配,且避免端口冲突
Redis 集群内部通信(Gossip 协议)使用 bus 端口,它 = cluster-announce-port + 10000(默认规则)。但如果你手动设置了 cluster-announce-bus-port,就必须保证它不被占用,且与 cluster-announce-port 保持固定偏移(官方要求差值为 10000):
- 若
cluster-announce-port 6379,则cluster-announce-bus-port应为16379 - 若
cluster-announce-port 7001,则cluster-announce-bus-port必须为17001,不能随意设成17002 - 检查端口是否被占:
ss -tuln | grep ':16379\|:17001'
⚠️ 容易被忽略:Docker 容器内若未开启 IPv6,ss 可能查不到 IPv6 监听,要用 ss -tuln6 专门看 IPv6 端口。
Docker 场景下 IPv6 支持需额外启用,否则 bind :: 也无效
Docker 默认关闭 IPv6,即使你在 redis.conf 写了 bind ::,容器启动后仍只监听 IPv4。必须提前配置 Docker daemon:
- 编辑
/etc/docker/daemon.json,加入:{ "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" } - 重启 Docker:
sudo systemctl restart docker - 验证:
docker run --rm alpine ip -6 addr应输出非空 IPv6 地址 - 启动容器时加
--sysctl net.ipv6.conf.all.disable_ipv6=0更保险
集群初始化命令(如 redis-cli --cluster create)必须用 IPv6 地址调用,例如:redis-cli --cluster create [2001:db8::100]:7001 [2001:db8::101]:7001 ...,方括号是 IPv6 地址必需的包裹符号。










