Шаблон jinja2 для конфига Redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Main part bind 0.0.0.0 {% if inventory_hostname == "redis_master" %} port 6379 requirepass {{ redis_password }} masterauth {{ redis_password }} protected-mode yes tcp-keepalive 0 maxmemory 2gb maxmemory-policy volatile-lru dir {{ redis_dir }} {% else %} port 6379 requirepass {{ redis_password }} masterauth {{ redis_password }} protected-mode yes slaveof {{ hostvars['redis_master'].ansible_host }} 6379 tcp-keepalive 0 maxmemory 2gb maxmemory-policy volatile-lru dir {{ redis_dir }} {% endif %} |
Основные параметры конфигурации
1. bind 0.0.0.0
- Описание: Redis будет привязан ко всем сетевым интерфейсам, доступным на машине. Это позволяет принимать запросы от любых клиентов, подключающихся по IP.
- Назначение: Открытие Redis для внешних соединений, а не только для локальных (если вы хотите ограничить доступ, можно заменить на конкретный IP).
2. Условное разделение на мастер и реплику
- С помощью условного оператора Jinja2
if
, шаблон определяет, является ли текущий узел мастером (inventory_hostname == "redis_master"
) или репликой. inventory_hostname
— это переменная Ansible, которая указывает на имя текущего узла, с которым Ansible работает.- В зависимости от того, является ли узел мастером или репликой, настраиваются соответствующие параметры.
Конфигурация для мастер-узла Redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{% if inventory_hostname == "redis_master" %} port 6379 requirepass {{ redis_password }} masterauth {{ redis_password }} protected-mode yes tcp-keepalive 0 maxmemory 2gb maxmemory-policy volatile-lru dir {{ redis_dir }} {% else %} |
- port 6379
- Redis будет слушать стандартный порт 6379 для подключения клиентов.
- requirepass {{ redis_password }}
- Описание: Пароль для подключения к Redis, который необходимо указать для аутентификации пользователей.
- Значение переменной:
redis_password
передается из Ansible и задает пароль для подключения к Redis.
- masterauth {{ redis_password }}
- Используется для репликации, чтобы реплики могли аутентифицироваться на мастере.
- protected-mode yes
- Включает защищенный режим, который предотвращает небезопасное использование Redis без надлежащей конфигурации (например, не разрешает подключение без пароля).
- tcp-keepalive 0
- Управляет частотой отправки keepalive пакетов. Значение 0 означает, что этот параметр отключен.
- maxmemory 2gb
- Ограничивает объем используемой памяти Redis на уровне 2 гигабайт.
- maxmemory-policy volatile-lru
- Политика управления памятью. При переполнении памяти Redis будет удалять наименее часто используемые (LRU) ключи с ограниченным временем жизни (TTL).
- dir {{ redis_dir }}
- Указывает директорию для хранения данных Redis. Значение переменной
redis_dir
передается из Ansible.
- Указывает директорию для хранения данных Redis. Значение переменной
Конфигурация для реплики Redis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{% else %} port 6379 requirepass {{ redis_password }} masterauth {{ redis_password }} protected-mode yes slaveof {{ hostvars['redis_master'].ansible_host }} 6379 tcp-keepalive 0 maxmemory 2gb maxmemory-policy volatile-lru dir {{ redis_dir }} {% endif %} |
- port 6379, requirepass, masterauth, protected-mode, tcp-keepalive, maxmemory, maxmemory-policy, dir
- Эти параметры остаются такими же, как и для мастера. Они контролируют порты, аутентификацию и управление памятью для реплик.
- slaveof {{ hostvars[‘redis_master’].ansible_host }} 6379
- slaveof указывает узлу Redis быть репликой мастера.
hostvars['redis_master'].ansible_host
— Ansible-выражение, которое получает IP-адрес или имя хоста мастер-узла Redis из инвентаря. Реплика подключается к мастеру по этому адресу на порту 6379.
Заключение
Этот шаблон конфигурации Redis управляет настройкой кластеров Redis, отличая мастера и реплики с помощью переменной inventory_hostname
. Мастер отвечает за запись данных, а реплики синхронизируют свои данные с мастером, сохраняя высокую доступность кластера. Основные параметры, такие как пароль, максимальный объем памяти и режим LRU, одинаковы для обеих ролей, что обеспечивает консистентность поведения Redis независимо от роли узла.
Recommended Posts
Шаблон jinja2 для конфига redis sentinel
18.02.2024