- 规划集群节点
确保你的服务器有固定 IP,比如:
172.16.17.100
172.16.17.101
172.16.17.102
每台服务器运行 2 个 Redis 节点,总共 6 个节点,满足 Redis Cluster 最小节点数要求。
2. 在每台服务器上运行 Redis
在每台服务器上执行以下命令(调整 CLUSTER_ANNOUNCE_IP 为本机 IP):
```bash
docker run -d --name redis-7000 -e CLUSTER_ANNOUNCE_IP=172.16.17.100 \
-p 7000:7000 -p 17000:17000 \
registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis-cluster:4.0
docker run -d --name redis-7001 -e CLUSTER_ANNOUNCE_IP=172.16.17.100 \
-p 7001:7001 -p 17001:17001 \
registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis-cluster:4.0
在 172.16.17.101 执行:
```bash
docker run -d --name redis-7002 -e CLUSTER_ANNOUNCE_IP=172.16.17.101 \
-p 7002:7002 -p 17002:17002 \
registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis-cluster:4.0
docker run -d --name redis-7003 -e CLUSTER_ANNOUNCE_IP=172.16.17.101 \
-p 7003:7003 -p 17003:17003 \
registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis-cluster:4.0
在 172.16.17.102 执行:
docker run -d --name redis-7004 -e CLUSTER_ANNOUNCE_IP=172.16.17.102 \
-p 7004:7004 -p 17004:17004 \
registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis-cluster:4.0
docker run -d --name redis-7005 -e CLUSTER_ANNOUNCE_IP=172.16.17.102 \
-p 7005:7005 -p 17005:17005 \
registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis-cluster:4.0
- 初始化 Redis Cluster
在任意一台服务器上执行(推荐在 172.16.17.100):
docker exec -it redis-7000 redis-cli --cluster create \
172.16.17.100:7000 172.16.17.100:7001 \
172.16.17.101:7002 172.16.17.101:7003 \
172.16.17.102:7004 172.16.17.102:7005 \
--cluster-replicas 1
说明:
–cluster-replicas 1:每个主节点分配 1 个从节点。
如果提示 (type ‘yes’ to accept),请输入 yes 确认集群初始化。
- 验证 Redis 集群
执行以下命令,检查集群状态:
docker exec -it redis-7000 redis-cli -c -p 7000
然后输入:
cluster nodes
确保每个节点的状态为 master 或 slave,并且 connected。
- Spring Boot 配置
在 application.yml 里配置:
spring:
redis:
cluster:
nodes:
- 172.16.17.100:7000
- 172.16.17.100:7001
- 172.16.17.101:7002
- 172.16.17.101:7003
- 172.16.17.102:7004
- 172.16.17.102:7005
- 允许防火墙访问
如果你使用 iptables 或 firewalld,确保开放 7000-7005 和 17000-17005 端口:
firewall-cmd --zone=public --add-port=7000-7005/tcp --permanent
firewall-cmd --zone=public --add-port=17000-17005/tcp --permanent
firewall-cmd --reload