А АFriday 13 November 2020

Ускоряем Ansible #3.

Всем привет.

Ну что, продолжим разгон?

#3 Кэширование фактов.

Если в вашем сценарии не используются факты, их сбор можно отключить с помощью выражения gather_facts. Например:

- name: an example play that doesn't need facts 

  hosts: myhosts

  gather_facts: False 

  tasks:

# здесь находятся сами задачи

Также можно отключить сбор фактов по умолчанию, добавив в файл ansible.cfg:

[defaults]

gathering = explicit

Если ваши операции используют факты, их сбор можно организовать так, что Ansible будет делать это для каждого хоста только однажды, даже если вы запустите этот же или другой сценарий для того же самого хоста. Если кэширование фактов включено, Ansible сохранит факты в кэше, полученные после первого подключения к хостам. В последующих попытках выполнить сценарий Ansible будет извлекать факты из кэша, не обращаясь к удаленным хостам. Такое положение вещей сохраняется до истечения времени хранения кэша.

В примере 7 приводятся строки, которые необходимо добавить в файл ansible.cfg для включения кэширования фактов. Значение fact_caching_tineout выражается в секундах, в примере используется тайм-аут, равный 24 часам (86 400 секундам). Как это всегда бывает с решениями, использующими кэширование, существует опасность, что кэшированные данные станут неактуальными. Некоторые факты, такие как архитектура CPU (факт ansible_architecture), редко изменяются. Другие, такие как дата и время, сообщаемые машиной (факт ansible_date_tine), гарантированно изменяются очень часто. Если вы решили включить кэширование фактов, убедитесь, что знаете, как часто изменяются факты, используемые вашим сценарием, и задайте соответствующее значение тайм-аута кэширования. Чтобы очистить кэш до запуска сценария, передайте параметр --flush-cache утилите ansible-playbook.

Пример 7 ansible.cfg: включение кэширования фактов

[defaults] 

gathering = smart

# кэш остается действительным 24 часа, измените, если необходимо 

fact_caching_timeout = 86400

# oбязательно укажите реализацию кэширования фактов 

fact.cachlng = ...

Значение smart в параметре gathering сообщает, что необходимо использовать интеллектуальный сбор фактов (smart gathering). То есть Ansible будет собирать факты, только если они отсутствуют в кэше или срок хранения кэша истек. Если вы собираетесь использовать кэширование фактов, убедитесь, что в сценариях отсутствует выражение gather_facts: True или gather_facts: False. Когда включен режим интеллектуального сбора фактов, факты будут собираться, только если они отсутствуют в кэше. Необходимо явно указать тип fact_caching в ansible.cfg, иначе кэширование не будет использоваться. 

Известны три реализации кэширования данных:

- JSON;

- Redis;

- Memcached.


1) Кэширование фактов в JSON

Реализация кэширования фактов в файлах JSON записывает собранные факты в файлы на управляющей машине. Если файлы присутствуют в вашей системе, Ansible будет использовать их вместо соединений с хостами. Чтобы задействовать реализацию кэширования фактов в файлах JSON, добавьте в файл ansible.cfg настройки, как показано в примере 8.

Пример 8 ansible.cfg, включение кэширования фактов в файлах JSON

[defaults] 

gathering = smart

# кэш остается действительным 24 часа, измените, если необходимо 

fact_caching_timeout = 86400

# кэшировать в файлах JS0N 

fact_caching = jsonfile

fact_caching_connection = /tmp/ansible_fact_cache

Параметр fact_caching_connection определяет каталог, куда Ansible будет сохранять файлы JSON с фактами. Если каталог отсутствует, Ansible создаст его. Для определения тайм-аута кэширования Ansible использует время модификации файла.

2) Кэширование фактов в Redis

Redis - популярное хранилище данных типа «ключ/значение», часто используемое в качестве кэша. Для кэширования фактов в Redis необходимо:

1.Установить Redis на управляющей машине.

2.Убедиться, что служба Redis запущена на управляющей машине.

3.Установить пакет Redis для Python.

4.Включить кэширование в Redis в файле ansible.cfg.

В примере 9 показано, какие настройки следует добавить в ansible.cfg чтобы организовать кэширование в Redis.

Пример 9 ansible.cfg, кэширование фактов в Redis

[defaults] 

gathering = smart

# кэш остается действительным 24 часа, измените, если необходимо 

fact_caching_timeout = 86400

fact_caching = redis


Для работы с хранилищем Redis требуется установить пакет Redis для Python на управляющей машине, например с помощью pip:

$ pip install redis

Вы должны установить программное обеспечение Redis и запустить его на управляющей машине. В OS X Redis можно установить с помощью диспетчера пакетов Homebrew. В Linux это можно сделать с помощью системного диспетчера пакетов.


3) Кэширование фактов в Memcached

Memcached - еще одно популярное хранилище данных типа «ключ/значение», которое также часто используется в качестве кэша. Для кэширования фактов в Memcached необходимо:

1. Установить Memcached на управляющей машине.

2. Убедиться, что служба Memcached запущена на управляющей машине.

3. Установить пакет Memcached для Python.

4. Включить кэширование в Memcached в файле ansible.cfg.

В примере 10 показано, какие настройки следует добавить в ansible.cfg, чтобы организовать кэширование в Memcached.

Пример 10 ansible.cfg, кэширование фактов в Memcached

[defaults] gathering = smart

# кэш остается действительным 24 часа, измените, если необходимо 

fact_caching_tlmeout = 86400

fact_caching = memcached

Для работы с хранилищем Memcached требуется установить пакет Memcached для Python на управляющей машине, например с помощью pip. Может потребоваться выполнить команду sudo или активировать virtualenv, в зависимости от способа установки Ansible на управляющей машине.

$ pip install python-memcached

Вы должны установить программное обеспечение Memcached и запустить его на управляющей машине.

Завтра планирую оформить финальную часть гонки.

No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное