Saltar a contenido

Externalizar Redis

Seguir el capítulo oficial Redis 6 upgrade — On-cluster. Hacen falta dos instancias (backend y system). Redis Cluster no está soportado. Runbook completo: docs/runbooks/02-externalize-redis.md (Git Bash: docs/runbooks/02-bis-externalize-redis-windows.md).

Mismos export que Externalizar PostgreSQL. REDIS_NAMESPACE=3scale-db.

1. Escalar 3scale (dejar Redis embebido arriba)

Este paso asume que la externalización de PostgreSQL ya volvió a subir Redis embebido. Escalar a 0 el operador 3scale y los componentes de 3scale excepto backend-redis y system-redis:

oc scale deployment threescale-operator-controller-manager-v2 -n "$OPERATOR_NAMESPACE" --replicas=0
oc scale deployment/{system-memcache,zync-database,apicast-production,apicast-staging,backend-cron,backend-listener,backend-worker,system-app,system-sidekiq,system-searchd,zync,zync-que} --replicas=0

Esperar a que Redis escriba a disco antes del dump.

2. Copiar dump.rdb

oc cp "$(oc get pods -l deployment=backend-redis -o jsonpath='{.items[0].metadata.name}')":/var/lib/redis/data/dump.rdb ./backend-redis-dump.rdb
oc cp "$(oc get pods -l deployment=system-redis -o jsonpath='{.items[0].metadata.name}')":/var/lib/redis/data/dump.rdb ./system-redis-dump.rdb
oc scale deployment/system-redis --replicas=0
oc scale deployment/backend-redis --replicas=0

3. Desplegar Redis 7

oc apply -k kustomize/overlays/lab

El ConfigMap restore trae save "" y appendonly no (necesario para cargar el RDB). Esperar backend-redis-external y system-redis-external en 1/1.

4. Restaurar RDB y reescribir AOF

export REDIS_NAMESPACE=3scale-db
oc cp ./backend-redis-dump.rdb "$(oc get pods -n "$REDIS_NAMESPACE" -l deployment=backend-redis-external -o jsonpath='{.items[0].metadata.name}')":/var/lib/redis/data/dump.rdb -n "$REDIS_NAMESPACE"
oc cp ./system-redis-dump.rdb "$(oc get pods -n "$REDIS_NAMESPACE" -l deployment=system-redis-external -o jsonpath='{.items[0].metadata.name}')":/var/lib/redis/data/dump.rdb -n "$REDIS_NAMESPACE"
oc rollout restart deployment/backend-redis-external -n "$REDIS_NAMESPACE"
oc rollout restart deployment/system-redis-external -n "$REDIS_NAMESPACE"

Cuando los pods estén Ready, ejecutar redis-cli BGREWRITEAOF en cada pod y esperar aof_rewrite_in_progress = 0. Volver a leer los nombres de pod después del restart.

5. Activar persistencia

oc apply -k kustomize/overlays/lab-persist

O cambiar en GitOps redis-config.path a kustomize/bases/redis-config-persist. Reiniciar los Deployments Redis. Comprobar que el ConfigMap ya no tiene save "" y appendonly es yes.

6. Parchear secrets y el APIManager

Parchear los secrets system-redis y backend-redis con las URLs de los servicios externos. Luego marcar externalComponents para ambas instancias Redis en el APIManager. Subir todos los componentes.

Capturar réplicas antes del scale-down

Si las variables de réplicas se capturaron después del scale-down, pueden ser 0. Usar --replicas=1 explícito (o el conteo original) al escalar.