cassandra

ansible-role-cassandra

Gitter CI

Роль Ansible для установки и настройки Apache Cassandra.

Требования

Определение семейства ОС

В плейбуке Ansible должно быть собрано достаточно данных, чтобы переменная ansible_os_family была установлена.

Модули Python

На системах Debian, где параметр cassandra_configure_apache_repo установлен в True, необходимо использовать модуль apt_repository. Поэтому следующие требования должны быть выполнены на хосте, который выполняет этот модуль.

  • python-apt (python 2)
  • python3-apt (python 3)

Переменные роли

  • cassandra_15770_workaround: (по умолчанию: False)
    CASSANDRA-15770
    затрагивает Debian 10 и Ubuntu 20.04, было исправлено в версиях 3.0.21, 3.11.7, 4.0. Так как мы тестируем на 3.11.6 в данный момент, это применяет исправление к /etc/init.d/cassandra, если установлено в True.

  • cassandra_2356_workaround: (по умолчанию: False)
    CASSANDRA-2356
    затрагивает пакеты deb для Cassandra версий до 4.0.

  • cassandra_cms_heap_new_size_mb:
    Пользовательский факт, который возвращает значение (MB), которое может быть подходящим для установки HEAP_NEWSIZE при использовании сборщика Concurrent Mark Sweep (CMS). Подробности см. в Настройка ресурсов Java. Требует установки фактов cassandra_memtotal_mb и cassandra_processor_vcpus.

  • cassandra_cms_max_heapsize_mb:
    Пользовательский факт, который возвращает значение (MB), которое может быть подходящим для установки MAX_HEAP_SIZE при использовании сборщика Concurrent Mark Sweep (CMS). Подробности см. в Настройка ресурсов Java. Требует установки факта cassandra_memtotal_mb.

  • cassandra_configuration (по умолчанию: нет):
    Конфигурация для Cassandra. См. пример плейбука ниже.

  • cassandra_configuration_directory (по умолчанию:
    /etc/cassandra/default.conf на RedHat и
    /etc/cassandra в Debian):
    Директория конфигурации Cassandra.

  • cassandra_configuration_file (по умолчанию:
    /etc/cassandra/default.conf/cassandra.yaml на RedHat и
    /etc/cassandra/cassandra.yaml на Debian):
    Местоположение файла конфигурации Cassandra.

  • cassandra_configuration_templ (по умолчанию: cassandra.yaml.j2):
    Имя файла шаблона для конфигурации Cassandra.

  • cassandra_configure_apache_repo (по умолчанию: False):
    Установить, нужно ли настраивать репозиторий Apache Cassandra.

    СМОТРИ ТАКЖЕ: cassandra_repo_apache_release.

  • cassandra_dc:
    Если определено, установит дата-центр в cassandra-rackdc.properties.
    Этот параметр устарел и будет удален в будущих версиях. Пожалуйста, используйте cassandra_regex_replacements вместо этого.

  • cassandra_directories:
    Если определено, создаст директории после установки пакета (когда пользователь cassandra будет доступен) но перед настройкой Cassandra. См. пример плейбука для получения дополнительных деталей.

    Обратите внимание, что при использовании с параметром cassandra_join_cluster пути, указанные здесь, будут удалены (с содержимым) и воссозданы, чтобы узел мог правильно присоединиться к кластеру.

  • cassandra_heap_new_size_mb:
    Пользовательский факт, который возвращает значение (MB), которое может быть подходящим для установки HEAP_NEWSIZE. См. Настройка ресурсов Java для более подробной информации. Требует установки фактов cassandra_memtotal_mb и cassandra_processor_vcpus.

  • cassandra_install_packages (по умолчанию: True):
    Логическое значение, указывающее, должна ли эта роль Ansible пытаться установить пакеты или нет. Если установлено в False, это позволяет пользователю использовать эту роль для настройки Cassandra, но не пытается ее установить (например, если они установили из исходного кода).

  • cassandra_join_cluster (по умолчанию: False):
    Это экспериментальная функция, используйте с крайней осторожностью! Если установлено в true и cassandra_node_count равно 1 на узле, на этом узле будут выполнены следующие действия перед его настройкой:

    • Cassandra будет остановлена
    • Директория/директории данных Cassandra будут очищены от всех данных.

    После этого узел будет перенастроен и присоединится к кластеру (который должен быть больше, чем один узел).

  • cassandra_max_heapsize_mb:
    Пользовательский факт, который возвращает значение (MB), которое может быть подходящим для установки MAX_HEAP_SIZE. См. Настройка ресурсов Java для получения дополнительной информации. Требует установки факта cassandra_memtotal_mb.

  • cassandra_memtotal_mb (по умолчанию: ansible_memtotal_mb, если задан):
    Используется для расчета cassandra_cms_max_heapsize_mb, cassandra_max_heapsize_mb, cassandra_cms_heap_new_size_mb и cassandra_heap_new_size_mb.

  • cassandra_path:
    Эта переменная была введена в версии 1.4.0, но не была задокументирована. Как указано, если переменная определена, когда переменная установлена и директория удалена, она не будет воссоздана. Эта переменная теперь устарела в пользу cassandra_directories.

  • cassandra_node_count:
    Переменная только для чтения, которая пытается содержать количество узлов в кластере. Установится только в случае, если cassandra_join_cluster установлено в True.

  • cassandra_package (по умолчанию: cassandra):
    Имя пакета, который будет установлен для предоставления Cassandra.

  • cassandra_processor_vcpus (по умолчанию: ansible_processor_vcpus, если установлен):
    Используется для расчета cassandra_cms_heap_new_size_mb и cassandra_heap_new_size_mb.

  • cassandra_rack:
    Если определено, установит стойку в cassandra-rackdc.properties.
    Этот параметр устарел и будет удален в будущих версиях. Пожалуйста, используйте cassandra_regex_replacements вместо этого.

  • cassandra_regex_replacements (по умолчанию: []):
    Список хешей, описывающих path, который относителен к cassandra_configuration_directory, regexp, который является регулярным выражением для поиска в файле, и line является заменой внутри файла. См. пример плейбука для получения более подробной информации.

  • cassandra_repo_apache_release (по умолчанию: Нет):
    Имя серии релиза (может быть одним из 40x, 311x или 30x). Это должно быть установлено, если cassandra_configure_apache_repo установлено в True.

  • cassandra_service_enabled (по умолчанию: yes):
    Должен ли быть включен сервис Cassandra (может быть yes или no).

  • cassandra_service_restart (по умолчанию: True):
    Если установлено в true, изменения в файле конфигурации Cassandra или в директориях данных обеспечат обновление сервиса Cassandra после изменений. Установка этого флага в false отключит это поведение, позволив изменениям быть внесенными, но дав пользователю контроль над тем, когда сервис будет перезапущен.

  • cassandra_systemd_enabled (по умолчанию: False):
    Должен ли сервис Cassandra быть включен через systemd; если установлено в True, то в cassandra_systemd_path будет размещен файл юнита, созданный из шаблона cassandra_systemd_template.

  • cassandra_systemd_path (по умолчанию: /usr/lib/systemd/system/cassandra.service):
    Путь к файлу юнита для Cassandra. Эта переменная игнорируется, если cassandra_systemd_enabled установлено в False.

  • cassandra_systemd_template (по умолчанию:
    "systemd/system/cassandra.service.j2"):
    Путь к шаблону, из которого будет создан файл юнита для Cassandra. Эта переменная игнорируется, если cassandra_systemd_enabled установлено в False.

  • cassandra_task_delay (по умолчанию: 10):
    Задания Ansible, зависящие от сетевого соединения (т.е. apt, apt_key, apt_repository, package и yum), могут страдать от высокой задержки, поэтому эти задания настроены на повторение. Этот параметр определяет, как долго ждать между попытками. См. также cassandra_task_retries.

  • cassandra_task_retries (по умолчанию: 5):
    Задания Ansible, зависящие от сетевого соединения (т.е. apt, apt_key, apt_repository, package и yum), могут страдать от высокой задержки, поэтому эти задания настроены на повторение. Этот параметр определяет, сколько попыток будет сделано. См. также cassandra_task_delay.

Пример плейбука

Этот плейбук должен быть достаточен для настройки Cassandra с очень базовой конфигурацией:

---
- name: Пример плейбука для роли locp.cassandra

  hosts: cassandra

  remote_user: root

  vars:
    cassandra_configuration:
      authenticator: PasswordAuthenticator
      cluster_name: MyCassandraCluster
      commitlog_directory: /data/cassandra/commitlog
      commitlog_sync: periodic
      commitlog_sync_period_in_ms: 10000
      data_file_directories:
        - /data/cassandra/data
      endpoint_snitch: GossipingPropertyFileSnitch
      hints_directory: "/data/cassandra/hints"
      listen_address: "{{ ansible_default_ipv4.address }}"
      # Для разумного значения num_tokens смотрите
      # https://cassandra.apache.org/doc/latest/getting_started/production.html#tokens
      num_tokens: 4
      partitioner: org.apache.cassandra.dht.Murmur3Partitioner
      saved_caches_directory: /data/cassandra/saved_caches
      seed_provider:
        - class_name: "org.apache.cassandra.locator.SimpleSeedProvider"
          parameters:
            # Это устанавливает начальные узлы на первый узел в группе Ansible под названием
            # cassandra.
            - seeds: "{{ hostvars[groups['cassandra'][0]]['ansible_default_ipv4'].address }}"
      start_native_transport: true
    cassandra_configure_apache_repo: true
    # Создать альтернативную структуру директорий для данных Cassandra.
    # В этом примере будет директория, называемая /data, принадлежащая root
    # с правами rwxr-xr-x. У нее будет ряд подпапок,
    # все из которых будут по умолчанию принадлежать пользователю cassandra
    # с правами rwx------.
    cassandra_directories:
      root:
        group: root
        mode: "0755"
        owner: root
        paths:
          - /data
      data:
        paths:
          - /data/cassandra
          - /data/cassandra/commitlog
          - /data/cassandra/data
          - /data/cassandra/hints
          - /data/cassandra/saved_caches
    cassandra_regex_replacements:
      - path: cassandra-env.sh
        line: 'MAX_HEAP_SIZE="{{ cassandra_max_heapsize_mb }}M"'
        regexp: '^#MAX_HEAP_SIZE="4G"'
      - path: cassandra-env.sh
        line: 'HEAP_NEWSIZE="{{ cassandra_heap_new_size_mb }}M"'
        regexp: '^#HEAP_NEWSIZE="800M"'
      - path: cassandra-rackdc.properties
        line: 'dc=DC1'
        regexp: '^dc='
      - path: cassandra-rackdc.properties
        line: 'rack=RACK1'
        regexp: '^rack='
    cassandra_repo_apache_release: 40x

  roles:
    - role: locp.cassandra

Чтобы увидеть плейбуки, которые используются для тестирования, см.
molecule/default/converge.yml и
molecule/combine_cluster/converge.yml.

Лицензия

GPLv3

Информация об авторе

Разработано
Лигой Креативных Программистов Ltd.

Чтобы сообщить о проблемах или внести вклад, пожалуйста, перейдите по ссылке
https://github.com/locp/ansible-role-cassandra/issues

О проекте

Ansible role to install Apache Cassandra.

Установить
ansible-galaxy install locp/ansible-role-cassandra
Лицензия
lgpl-3.0
Загрузки
22480