bostjanbozic.redis
Redis
Rol de Redis, que se puede usar para crear una variedad de configuraciones de Redis:
- nodo único
- un nodo maestro único con múltiples réplicas
- clúster de Redis
La mayor parte del trabajo se basa en un rol ya existente: DavidWittman.redis
Lista de tareas
- agregar configuración de Sentinel
- agregar soporte para sistemas operativos adicionales
Instalación
ansible-galaxy install BostjanBozic.redis
Primeros pasos
El rol se utiliza para crear una variedad de configuraciones de Redis. El rol debe ejecutarse con derechos de sudo en las máquinas remotas.
Nodo único de Redis
Desplegar un nodo único de Redis requiere el uso de este rol, sin necesidad de modificar variables. Este es un ejemplo de playbook con un puerto especificado en el cual se ejecutará Redis:
---
- hosts: all
become: yes
roles:
- BostjanBozic.redis
vars:
- redis_port: 6380
Después de especificar los archivos de playbook e inventario (por ejemplo, playbook.yml
y inventory
), puedes desplegar Redis con el siguiente comando:
ansible-playbook -i inventory playbook.yml
Nodo maestro único con replicación
Redis admite configuraciones de replicación, donde un único nodo maestro está respaldado por uno o más nodos de réplica. El siguiente ejemplo despliega una única instancia maestra de Redis con 2 réplicas:
Archivo de inventario:
[master]
redis-master-0.example.io
[replica]
redis-replica-0.example.io master_host=redis-master-0.example.io
redis-replica-1.example.io master_host=redis-master-0.example.io
Archivo de playbook:
---
- hosts: master
become: yes
roles:
- BostjanBozic.redis
- hosts: replica
become: yes
roles:
- BostjanBozic.redis
vars:
- redis_replicaof: "{{ master_host }} {{ redis_port }}"
Nota: la replicación y el nodo del clúster son mutuamente excluyentes. Al usar la variable replicaof
, no debes configurar la variable redis_cluster_enabled
.
Modo clúster
Redis también admite el modo clúster, donde los datos se distribuyen entre múltiples nodos maestros, que pueden estar respaldados por uno o más nodos de réplica. El siguiente ejemplo despliega 3 instancias maestras de Redis con 1 nodo de réplica cada una:
Archivo de inventario:
[master]
redis-master-[0:2].example.io
[replica]
redis-replica-0.example.io master_host=redis-master-0.example.io
redis-replica-1.example.io master_host=redis-master-1.example.io
redis-replica-2.example.io master_host=redis-master-2.example.io
Archivo de playbook:
---
- hosts: all
become: yes
roles:
- BostjanBozic.redis
vars:
- redis_cluster_enabled: "yes"
Nota: la replicación y el nodo del clúster son mutuamente excluyentes. Al usar la variable redis_cluster_enabled
, no debes configurar la variable replicaof
.
Variables del rol
Esta es una lista de variables predeterminadas. Para obtener una descripción, consulta la documentación oficial.
## Instalación
redis_version: 5.0.4
redis_install_dir: /opt/redis
redis_download_url: "http://download.redis.io/releases/redis-{{ redis_version }}.tar.gz"
redis_user: redis
redis_group: redis
redis_nofile_limit: 16384
redis_oom_score_adjust: 0
redis_master_list: "{{ groups['master'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | arraypermute( [':'] ) | arraypermute( [ redis_port ] ) }}"
## Servicio de Redis
redis_as_service: true
redis_service_name: "redis_{{ redis_port }}"
## Configuración de Redis
# Opciones de red
redis_bind: 0.0.0.0
redis_protected_mode: "no"
redis_port: 6379
redis_tcp_backlog: 511
redis_timeout: 0
redis_tcp_keepalive: 300
# Configuración general
redis_daemonize: "yes"
redis_supervised: "no"
redis_pidfile: /var/run/redis/{{ redis_port }}.pid
redis_loglevel: notice
redis_logfile: /var/log/redis_{{ redis_port }}.log
redis_databases: 16
# Configuración de instantáneas
redis_save:
- 900 1
- 300 10
- 60 10000
redis_stop_writes_on_bgsave_error: "yes"
redis_rdbcompression: "yes"
redis_rdbchecksum: "yes"
redis_dbfilename: dump.rdb
redis_dir: /var/lib/redis/{{ redis_port }}
# Configuración de replicación
redis_replicaof: false
redis_replica_serve_stale_data: "yes"
redis_replica_read_only: "yes"
redis_repl_diskless_sync: "no"
redis_repl_diskless_sync_delay: 5
redis_repl_disable_tcp_nodelay: "no"
redis_repl_backlog_size: false
redis_replica_priority: 100
redis_min_replicas_to_write: 0
redis_min_replicas_max_lag: 10
# Configuración de seguridad
redis_password: false
# Configuración de clientes
redis_maxclients: 10000
# Configuración de gestión de memoria
redis_maxmemory: false
redis_maxmemory_policy: noeviction
# Configuración de liberación perezosa
redis_lazyfree_lazy_eviction: "no"
redis_lazyfree_lazy_expire: "no"
redis_lazyfree_lazy_server_del: "no"
redis_replica_lazy_flush: "no"
# Configuración de solo_append
redis_appendonly: "no"
redis_appendfilename: "appendonly.aof"
redis_appendfsync: everysec
redis_no_appendfsync_on_rewrite: "no"
redis_auto_aof_rewrite_percentage: 100
redis_auto_aof_rewrite_min_size: 64mb
redis_aof_load_truncated: "yes"
# Configuración de scripts Lua
redis_lua_time_limit: 5000
# Configuración del clúster de Redis
redis_cluster_enabled: "no"
redis_cluster_config_file: nodes-{{ redis_port }}.conf
redis_cluster_node_timeout: 15000
# Configuración de log lento
redis_slowlog_log_slower_than: 10000
redis_slowlog_max_len: 128
# Configuración de monitor de latencia
redis_latency_monitor_threshold: 0
# Configuración de notificaciones de eventos
redis_notify_keyspace_events: '""'
# Configuración avanzada
redis_client_output_buffer_limit_normal: 0 0 0
redis_client_output_buffer_limit_replica: 256mb 64mb 60
redis_client_output_buffer_limit_pubsub: 32mb 8mb 60
Licencia
Este proyecto está licenciado bajo la licencia MIT
Ansible role to install Redis (standalone or cluster mode) and Redis Sentinel
ansible-galaxy install bostjanbozic.redis