说明
- 一个Docker搭建Redis集群的简单案例
- 架构:Docker启动6台Redis,3主3从
操作步骤
-
Docker创建一个自定义网路net11,网段:192.168.11.*
docker network create --gateway 192.168.11.1 --subnet 192.168.11.0/24 net11
-
shell脚本快速创建6组Redis配置(脚本快不容易出错,也可手动一个一个创建)
for port in $(seq 1 6); \ do \ mkdir -p /data/redis/node-${port}/conf touch /data/redis/node-${port}/conf/redis.conf cat << EOF >/data/redis/node-${port}/conf/redis.conf port 6379 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 192.168.11.10${port} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF done
- port:节点端口,即对外提供通信的端口
- cluster-enabled:是否启用集群
- cluster-config-file:集群配置文件
- cluster-node-timeout:连接超时时间
- cluster-announce-ip:集群各节点IP地址
- cluster-announce-port:集群节点映射端口
- cluster-announce-bus-port:集群总线端口
- appendonly:持久化模式
-
shell脚本快速启动6组Redis
for port in $(seq 1 6); \ do \ docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \ -v /data/redis/node-${port}/data:/data \ -v /data/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d --net net11 --ip 192.168.11.10${port} redis:6.2.6-alpine redis-server /etc/redis/redis.conf done
- Redis容器中默认data目录:/data,将其挂载到宿主机实现数据持久化
- –net net11:指定容器要连接的网这里net11为上一步创建的自定义网络名
-
查看容器,保证6个Redis全部启动
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cc26788d675 redis:6.2.6-alpine "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp redis-6 8178f15a1366 redis:6.2.6-alpine "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp redis-5 0bdd5a08647f redis:6.2.6-alpine "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp redis-4 aa262acbb39c redis:6.2.6-alpine "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp redis-3 a1a890abd61f redis:6.2.6-alpine "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp redis-2 8075ca306a2b redis:6.2.6-alpine "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp redis-1
-
使用任意一个Redis容器创建集群(此处以容器redis-1为例)
docker exec -it redis-1 /usr/local/bin/redis-cli --cluster create --cluster-replicas 1 \ 192.168.11.101:6379 192.168.11.102:6379 192.168.11.103:6379 \ 192.168.11.104:6379 192.168.11.105:6379 192.168.11.106:6379
-
使用任意一个Redis容器连接集群中任意Redis节点(此处以容器redis-1为例)
docker exec -it redis-1 /usr/local/bin/redis-cli -c -h redis-1 # 或 docker exec -it redis-1 /usr/local/bin/redis-cli -c -h 192.168.11.101
- -c:表示连接集群
-
查看集群信息
192.168.11.101:6379> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:5695 cluster_stats_messages_pong_sent:5628 cluster_stats_messages_sent:11323 cluster_stats_messages_ping_received:5623 cluster_stats_messages_pong_received:5695 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:11323
-
查看集群节点
192.168.11.101:6379> cluster nodes 2c03a9347c9bb051056407ca642d423a6a4a91f8 192.168.11.102:6379@16379 master - 0 1644906593000 2 connected 5461-10922 d66bde935aa073c379925d1e580b6ba539627549 192.168.11.105:6379@16379 slave 1eac1bb1b378c257f8f721071f2c507da2062965 0 1644906594000 1 connected 1eac1bb1b378c257f8f721071f2c507da2062965 192.168.11.101:6379@16379 myself,master - 0 1644906593000 1 connected 0-5460 69fdce9603d6930ee05c5558388530c5fa02ecc4 192.168.11.106:6379@16379 slave 2c03a9347c9bb051056407ca642d423a6a4a91f8 0 1644906594463 2 connected 43ea2a917d6bb388256f340ba8f9dcb7675c0be6 192.168.11.104:6379@16379 slave 6a534a9cd31239bb5f284cac742ca96d7737d0ee 0 1644906594970 3 connected 6a534a9cd31239bb5f284cac742ca96d7737d0ee 192.168.11.103:6379@16379 master - 0 1644906593553 3 connected 10923-16383