Redis es un almacén de valores clave muy conocido, muy rápido y estable. Sin embargo, hay algunas situaciones en las que necesitamos aplicaciones en tiempo real y escalar nuestra aplicación en algunos momentos de alto tráfico.
A continuación, pego mi archivo docker-compose final y explicaré algunas partes importantes. En ese caso, mi aplicación se basa en NodeJS con MariaDb.
version: '3.5'
services:
app:
build:
context: ./
dockerfile: Dockerfile
ports:
- 3000:3000
environment:
REDIS_NODE_1: redis-node-1:6373
REDIS_NODE_2: redis-node-2:6374
REDIS_NODE_3: redis-node-3:6375
REDIS_NODE_4: redis-node-4:6376
REDIS_NODE_5: redis-node-5:6377
REDIS_NODE_6: redis-node-6:6378
volumes:
- '.:/usr/src/app'
- nodemodules:/usr/local/app/node_modules
networks:
app_subnet:
ipv4_address: 172.20.0.10
depends_on:
- db
- redis-cluster
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: feedback
MYSQL_DATABASE: feedback
MYSQL_USER: feedback
MYSQL_PASSWORD: feedback
volumes:
- db-data:/var/lib/mysql
ports:
- 3306:3306
networks:
app_subnet:
ipv4_address: 172.20.0.20
redis-cluster:
image: 'redis:6.0-alpine'
command: redis-cli --cluster create 172.20.0.31:6373 172.20.0.32:6374 172.20.0.33:6375 172.20.0.34:6376 172.20.0.35:6377 172.20.0.36:6378 --cluster-replicas 1 --cluster-yes
networks:
app_subnet:
ipv4_address: 172.20.0.30
depends_on:
- redis-node-1
- redis-node-2
- redis-node-3
- redis-node-4
- redis-node-5
- redis-node-6
redis-node-1:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6373:6373'
volumes:
- redis-node-1-data:/var/lib/redis
- ./docker/redis-node-1.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.31
redis-node-2:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6374:6374'
volumes:
- redis-node-2-data:/var/lib/redis
- ./docker/redis-node-2.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.32
redis-node-3:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6375:6375'
volumes:
- redis-node-3-data:/var/lib/redis
- ./docker/redis-node-3.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.33
redis-node-4:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6376:6376'
volumes:
- redis-node-4-data:/var/lib/redis
- ./docker/redis-node-4.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.34
redis-node-5:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6377:6377'
volumes:
- redis-node-5-data:/var/lib/redis
- ./docker/redis-node-5.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.35
redis-node-6:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6378:6378'
volumes:
- redis-node-6-data:/var/lib/redis
- ./docker/redis-node-6.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.36
volumes:
db-data:
redis-node-1-data:
redis-node-2-data:
redis-node-3-data:
redis-node-4-data:
redis-node-5-data:
redis-node-6-data:
nodemodules:
networks:
app_subnet:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
Se requiere una IP estática porque redis-cluster no funciona con dominios. En ese caso, tengo que crear una red de subred de Docker para hacer que todos los nodos de Redis estén juntos en la misma red.
Además, tengo que configurar el puerto para cada nodo de redis para evitar la colisión de puertos dentro de la red de la ventana acoplable.
Además, el mismo puerto especificado en el portsargumento docker-compose debe ser el mismo puerto especificado en el redis.confarchivo
Echemos un vistazo al redis.confarchivo
port 6373
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
La única diferencia entre todos los redis.confarchivos es el número de puerto. Preste atención para asegurarse de que el número de puerto sea el mismo redis.confarchivo interno y portsargumentos endocker-compose.yml
Hace que los datos estén disponibles para todo el clúster y la aplicación cuando los contenedores comienzan de nuevo.
Cuando todos los nodos de redis están activos, tengo que unirlos a todos en un clúster. Para lograrlo, creo el redis-clusterservicio para ejecutar el redis-cli clustercomando.
Recuerda, como dije antes, redis-cli clustersolo funciona con IP estática, así que cuando tengo que prestar atención a los valores de IP y puertos.
El propósito del servicio es solo ejecutar el clúster redis-cli. No hay problema, el servicio muere cuando el comando ha finalizado
Mi artículo se centra en el clúster de Redis, por lo que no explico nada sobre los servicios NodeJs y Mariadb.
Sin embargo, no dude en pedirme información al respecto. Será un placer ayudarte :)
Referencias:
Hoy continúo con la serie de preguntas de entrevistas de Node JS. Esta serie se basará en 5 partes que cubren las preguntas importantes que se hacen en las entrevistas desde Básico hasta Avanzado Antes de comenzar.
En este artículo, intentaremos dockerizar una aplicación CRUD simple de golang con una base de datos postgreSQL. Primero creemos nuestra aplicación.
Ayer cerramos la puerta del Festival de la Canción de Eurovisión de este año con una gran final brillante y caótica en la que la cantante sueca Loreen se llevó a casa el trofeo, convirtiéndose en la primera mujer en ganar dos veces y devolviendo la corona a Suecia 50 años después de que ABBA ganara la competencia. con “Waterloo”. Se convirtieron en uno de los actos más grandes en el canon de la música pop.
Lo que es viejo ahora es nuevo otra vez y lo que solía ser algo reluciente ahora se siente aburrido. No me refiero a que los jeans JNCO regresen entre los chicos geniales del centro de la ciudad junto con otras modas de fines de la década de 1990.
En el mundo acelerado y competitivo de hoy, la carrera de uno juega un papel importante en el crecimiento personal, la estabilidad financiera y la satisfacción general con la vida. Sin embargo, muchas personas se encuentran atrapadas en un ciclo implacable de estancamiento e insatisfacción, y su vida profesional se desvanece gradualmente.
Cuando creces, tiendes a que te digan que el mundo es como es y que tu vida es solo vivir tu vida dentro del mundo, nunca arriesgar tu vida, solo sigue un camino establecido y muere al final, y trata de no hacerlo. golpea demasiado las paredes. Pero esa es una vida muy limitada.