Installing a Redis Cluster with Docker
Jun 14, 2023
3 minute read
Redis 5.0.7
Create the cluster directory:
mkdir /home/redis-cluster
1
2
3
4
5
6
7
8
9
port ${ PORT }
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.21.28 // your own server IP
cluster-announce-port ${ PORT }
cluster-announce-bus-port 1${ PORT }
appendonly yes
Create a dedicated network (optional):
docker network create redis-net
Create the
conf
and
data
directories:
1
2
3
4
5
for port in ` seq 7000 7005` ; do \
mkdir -p ./${ port } /conf \
&& PORT = ${ port } envsubst < ./redis-cluster.tmpl > ./${ port } /conf/redis.conf \
&& mkdir -p ./${ port } /data; \
done
Create the Redis containers:
1
2
3
4
5
6
7
for port in ` seq 7000 7005` ; do \
docker run -d -ti -p ${ port } :${ port } -p 1${ port } :1${ port } \
-v /home/redis-cluster/${ port } /conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/redis-cluster/${ port } /data:/data \
--restart always --name redis-${ port } --net redis-net \
--sysctl net.core.somaxconn= 1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done
Enter any one of the containers:
docker exec -it e61133e98d01 /bin/bash
Create the cluster:
redis-cli --cluster create 192.168.21.28:7000 192.168.21.28:7001 192.168.21.28:7002 192.168.21.28:7002 192.168.21.28:7003 192.168.21.28:7004 192.168.21.28:7005 --cluster-replicas 1
Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
>>> Performing hash slots allocation on 7 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.21.28:7003 to 192.168.21.28:7000
Adding replica 192.168.21.28:7004 to 192.168.21.28:7001
Adding replica 192.168.21.28:7005 to 192.168.21.28:7002
Adding extra replicas...
Adding replica 192.168.21.28:7002 to 192.168.21.28:7000
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: d4b82300dfacedeaf7d50e0c3c06d9b7662603e1 192.168.21.28:7000
slots:[0-5460] (5461 slots) master
M: f89d211a74b1e71b4b3aa12ae9491cd0657c9f06 192.168.21.28:7001
slots:[5461-10922] (5462 slots) master
M: d02714dc30ed747bc23d8387684d0389b1552a61 192.168.21.28:7002
slots:[10923-16383] (5461 slots) master
S: d02714dc30ed747bc23d8387684d0389b1552a61 192.168.21.28:7002
replicates f89d211a74b1e71b4b3aa12ae9491cd0657c9f06
S: 5188757b51c2fc804ab9a09779cc83f3dd08e7e2 192.168.21.28:7003
replicates d4b82300dfacedeaf7d50e0c3c06d9b7662603e1
S: 985e81724ea9b5664a19961f4a758689290856b2 192.168.21.28:7004
replicates d02714dc30ed747bc23d8387684d0389b1552a61
S: 2f12b2eb90938cf2469bd6209f85dc42925e2129 192.168.21.28:7005
replicates d4b82300dfacedeaf7d50e0c3c06d9b7662603e1
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.21.28:7000)
M: d4b82300dfacedeaf7d50e0c3c06d9b7662603e1 192.168.21.28:7000
slots:[0-5460] (5461 slots) master
2 additional replica(s)
M: d02714dc30ed747bc23d8387684d0389b1552a61 192.168.21.28:7002
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 985e81724ea9b5664a19961f4a758689290856b2 192.168.21.28:7004
slots: (0 slots) slave
replicates d02714dc30ed747bc23d8387684d0389b1552a61
S: 2f12b2eb90938cf2469bd6209f85dc42925e2129 192.168.21.28:7005
slots: (0 slots) slave
replicates d4b82300dfacedeaf7d50e0c3c06d9b7662603e1
S: 5188757b51c2fc804ab9a09779cc83f3dd08e7e2 192.168.21.28:7003
slots: (0 slots) slave
replicates d4b82300dfacedeaf7d50e0c3c06d9b7662603e1
M: f89d211a74b1e71b4b3aa12ae9491cd0657c9f06 192.168.21.28:7001
slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Connection test:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
e61133e98d01 redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:7005->7005/tcp, 6379/tcp, 0.0.0.0:17005->17005/tcp redis-7005
4860f478463f redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:7004->7004/tcp, 6379/tcp, 0.0.0.0:17004->17004/tcp redis-7004
16d6bb61118b redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:7003->7003/tcp, 6379/tcp, 0.0.0.0:17003->17003/tcp redis-7003
7b6070c17724 redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:7002->7002/tcp, 6379/tcp, 0.0.0.0:17002->17002/tcp redis-7002
afd85937ac9a redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:7001->7001/tcp, 6379/tcp, 0.0.0.0:17001->17001/tcp redis-7001
0298db107972 redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:7000->7000/tcp, 6379/tcp, 0.0.0.0:17000->17000/tcp redis-7000
redis-cli -c -h 192.168.21.28 -p 7002
192.168.21.28:7002> CLUSTER NODES
985e81724ea9b5664a19961f4a758689290856b2 192.168.21.28:7004@17004 slave d02714dc30ed747bc23d8387684d0389b1552a61 0 1576224546000 6 connected
2f12b2eb90938cf2469bd6209f85dc42925e2129 192.168.21.28:7005@17005 slave d4b82300dfacedeaf7d50e0c3c06d9b7662603e1 0 1576224547233 1 connected
5188757b51c2fc804ab9a09779cc83f3dd08e7e2 192.168.21.28:7003@17003 slave d4b82300dfacedeaf7d50e0c3c06d9b7662603e1 0 1576224546227 5 connected
f89d211a74b1e71b4b3aa12ae9491cd0657c9f06 192.168.21.28:7001@17001 master - 0 1576224546000 2 connected 5461-10922
d02714dc30ed747bc23d8387684d0389b1552a61 192.168.21.28:7002@17002 myself,master - 0 1576224544000 3 connected 10923-16383
d4b82300dfacedeaf7d50e0c3c06d9b7662603e1 192.168.21.28:7000@17000 master - 0 1576224547000 1 connected 0-5460
References:
https://blog.csdn.net/tszxlzc/article/details/86565327
https://www.cnblogs.com/lianggp/articles/8136222.html