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

Acerca del proyecto

Ansible role to install Redis (standalone or cluster mode) and Redis Sentinel

Instalar
ansible-galaxy install bostjanbozic.redis
Licencia
mit
Descargas
181
Propietario