bostjanbozic.redis
Redis
Redis角色可以用来创建多种Redis设置:
- 单节点
- 单主节点与多个副本
- Redis集群
大部分工作基于现有角色:DavidWittman.redis
待办事项
- 添加哨兵配置
- 增加对其他操作系统的支持
安装
ansible-galaxy install BostjanBozic.redis
入门指南
该角色用于创建多种Redis设置。该角色需要在远程机器上以sudo权限运行。
单个Redis节点
部署单个Redis节点不需要修改任何变量,只需使用此角色即可。以下是指定Redis运行端口的剧本示例:
---
- hosts: all
become: yes
roles:
- BostjanBozic.redis
vars:
- redis_port: 6380
在指定剧本和清单文件(例如 playbook.yml
和 inventory
)后,使用以下命令部署Redis:
ansible-playbook -i inventory playbook.yml
单主节点与复制
Redis支持复制设置,单个主节点可以有一个或多个副本节点。下面的示例部署了一个单个Redis主实例和两个副本:
清单文件:
[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
剧本文件:
---
- hosts: master
become: yes
roles:
- BostjanBozic.redis
- hosts: replica
become: yes
roles:
- BostjanBozic.redis
vars:
- redis_replicaof: "{{ master_host }} {{ redis_port }}"
注意:复制和集群节点是相互排斥的。使用 replicaof
变量时,请不要设置 redis_cluster_enabled
变量。
集群模式
Redis还支持集群模式,其中数据分布在多个主节点上,这些主节点可以有一个或多个副本节点。以下示例部署了3个Redis主实例,每个实例有1个副本节点:
清单文件:
[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
剧本文件:
---
- hosts: all
become: yes
roles:
- BostjanBozic.redis
vars:
- redis_cluster_enabled: "yes"
注意:复制和集群节点是相互排斥的。使用 redis_cluster_enabled
变量时,请不要设置 replicaof
变量。
角色变量
以下是默认变量的列表。有关描述,请查阅官方文档。
## 安装
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 ] ) }}"
## Redis服务
redis_as_service: true
redis_service_name: "redis_{{ redis_port }}"
## Redis配置
# 网络选项
redis_bind: 0.0.0.0
redis_protected_mode: "no"
redis_port: 6379
redis_tcp_backlog: 511
redis_timeout: 0
redis_tcp_keepalive: 300
# 一般配置
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
# 快照配置
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 }}
# 复制配置
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
# 安全配置
redis_password: false
# 客户端配置
redis_maxclients: 10000
# 内存管理配置
redis_maxmemory: false
redis_maxmemory_policy: noeviction
# 延迟释放配置
redis_lazyfree_lazy_eviction: "no"
redis_lazyfree_lazy_expire: "no"
redis_lazyfree_lazy_server_del: "no"
redis_replica_lazy_flush: "no"
# 仅追加模式配置
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"
# Lua脚本配置
redis_lua_time_limit: 5000
# Redis集群配置
redis_cluster_enabled: "no"
redis_cluster_config_file: nodes-{{ redis_port }}.conf
redis_cluster_node_timeout: 15000
# 慢日志配置
redis_slowlog_log_slower_than: 10000
redis_slowlog_max_len: 128
# 延迟监控配置
redis_latency_monitor_threshold: 0
# 事件通知配置
redis_notify_keyspace_events: '""'
# 高级配置
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
许可证
该项目依据MIT许可证授权。