redis cluster mode

227 阅读2分钟

1. 创建docker 网络

docker network create redis --subnet 172.38.0.0/16

2.创建配置文件

for port in $(seq 1 6);\
do \
mkdir -p node-${port}/conf
touch node-${port}/conf/redis.conf
cat << EOF >> 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 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

3.启动六个redis container (这里我用了默认的网桥模式,如果访问集群的服务和集群不在用一台服务器上,则要用 --net host 并且不需要再指定ip了)

for index in $(seq 1 6);\
do \
docker run -p 637${index}:6379  -p 1667${index}:16379 --name redis-${index} \
-v /Users/xxx/workspace/redis-relate/data/redis-${index}:/data \
-v /Users/xxx/workspace/redis-relate/etc/node-${index}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${index}  \
redis redis-server /usr/local/etc/redis/redis.conf
done

4.随便进入一个container,执行创建集群操作

redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
此处注意接下来需要输入一个yes
--cluster-replicas 1,参数后面的数字表示的是主从比例

查看集群状态

root@xxxxxx:/data# redis-cli -c
127.0.0.1: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:246
cluster_stats_messages_pong_sent:250
cluster_stats_messages_sent:496
cluster_stats_messages_ping_received:245
cluster_stats_messages_pong_received:246
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:496
127.0.0.1:6379> cluster nodes
c2a59564ec6a15e0d137b21cfdd8338514f13ba3 172.38.0.15:6379@16379 slave 82374a9536ea3e68bf57f76207656fbaa9ac9a73 0 1621762529000 1 connected
0dc0452d172f8c1faa44ff82de4ce8dee45eaf54 172.38.0.12:6379@16379 master - 0 1621762529585 2 connected 5461-10922
8ba588031bfe7adf866a2b563eae4a2a87afe9af 172.38.0.13:6379@16379 master - 0 1621762529000 3 connected 10923-16383
82374a9536ea3e68bf57f76207656fbaa9ac9a73 172.38.0.11:6379@16379 myself,master - 0 1621762528000 1 connected 0-5460
6205fbccc102830070fb5999f6ef5214d8b38699 172.38.0.14:6379@16379 slave 8ba588031bfe7adf866a2b563eae4a2a87afe9af 0 1621762529791 3 connected
1e9b6161edbcd172469d7c1345deea89237679c6 172.38.0.16:6379@16379 slave 0dc0452d172f8c1faa44ff82de4ce8dee45eaf54 0 1621762529585 2 connected

测试集群

进入容器redis-2
docker exec -it redis-2 bash

root@xx:/data# redis-cli -c
127.0.0.1:6379> set k v
OK

进入容器redis-6
docker exec -it redis-6 bash

root@xx:/data# redis-cli -c
172.38.0.12:6379> get k
"v"