NewsBlur/ansible/roles/redis/tasks/main.yml
2023-06-08 07:10:01 -04:00

129 lines
3.9 KiB
YAML

---
- name: Install sysfsutils for disabling transparent huge pages
become: yes
package:
name: sysfsutils
state: latest
- name: Disable transparent huge pages for redis performance - persistent change
become: yes
lineinfile:
path: /etc/sysfs.conf
create: true
regexp: '^kernel\/mm\/transparent\_hugepage\/enabled'
line: "kernel/mm/transparent_hugepage/enabled = never"
- name: Disable transparent huge pages for redis performance - live change
become: yes
shell: echo never {{ ">" }} /sys/kernel/mm/transparent_hugepage/enabled
- name: Add a vm.overcommit_memory setting at the end of the sysctl.conf
become: yes
sysctl: name=vm.overcommit_memory value=1 state=present reload=yes
- name: Template redis.conf file
copy:
src: /srv/newsblur/docker/redis/redis.conf
dest: /srv/newsblur/docker/redis/redis.conf
notify: restart redis
register: updated_config
- name: Template redis_replica.conf file
template:
src: /srv/newsblur/docker/redis/redis_replica.conf.j2
dest: /srv/newsblur/docker/redis/redis_replica.conf
notify: restart redis
register: updated_config
when: "'db-redis-story1' in inventory_hostname"
- name: Create Redis docker volume with correct permissions
file:
path: /srv/newsblur/docker/volumes/redis
state: directory
recurse: yes
owner: "{{ ansible_effective_user_id|int }}"
group: "{{ ansible_effective_group_id|int }}"
- name: Start redis docker containers
become: yes
docker_container:
name: redis
image: redis:7
pull: true
state: started
command: /usr/local/etc/redis/redis_server.conf
container_default_behavior: no_defaults
hostname: "{{ inventory_hostname }}"
networks_cli_compatible: yes
# network_mode: host
network_mode: default
networks:
- name: newsblurnet
aliases:
- redis
ports:
- 6379:6379
restart_policy: unless-stopped
user: 1000:1001
volumes:
- /srv/newsblur/docker/volumes/redis:/data
- /srv/newsblur/docker/redis/redis.conf:/usr/local/etc/redis/redis_server.conf
- /srv/newsblur/docker/redis/redis_replica.conf:/usr/local/etc/redis/redis_replica.conf
- name: Register redis in consul
become: yes
template:
src: consul_service.json
dest: /etc/consul.d/redis.json
notify:
- reload consul
tags: consul
- name: Add sanity checkers cronjob for disk usage
become: yes
cron:
name: disk_usage_sanity_checker
user: root
cron_file: /etc/cron.hourly/disk_usage_sanity_checker
job: >-
docker pull newsblur/newsblur_python3:latest;
OUTPUT=$(eval sudo df / | head -n 2 | tail -1);
docker run --rm -it
-v /srv/newsblur:/srv/newsblur
-h `cat /etc/hostname`
--network=newsblurnet --hostname {{ ansible_hostname }}
newsblur/newsblur_python3 /srv/newsblur/utils/monitor_disk_usage.py $OUTPUT
tags:
- sanity-checker
- name: Add sanity checkers cronjob for redis bg_save
become: yes
cron:
name: redis_bg_save_sanity_checker
user: root
cron_file: /etc/cron.hourly/redis_bg_save_sanity_checker
job: >-
docker pull newsblur/newsblur_python3:latest;
REDIS_LOG_PATH=$(eval docker inspect --format="{{ '{{' }}.LogPath {{ '}}' }}" redis)
docker run --rm -it
-v ${REDIS_LOG_PATH}:${REDIS_LOG_PATH}
-v /srv/newsblur:/srv/newsblur
-h `cat /etc/hostname`
--network=newsblurnet
newsblur/newsblur_python3 /srv/newsblur/utils/monitor_redis_bgsave.py $REDIS_LOG_PATH
when: "'redis' in inventory_hostname"
tags:
- sanity-checker
- name: Add redis backup
cron:
name: "{{ ansible_hostname }} backup"
minute: "0"
hour: "4"
job: >
docker run --rm
-v /srv/newsblur:/srv/newsblur
-v /srv/newsblur/docker/volumes/redis/dump.rdb:/data/dump.rdb
--network=newsblurnet
--hostname={{ ansible_hostname }}
newsblur/newsblur_python3 python /srv/newsblur/utils/backups/backup_redis.py