diff --git a/roles/pvc/handlers/main.yml b/roles/pvc/handlers/main.yml index 834bc0f..75e98ce 100644 --- a/roles/pvc/handlers/main.yml +++ b/roles/pvc/handlers/main.yml @@ -21,6 +21,12 @@ state: restarted ignore_errors: yes +- name: restart keydb + service: + name: keydb-server + state: restarted + ignore_errors: yes + # Restart services one-at-a-time # Ideally, this would be accomplished by a serial=1, but Ansible doesn't support that and # likely never will. Instead, we just run the service restart manually, waiting X seconds diff --git a/roles/pvc/tasks/keydb/main.yml b/roles/pvc/tasks/keydb/main.yml new file mode 100644 index 0000000..d23d27d --- /dev/null +++ b/roles/pvc/tasks/keydb/main.yml @@ -0,0 +1,39 @@ +--- +- name: remove redis packages via apt + apt: + name: + - redis + - redis-server + - redis-tools + state: absent + purge: yes + +- name: install keydb packages via apt + apt: + name: + - keydb + state: latest + update-cache: yes + register: apt_res + retries: 5 + until: apt_res is success + +- name: install keydb configuration file + template: + src: keydb/keydb.conf.j2 + dest: /etc/keydb/keydb.conf + owner: keydb + group: keydb + mode: 0640 + notify: restart keydb + +- name: start but disable services (managed by PVC) + service: + name: "{{ item }}" + state: started + enabled: no + ignore_errors: yes + with_items: + - keydb-server + +- meta: flush_handlers diff --git a/roles/pvc/tasks/main.yml b/roles/pvc/tasks/main.yml index 2c4417d..77017cd 100644 --- a/roles/pvc/tasks/main.yml +++ b/roles/pvc/tasks/main.yml @@ -45,6 +45,10 @@ tags: pvc-patroni when: is_coordinator +- include: keydb/main.yml + tags: pvc-keydb + when: is_coordinator + # Install core services - include: libvirt/main.yml tags: pvc-libvirt diff --git a/roles/pvc/templates/keydb/keydb.conf.j2 b/roles/pvc/templates/keydb/keydb.conf.j2 new file mode 100644 index 0000000..fe92026 --- /dev/null +++ b/roles/pvc/templates/keydb/keydb.conf.j2 @@ -0,0 +1,79 @@ +bind 0.0.0.0 +protected-mode no +port 6379 +tcp-backlog 511 +timeout 0 +tcp-keepalive 300 +daemonize yes +pidfile /var/run/keydb/keydb-server.pid +loglevel notice +logfile /var/log/keydb/keydb-server.log +databases 16 +always-show-logo yes +set-proc-title yes +proc-title-template "{title} {listen-addr} {server-mode}" +save 5 1 +stop-writes-on-bgsave-error yes +rdbcompression yes +rdbchecksum yes +dbfilename dump.rdb +rdb-del-sync-files no +dir /var/lib/keydb +replica-serve-stale-data yes +replica-read-only yes +repl-diskless-sync no +repl-diskless-sync-delay 5 +repl-diskless-load disabled +repl-disable-tcp-nodelay no +replica-priority 100 +acllog-max-len 128 +lazyfree-lazy-eviction no +lazyfree-lazy-expire no +lazyfree-lazy-server-del no +replica-lazy-flush no +lazyfree-lazy-user-del no +lazyfree-lazy-user-flush no +oom-score-adj no +oom-score-adj-values 0 200 800 +disable-thp yes +appendonly no +appendfilename "appendonly.aof" +appendfsync everysec +no-appendfsync-on-rewrite no +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb +aof-load-truncated yes +aof-use-rdb-preamble yes +lua-time-limit 5000 +slowlog-log-slower-than 10000 +slowlog-max-len 128 +latency-monitor-threshold 0 +notify-keyspace-events "" +hash-max-ziplist-entries 512 +hash-max-ziplist-value 64 +list-max-ziplist-size -2 +list-compress-depth 0 +set-max-intset-entries 512 +zset-max-ziplist-entries 128 +zset-max-ziplist-value 64 +hll-sparse-max-bytes 3000 +stream-node-max-bytes 4096 +stream-node-max-entries 100 +activerehashing yes +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit replica 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 +hz 10 +dynamic-hz yes +aof-rewrite-incremental-fsync yes +rdb-save-incremental-fsync yes +jemalloc-bg-thread yes +server-threads 2 +replica-weighting-factor 2 + +# Enable multi-master replication +multi-master yes +active-replica yes +{% for node in pvc_nodes if node.is_coordinator and node.hostname != ansible_hostname %} +replicaof {{ node.cluster_ip }} 6379 +{% endfor %}