Si buscas Ansible Redis para automatizar la instalación y configuración de tu infraestructura de cache, estás en el lugar correcto. Redis es una base de datos en memoria de alto rendimiento esencial para aplicaciones modernas que requieren baja latencia y alta disponibilidad. Con Ansible, puedes desplegar Redis de forma consistente, segura y repetible en todos tus servidores.
¿Qué es Ansible Redis y Por Qué Usarlo?
Ansible Redis es la combinación de Ansible (herramienta de automatización) con Redis (base de datos en memoria) para automatizar el ciclo completo de gestión: instalación, configuración, replicación y monitoreo. Redis se utiliza como cache, broker de mensajes, y almacenamiento de sesiones en arquitecturas de microservicios.
Según la documentación oficial de Ansible, el módulo community.general.redis permite gestionar configuraciones, replicación y operaciones de flush en instancias Redis de manera declarativa.
Ventajas de Automatizar Redis con Ansible
- Despliegue consistente: Misma configuración en desarrollo, staging y producción
- Gestión de clusters: Automatiza Redis Cluster y Redis Sentinel para alta disponibilidad
- Configuración declarativa: Define el estado deseado en YAML
- Seguridad mejorada: Configuración automática de autenticación, TLS y comandos restringidos
- Escalabilidad: Despliega múltiples nodos con un solo playbook
Instalación de Ansible Redis: Roles Recomendados
Existen varios roles de Ansible Redis en Ansible Galaxy que facilitan la instalación. El más popular es geerlingguy.redis, mantenido por Jeff Geerling, con soporte para distribuciones RedHat, Debian y Ubuntu.
Requisitos Previos
# En sistemas RedHat/CentOS, habilitar EPEL
- hosts: redis_servers
roles:
- geerlingguy.repo-epel
- geerlingguy.redis
Instalación del Rol
ansible-galaxy install geerlingguy.redis
Playbook Básico de Ansible Redis
Este playbook instala y configura Ansible Redis con parámetros esenciales de seguridad y rendimiento:
---
- name: Desplegar Redis con Ansible
hosts: redis_servers
become: true
vars:
redis_port: 6379
redis_bind_interface: "0.0.0.0"
redis_requirepass: "TuPasswordSegura2025!"
redis_maxmemory: "2gb"
redis_maxmemory_policy: "allkeys-lru"
redis_appendonly: "yes"
redis_loglevel: "notice"
redis_logfile: "/var/log/redis/redis-server.log"
redis_disabled_commands:
- FLUSHDB
- FLUSHALL
- CONFIG
- SHUTDOWN
roles:
- geerlingguy.redis
tasks:
- name: Verificar estado del servicio Redis
ansible.builtin.service:
name: redis
state: started
enabled: true
- name: Validar conectividad Redis
ansible.builtin.command: redis-cli -a "{{ redis_requirepass }}" ping
register: redis_ping
changed_when: false
- name: Mostrar resultado de conectividad
ansible.builtin.debug:
msg: "Redis responde: {{ redis_ping.stdout }}"
Este playbook implementa las mejores prácticas de Ansible Security Hardening, deshabilitando comandos peligrosos y configurando autenticación obligatoria.
Configuración Avanzada de Ansible Redis
Variables de Persistencia
La persistencia en Ansible Redis se configura mediante snapshots (RDB) o Append-Only File (AOF):
redis_save:
- "900 1" # Guardar si hay 1 cambio en 15 minutos
- "300 10" # Guardar si hay 10 cambios en 5 minutos
- "60 10000" # Guardar si hay 10000 cambios en 1 minuto
redis_appendonly: "yes"
redis_appendfsync: "everysec" # Opciones: always, everysec, no
redis_rdbcompression: "yes"
redis_dbdir: "/var/lib/redis"
Configuración de Memoria
redis_maxmemory: "4gb"
redis_maxmemory_policy: "allkeys-lru" # Opciones: noeviction, allkeys-lru, volatile-lru, allkeys-random, volatile-random, volatile-ttl
Similar a cómo se gestiona la memoria en Ansible Elasticsearch, la configuración adecuada de memoria evita problemas de rendimiento en producción.
Ansible Redis Cluster: Alta Disponibilidad
Redis Cluster permite distribuir datos automáticamente entre múltiples nodos. Este playbook configura un cluster de 6 nodos (3 maestros, 3 réplicas) usando Ansible Redis:
---
- name: Configurar Redis Cluster con Ansible
hosts: redis_cluster
become: true
vars:
redis_port: 7000
redis_cluster_enabled: "yes"
redis_cluster_config_file: "/etc/redis/nodes.conf"
redis_cluster_node_timeout: 5000
redis_appendonly: "yes"
roles:
- geerlingguy.redis
tasks:
- name: Crear cluster Redis
ansible.builtin.command: >
redis-cli --cluster create
{{ groups['redis_cluster'] | map('extract', hostvars, 'ansible_host') | map('regex_replace', '^(.*)$', '\1:7000') | join(' ') }}
--cluster-replicas 1
--cluster-yes
run_once: true
when: inventory_hostname == groups['redis_cluster'][0]
Según este tutorial de Medium, Redis Cluster distribuye automáticamente las claves usando hash slots, proporcionando particionamiento horizontal.
Ansible Redis Sentinel: Failover Automático
Redis Sentinel monitorea instancias Redis y ejecuta failover automático si el nodo maestro falla. Aquí está el playbook completo de Ansible Redis Sentinel:
---
- name: Desplegar Redis con Sentinel
hosts: redis_sentinel
become: true
vars:
redis_sentinel: true
redis_sentinel_port: 26379
redis_sentinel_monitors:
- name: mymaster
host: 192.168.1.10
port: 6379
quorum: 2
auth_pass: "TuPasswordSegura2025!"
down_after_milliseconds: 5000
parallel_syncs: 1
failover_timeout: 10000
roles:
- role: davidwittman.redis
redis_install_from_source: true
tasks:
- name: Verificar estado de Sentinel
ansible.builtin.command: redis-cli -p 26379 SENTINEL masters
register: sentinel_status
changed_when: false
- name: Mostrar configuración de Sentinel
ansible.builtin.debug:
var: sentinel_status.stdout_lines
La documentación en GitHub de DavidWittman proporciona ejemplos adicionales de configuración Sentinel con replicación maestro-esclavo.
Seguridad en Ansible Redis
La seguridad es crítica en Ansible Redis, especialmente si está expuesto a internet:
Autenticación y Cifrado TLS
---
- name: Redis con TLS y autenticación
hosts: redis_servers
become: true
tasks:
- name: Configurar Redis con TLS
community.general.redis:
command: config
name: tls-port
value: 6380
login_password: "{{ redis_password }}"
tls: true
ca_certs: "/etc/redis/ca.crt"
- name: Deshabilitar comandos peligrosos
community.general.redis:
command: config
name: "rename-command FLUSHALL"
value: '""'
login_password: "{{ redis_password }}"
Como en Ansible PostgreSQL, las conexiones cifradas y la autenticación fuerte son fundamentales para cumplir con estándares de seguridad.
Monitoreo y Mantenimiento con Ansible Redis
Este playbook implementa tareas de monitoreo y mantenimiento para Ansible Redis:
---
- name: Monitoreo Redis con Ansible
hosts: redis_servers
become: true
tasks:
- name: Obtener información del servidor
community.general.redis:
command: info
login_password: "{{ redis_password }}"
register: redis_info
- name: Verificar uso de memoria
ansible.builtin.shell: redis-cli -a "{{ redis_password }}" INFO memory | grep used_memory_human
register: memory_usage
changed_when: false
- name: Limpiar claves expiradas
ansible.builtin.cron:
name: "Redis cleanup expired keys"
minute: "0"
hour: "3"
job: "redis-cli -a {{ redis_password }} --scan --pattern 'temp:*' | xargs redis-cli -a {{ redis_password }} DEL"
- name: Backup automático RDB
ansible.builtin.cron:
name: "Redis RDB backup"
minute: "0"
hour: "2"
job: "redis-cli -a {{ redis_password }} BGSAVE && cp /var/lib/redis/dump.rdb /backup/redis/dump-$(date +\\%Y\\%m\\%d).rdb"
Para visualizar métricas de Redis, puedes integrarlo con Grafana Docker Compose usando exporters de Prometheus.
Integración de Ansible Redis con Kubernetes
Si usas Ansible Kubernetes, puedes desplegar Redis como StatefulSet:
---
- name: Desplegar Redis en Kubernetes con Ansible
hosts: localhost
tasks:
- name: Crear namespace para Redis
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Namespace
metadata:
name: redis
- name: Desplegar Redis StatefulSet
kubernetes.core.k8s:
state: present
definition:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
namespace: redis
spec:
serviceName: redis
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
Comparación: Ansible Redis vs Otros Métodos
| Método | Ventajas | Desventajas |
|---|---|---|
| Ansible Redis | Declarativo, idempotente, versionable | Curva de aprendizaje inicial |
| Scripts Bash | Simple para casos básicos | No idempotente, difícil de mantener |
| Docker Compose | Portabilidad, aislamiento | No gestiona múltiples hosts |
| Terraform | Infraestructura como código | Menos adecuado para configuración de aplicaciones |
Para despliegues en contenedores locales, revisa Ansible Docker Deployment.
Preguntas Frecuentes sobre Ansible Redis
¿Ansible Redis soporta Redis 7?
Sí, los roles modernos como geerlingguy.redis soportan Redis 7 con características como ACLs mejoradas, Redis Functions y comandos optimizados. Asegúrate de especificar la versión en las variables del rol.
¿Cómo migro de Redis standalone a Redis Cluster con Ansible?
La migración requiere: 1) Backup de datos con BGSAVE, 2) Desplegar nuevos nodos con redis_cluster_enabled: yes, 3) Usar redis-cli --cluster import para migrar datos, 4) Actualizar aplicaciones con nuevos endpoints. Ansible Redis puede automatizar todos estos pasos.
¿Es mejor Redis Sentinel o Redis Cluster?
Redis Sentinel es ideal para alta disponibilidad con replicación maestro-réplica (hasta 1TB de datos). Redis Cluster es mejor para particionamiento horizontal con múltiples maestros (datasets mayores a 1TB). Ambos pueden automatizarse con Ansible Redis.
¿Puedo usar Ansible Redis con Terraform?
Sí, combina Ansible Terraform para aprovisionar infraestructura (instancias EC2, redes) con Terraform, y luego configurar Redis con Ansible. Esta es una práctica común en DevOps moderno.
¿Cómo escalo Redis horizontalmente con Ansible?
Usa Redis Cluster con Ansible Redis para agregar nodos dinámicamente. Añade nuevos hosts al inventario y ejecuta el playbook de cluster. Redis redistribuirá automáticamente los hash slots entre los nodos existentes y nuevos.
Conclusión
Ansible Redis simplifica la automatización completa de Redis, desde instalación básica hasta clusters de alta disponibilidad con Sentinel. Con playbooks declarativos, puedes gestionar configuraciones complejas de forma consistente y segura en todos tus entornos. Los roles de la comunidad como geerlingguy.redis y davidwittman.redis proporcionan soluciones probadas en producción.
Implementa estas prácticas de Ansible Redis en tu infraestructura para mejorar la confiabilidad, seguridad y escalabilidad de tus aplicaciones que dependen de cache y almacenamiento en memoria de alto rendimiento.
