# 注意集群至少需要3个主节点,3主3从 所以一共要创建6个实例
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/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.1.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
docker启动redis
**redis-1**
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.1.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
**redis-2**
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.1.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
**redis-3**
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.1.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
**redis-4**
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.1.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
**redis-5**
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.1.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
**redis-6**
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.1.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# 进入一个容器
docker exec -it redis-1 /bin/sh
# 创建集群配置
redis-cli --cluster create 192.168.1.11:6379 192.168.1.12:6379 192.168.1.13:6379 192.168.1.14:6379 192.168.1.15:6379 192.168.1.16:6379 --clust
er-replicas 1
# 配置过程
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.15:6379 to 192.168.1.11:6379
Adding replica 192.168.1.16:6379 to 192.168.1.12:6379
Adding replica 192.168.1.14:6379 to 192.168.1.13:6379
M: 4b4b59f01b331bca0b8aeb08e746a38e326c6f5f 192.168.1.11:6379
slots:[0-5460] (5461 slots) master
M: 2eaa043a534be29e1ce746ab05e9688cf371f96e 192.168.1.12:6379
slots:[5461-10922] (5462 slots) master
M: 4b1b44a64b408f5ccabfc6415838b66ca9a666ee 192.168.1.13:6379
slots:[10923-16383] (5461 slots) master
S: c092170019525175c41448c9b787b59b8c65be05 192.168.1.14:6379
replicates 4b1b44a64b408f5ccabfc6415838b66ca9a666ee
S: d8190ca3a2bc0fc9fdf3f4825aa9e13ff78b8765 192.168.1.15:6379
replicates 4b4b59f01b331bca0b8aeb08e746a38e326c6f5f
S: 5b9e6299d636e0fea801553779eae0419f410dba 192.168.1.16:6379
replicates 2eaa043a534be29e1ce746ab05e9688cf371f96e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.....
>>> Performing Cluster Check (using node 192.168.1.11:6379)
M: 4b4b59f01b331bca0b8aeb08e746a38e326c6f5f 192.168.1.11:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 2eaa043a534be29e1ce746ab05e9688cf371f96e 192.168.1.12:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: c092170019525175c41448c9b787b59b8c65be05 192.168.1.14:6379
slots: (0 slots) slave
replicates 4b1b44a64b408f5ccabfc6415838b66ca9a666ee
M: 4b1b44a64b408f5ccabfc6415838b66ca9a666ee 192.168.1.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 5b9e6299d636e0fea801553779eae0419f410dba 192.168.1.16:6379
slots: (0 slots) slave
replicates 2eaa043a534be29e1ce746ab05e9688cf371f96e
S: d8190ca3a2bc0fc9fdf3f4825aa9e13ff78b8765 192.168.1.15:6379
slots: (0 slots) slave
replicates 4b4b59f01b331bca0b8aeb08e746a38e326c6f5f
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# 开始使用 如果不加-c则使用的是单机,加了-c才是使用集群
redis-cli -c
# 查看集群信息
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:437
cluster_stats_messages_pong_sent:452
cluster_stats_messages_sent:889
cluster_stats_messages_ping_received:447
cluster_stats_messages_pong_received:437
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:889
# 查看集群节点
cluster nodes
2eaa043a534be29e1ce746ab05e9688cf371f96e 192.168.1.12:6379@16379 master - 0 1657188883626 2 connected 5461-10922
c092170019525175c41448c9b787b59b8c65be05 192.168.1.14:6379@16379 slave 4b1b44a64b408f5ccabfc6415838b66ca9a666ee 0 1657188882524 4 connected
4b4b59f01b331bca0b8aeb08e746a38e326c6f5f 192.168.1.11:6379@16379 myself,master - 0 1657188882000 1 connected 0-5460
4b1b44a64b408f5ccabfc6415838b66ca9a666ee 192.168.1.13:6379@16379 master - 0 1657188882023 3 connected 10923-16383
5b9e6299d636e0fea801553779eae0419f410dba 192.168.1.16:6379@16379 slave 2eaa043a534be29e1ce746ab05e9688cf371f96e 0 1657188883000 6 connected
d8190ca3a2bc0fc9fdf3f4825aa9e13ff78b8765 192.168.1.15:6379@16379 slave 4b4b59f01b331bca0b8aeb08e746a38e326c6f5f 0 1657188882000 5 connected
# 测试
127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 192.168.1.13:6379
OK
# 停止13对应的容器,即redis-3
docker stop redis-3
# 然后查询键为“a”的数据
127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 192.168.1.14:6379
"b"
发现跳转到了13的从机14上(这时候14已经变成了master)
# 查询节点
192.168.1.14:6379> cluster nodes
5b9e6299d636e0fea801553779eae0419f410dba 192.168.1.16:6379@16379 slave 2eaa043a534be29e1ce746ab05e9688cf371f96e 0 1657189277064 6 connected
d8190ca3a2bc0fc9fdf3f4825aa9e13ff78b8765 192.168.1.15:6379@16379 slave 4b4b59f01b331bca0b8aeb08e746a38e326c6f5f 0 1657189278068 5 connected
4b1b44a64b408f5ccabfc6415838b66ca9a666ee 192.168.1.13:6379@16379 master,fail - 1657189043577 1657189043000 3 connected
4b4b59f01b331bca0b8aeb08e746a38e326c6f5f 192.168.1.11:6379@16379 master - 0 1657189276563 1 connected 0-5460
c092170019525175c41448c9b787b59b8c65be05 192.168.1.14:6379@16379 myself,master - 0 1657189277000 7 connected 10923-16383
2eaa043a534be29e1ce746ab05e9688cf371f96e 192.168.1.12:6379@16379 master - 0 1657189277064 2 connected 5461-10922
**这时候发现13已经显示故障(fail)14已经变成了master**
0 评论
评论