Preparación ambiental
Nombre del nodo | dirección IP |
---|---|
redis-node1 | 192.168.130.20 |
redis-node2 | 192.168.130.19 |
redis-node3 | 192.168.130.21 |
redis-node4 | 192.168.130.20 |
redis-node5 | 192.168.130.19 |
redis-node6 | 192.168.130.21 |
Instalar ventana acoplable
levemente
Instalar el clúster de redis
El clúster mínimo debe contener al menos tres nodos maestros. Aquí, se inicia un clúster de seis nodos con tres nodos maestros y tres nodos esclavos. Aquí solo hay tres máquinas para compartir.
configuración del nodo maestro
Crear directorios (nodo1, nodo2, nodo3)
mkdir -p /root/redis-cluster/6379/data
mkdir -p /root/redis-cluster/6379/config
mkdir -p /root/redis-cluster/6379/log
touch /root/redis-cluster/6379/log/redis.log && chmod 777 /root/redis-cluster/6379/log/redis.log
Escribir archivo de configuración
cd /root/redis-cluster/6379/config
vi redis.conf
El contenido es el siguiente
#保护模式
protected-mode no
requirepass rs1234
masterauth rs1234
#端口
port 6379
#需要修改为 reids_{port}.pid 的形式
pidfile /var/run/redis_6379.pid
## 数据目录
dir "/data"
#开启AOF日志 指定持久化方式
appendonly yes
#开启集群
cluster-enabled yes
#配置redis自动生成的集群配置文件名。确保同一集群中运行的各redis实例该配置文件不要重名。
cluster-config-file nodes-6379.conf
#超时时间
cluster-node-timeout 5000
configuración del nodo salve
Crear directorios (nodo4, nodo5, nodo6)
mkdir -p /root/redis-cluster/6380/data
mkdir -p /root/redis-cluster/6380/config
mkdir -p /root/redis-cluster/6380/log
touch /root/redis-cluster/6380/log/redis.log && chmod 777 /root/redis-cluster/6380/log/redis.log
Escriba el archivo de configuración para establecer la contraseña
cd /root/redis-cluster/6380/config
vi redis.conf
#保护模式
protected-mode no
requirepass rs1234
masterauth rs1234
#端口
port 6380
#需要修改为 reids_{port}.pid 的形式
pidfile /var/run/redis_6380.pid
## 数据目录
dir "/data"
#开启AOF日志 指定持久化方式
appendonly yes
#开启集群
cluster-enabled yes
#配置redis自动生成的集群配置文件名。确保同一集群中运行的各redis实例该配置文件不要重名。
cluster-config-file nodes-6380.conf
#超时时间
cluster-node-timeout 5000
Iniciar todos los nodos
nodo1
docker rm -f redis-node1
docker run -d --net=host --privileged=true --name redis-node1 \
-v /root/redis-cluster/6379/config/redis.conf:/etc/redis.conf \
-v /root/redis-cluster/6379/data:/data \
redis:5.0.4 /etc/redis.conf
nodo4
docker rm -f redis-node4
docker run -d --net=host --privileged=true --name redis-node4 \
-v /root/redis-cluster/6380/config/redis.conf:/etc/redis.conf \
-v /root/redis-cluster/6380/data:/data \
redis:5.0.4 /etc/redis.conf
nodo2
docker rm -f redis-node2
docker run -d --net=host --privileged=true --name redis-node2 \
-v /root/redis-cluster/6379/config/redis.conf:/etc/redis.conf \
-v /root/redis-cluster/6379/data:/data \
redis:5.0.4 /etc/redis.conf
nodo5
docker rm -f redis-node5
docker run -d --net=host --privileged=true --name redis-node5 \
-v /root/redis-cluster/6380/config/redis.conf:/etc/redis.conf \
-v /root/redis-cluster/6380/data:/data \
redis:5.0.4 /etc/redis.conf
nodo3
docker rm -f redis-node3
docker run -d --net=host --privileged=true --name redis-node3 \
-v /root/redis-cluster/6379/config/redis.conf:/etc/redis.conf \
-v /root/redis-cluster/6379/data:/data \
redis:5.0.4 /etc/redis.conf
nodo6
docker rm -f redis-node6
docker run -d --net=host --privileged=true --name redis-node6 \
-v /root/redis-cluster/6380/config/redis.conf:/etc/redis.conf \
-v /root/redis-cluster/6380/data:/data \
redis:5.0.4 /etc/redis.conf
Crea un clúster
Entre ellos, cluster-réplicas 1 significa que hay varios esclavos detrás de un maestro, 1 significa 1 nodo esclavo, el nodo 1 ~ 3 son nodos maestros 4 ~ 6 son esclavos, y el orden de ip + puerto no se puede alterar
docker exec -it redis-node1 sh
redis-cli -a rs1234 --cluster create 192.168.130.20:6379 192.168.130.20:6380 192.168.130.19:6379 192.168.130.19:6380 192.168.130.21:6379 192.168.130.21:6380 --cluster-replicas 1
Si desea acceder a la red externa, no puede usar la ip de la red interna
docker exec -it redis-node1 redis-cli -a rs1234 --cluster create 47.242.209.116:6379 47.242.209.116:6380 47.242.140.195:6379 47.242.140.195:6380 8.210.133.161:6379 8.210.133.161:6380 --cluster-replicas 1
Luego modifique la ip de la intranet en node1, node2, node3 / root / redis-cluster / xxxx / data / nodes-6379.conf, y luego reinicie node1, node2, node3
Información de salida
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> 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.130.19:6380 to 192.168.130.20:6379
Adding replica 192.168.130.21:6380 to 192.168.130.19:6379
Adding replica 192.168.130.20:6380 to 192.168.130.21:6379
M: 50c6ee00e873c8c60d6bdb03b26d132984a1e967 192.168.130.20:6379
slots:[0-5460] (5461 slots) master
S: 23c0582497bc3b65be14912d46b0a65d364a8c50 192.168.130.20:6380
replicates 87b956229fb8a24afc35c1d3c382848a7fa33f35
M: af6cbd0b67ce0ceeec22746de8f533015b13798b 192.168.130.19:6379
slots:[5461-10922] (5462 slots) master
S: 7ad25bc5ce312e38e18ec8b2bdb09f2fb7e482ef 192.168.130.19:6380
replicates 50c6ee00e873c8c60d6bdb03b26d132984a1e967
M: 87b956229fb8a24afc35c1d3c382848a7fa33f35 192.168.130.21:6379
slots:[10923-16383] (5461 slots) master
S: 0636fac961529a907b816b0bc0d9bfaaa22c52c0 192.168.130.21:6380
replicates af6cbd0b67ce0ceeec22746de8f533015b13798b
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.130.20:6379)
M: 50c6ee00e873c8c60d6bdb03b26d132984a1e967 192.168.130.20:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 0636fac961529a907b816b0bc0d9bfaaa22c52c0 192.168.130.21:6380
slots: (0 slots) slave
replicates af6cbd0b67ce0ceeec22746de8f533015b13798b
S: 7ad25bc5ce312e38e18ec8b2bdb09f2fb7e482ef 192.168.130.19:6380
slots: (0 slots) slave
replicates 50c6ee00e873c8c60d6bdb03b26d132984a1e967
M: 87b956229fb8a24afc35c1d3c382848a7fa33f35 192.168.130.21:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: af6cbd0b67ce0ceeec22746de8f533015b13798b 192.168.130.19:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 23c0582497bc3b65be14912d46b0a65d364a8c50 192.168.130.20:6380
slots: (0 slots) slave
replicates 87b956229fb8a24afc35c1d3c382848a7fa33f35
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered
Verificar el clúster
Ingrese el nodo1
docker exec -it redis-node1 /bin/bash
redis-cli -c -a rs1234
127.0.0.1:6379> cluster nodes
0636fac961529a907b816b0bc0d9bfaaa22c52c0 192.168.130.21:6380@16380 slave af6cbd0b67ce0ceeec22746de8f533015b13798b 0 1608289060160 6 connected
7ad25bc5ce312e38e18ec8b2bdb09f2fb7e482ef 192.168.130.19:6380@16380 slave 50c6ee00e873c8c60d6bdb03b26d132984a1e967 0 1608289059661 4 connected
87b956229fb8a24afc35c1d3c382848a7fa33f35 192.168.130.21:6379@16379 master - 0 1608289059159 5 connected 10923-16383
af6cbd0b67ce0ceeec22746de8f533015b13798b 192.168.130.19:6379@16379 master - 0 1608289059000 3 connected 5461-10922
50c6ee00e873c8c60d6bdb03b26d132984a1e967 192.168.130.20:6379@16379 myself,master - 0 1608289059000 1 connected 0-5460
23c0582497bc3b65be14912d46b0a65d364a8c50 192.168.130.20:6380@16380 slave 87b956229fb8a24afc35c1d3c382848a7fa33f35 0 1608289060662 5 connected
Los datos se asignan automáticamente al nodo2 y la conexión también se transfiere al nodo2.
127.0.0.1:6379> set name kk
-> Redirected to slot [5798] located at 192.168.130.19:6379
OK
192.168.130.19:6379> get name
"kk"
Verificar el interruptor maestro-esclavo
docker stop redis-node1
docker exec -it redis-node4 /bin/bash
root@kont001ecs:/data# redis-cli -c -a rs1234 -p 6380
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6380> clustrer nodes
(error) ERR unknown command `clustrer`, with args beginning with: `nodes`,
127.0.0.1:6380> cluster nodes
0636fac961529a907b816b0bc0d9bfaaa22c52c0 192.168.130.21:6380@16380 slave af6cbd0b67ce0ceeec22746de8f533015b13798b 0 1608291356000 6 connected
7ad25bc5ce312e38e18ec8b2bdb09f2fb7e482ef 192.168.130.19:6380@16380 master - 0 1608291355000 7 connected 0-5460
87b956229fb8a24afc35c1d3c382848a7fa33f35 192.168.130.21:6379@16379 master - 0 1608291356848 5 connected 10923-16383
af6cbd0b67ce0ceeec22746de8f533015b13798b 192.168.130.19:6379@16379 master - 0 1608291355844 3 connected 5461-10922
50c6ee00e873c8c60d6bdb03b26d132984a1e967 192.168.130.20:6379@16379 master,fail - 1608291323928 1608291322000 1 disconnected
23c0582497bc3b65be14912d46b0a65d364a8c50 192.168.130.20:6380@16380 myself,slave 87b956229fb8a24afc35c1d3c382848a7fa33f35 0 1608291355000 2 connected
Puede ver el nodo1, fallar
, puede ver el nodo6, de esclavo a maestro
Reinicie el nodo1 y luego verifique que el estado del clúster nodo1 se haya convertido en esclavo
docker start redis-node1
docker exec -it redis-node4 /bin/bash
root@kont001ecs:/data# redis-cli -c -a rs1234 -p 6380
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6380> cluster nodes
0636fac961529a907b816b0bc0d9bfaaa22c52c0 192.168.130.21:6380@16380 slave af6cbd0b67ce0ceeec22746de8f533015b13798b 0 1608291658836 6 connected
7ad25bc5ce312e38e18ec8b2bdb09f2fb7e482ef 192.168.130.19:6380@16380 master - 0 1608291658335 7 connected 0-5460
87b956229fb8a24afc35c1d3c382848a7fa33f35 192.168.130.21:6379@16379 master - 0 1608291658536 5 connected 10923-16383
af6cbd0b67ce0ceeec22746de8f533015b13798b 192.168.130.19:6379@16379 master - 0 1608291659538 3 connected 5461-10922
50c6ee00e873c8c60d6bdb03b26d132984a1e967 192.168.130.20:6379@16379 slave 7ad25bc5ce312e38e18ec8b2bdb09f2fb7e482ef 0 1608291659839 7 connected
23c0582497bc3b65be14912d46b0a65d364a8c50 192.168.130.20:6380@16380 myself,slave 87b956229fb8a24afc35c1d3c382848a7fa33f35 0 1608291659000 2 connected
referencia
https://redis.io/topics/cluster-tutorial