本地搭建redis-cluster开发环境
本文介绍如何在本地搭建redis-cluster集群,以方便本地调试和开发。集群采用最小的3主节点模式,解决了宿主机无法识别容器内部地址的问题。
docker-compose 配置
version: '3.8'services:redis1:image: redis:7.4.5container_name: redis1volumes:- ./cluster/redis1/data:/data:Zcommand: >redis-server--cluster-enabled yes--cluster-config-file nodes.conf--port 7001--cluster-announce-ip redis1--cluster-announce-port 7001--cluster-announce-bus-port 17001--protected-mode noports:- "7001:7001"- "17001:17001"networks:- redis-clusterredis2:image: redis:7.4.5container_name: redis2volumes:- ./cluster/redis2/data:/data:Zcommand: >redis-server--cluster-enabled yes--cluster-config-file nodes.conf--port 7002--cluster-announce-ip redis2--cluster-announce-port 7002--cluster-announce-bus-port 17002--protected-mode noports:- "7002:7002"- "17002:17002"networks:- redis-clusterredis3:image: redis:7.4.5container_name: redis3volumes:- ./cluster/redis3/data:/data:Zcommand: >redis-server--cluster-enabled yes--cluster-config-file nodes.conf--port 7003--cluster-announce-ip redis3--cluster-announce-port 7003--cluster-announce-bus-port 17003--protected-mode noports:- "7003:7003"- "17003:17003"networks:- redis-clusternetworks:redis-cluster:driver: bridge
初始化集群
- 进入redis1容器
redis-cli -p 7001 --cluster create redis1:7001 redis2:7002 redis3:7003 --cluster-replicas 0
- 检查集群节点
~ redis-cli -p 7001
127.0.0.1:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:4282
cluster_stats_messages_pong_sent:4552
cluster_stats_messages_sent:8834
cluster_stats_messages_ping_received:4550
cluster_stats_messages_pong_received:4282
cluster_stats_messages_meet_received:2
cluster_stats_messages_received:8834
total_cluster_links_buffer_limit_exceeded:0
配置宿主机的hosts
- /etc/hosts 追加如下内容
127.0.0.1 redis1
127.0.0.1 redis2
127.0.0.1 redis3
如果不配置,那么会如下的错误。宿主机中识别不了集群配置的redis1/redis2/redis3 地址。容器中的端口都映射到了127.0.0.1,宿主机中可以统一映射到127.0.0.1。
~ redis-cli -c -p 7001
127.0.0.1:7001> GET bike:1
-> Redirected to slot [7810] located at redis2:7002
Could not connect to Redis at redis2:7002: nodename nor servname provided, or not known