locp.cassandra

rola-ansible-cassandra

Gitter CI

Rola Ansible do instalacji i konfiguracji Apache Cassandra.

Wymagania

Identyfikacja rodziny systemu operacyjnego

Skrypt Ansible musi zebrać wystarczająco dużo informacji, aby zmienna ansible_os_family była ustawiona.

Moduły Python

Na systemach Debian, które mają ustawioną zmienną cassandra_configure_apache_repo na True, proszę pamiętać, że używany jest moduł apt_repository. W związku z tym poniższe wymagania są potrzebne na hoście, który wykonuje ten moduł.

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

Zmienne roli

  • cassandra_15770_workaround: (domyślnie: False) CASSANDRA-15770 dotknęło Debiana 10 i Ubuntu 20.04, a następnie naprawiono to w wersjach 3.0.21, 3.11.7, 4.0. Obecnie, testując wersję 3.11.6, ta poprawka jest stosowana do /etc/init.d/cassandra, jeśli jest ustawiona na True.

  • cassandra_2356_workaround: (domyślnie: False) CASSANDRA-2356 dotyczyło pakietów deb dla wersji Cassandra przed 4.0.

  • cassandra_cms_heap_new_size_mb: Własny fakt, który zwraca wartość (MB), która może być odpowiednia do ustawienia HEAP_NEWSIZE przy użyciu kolektora Concurrent Mark Sweep (CMS). Zobacz Dostosowywanie zasobów Java po więcej szczegółów. Wymaga, aby były ustawione fakty cassandra_memtotal_mb i cassandra_processor_vcpus.

  • cassandra_cms_max_heapsize_mb: Własny fakt, który zwraca wartość (MB), która może być odpowiednia do ustawienia MAX_HEAP_SIZE przy użyciu kolektora Concurrent Mark Sweep (CMS). Zobacz Dostosowywanie zasobów Java po więcej szczegółów. Wymaga, aby był ustawiony fakt cassandra_memtotal_mb.

  • cassandra_configuration (domyślnie: żadne): Konfiguracja dla Cassandry. Zobacz przykład poniżej.

  • cassandra_configuration_directory (domyślnie: /etc/cassandra/default.conf na RedHat i /etc/cassandra w Debian): Katalog konfiguracji Cassandry.

  • cassandra_configuration_file (domyślnie: /etc/cassandra/default.conf/cassandra.yaml na RedHat i /etc/cassandra/cassandra.yaml w Debian): Lokalizacja pliku konfiguracyjnego Cassandry.

  • cassandra_configuration_templ (domyślnie: cassandra.yaml.j2): Nazwa pliku szablonu dla konfiguracji Cassandry.

  • cassandra_configure_apache_repo (domyślnie: False): Czy skonfigurować repozytorium Apache Cassandra.

    PATRZ RÓWNIEŻ: cassandra_repo_apache_release.

  • cassandra_dc: Jeśli zdefiniowane, ustawi Datacenter w cassandra-rackdc.properties.

    Ta opcja jest przestarzała i zostanie usunięta w przyszłej wersji. Proszę używać zamiast tego cassandra_regex_replacements.

  • cassandra_directories: Jeśli zdefiniowane, utworzy katalogi po zainstalowaniu pakietu (w związku z tym, gdy użytkownik cassandra jest dostępny) przed skonfigurowaniem Cassandry. Zobacz przykład poniżej dla więcej szczegółów.

    Proszę pamiętać, że przy użyciu opcji cassandra_join_cluster, ścieżki określone tutaj zostaną usunięte (ze wszystkimi swoimi zawartościami) i ponownie utworzone, aby węzeł mógł prawidłowo dołączyć do klastra.

  • cassandra_heap_new_size_mb: Własny fakt, który zwraca wartość (MB), która może być odpowiednia do ustawienia HEAP_NEWSIZE. Zobacz Dostosowywanie zasobów Java po więcej szczegółów. Wymaga, aby były ustawione fakty cassandra_memtotal_mb i cassandra_processor_vcpus.

  • cassandra_install_packages (domyślnie: True): Wartość logiczna wskazująca, czy ta rola Ansible powinna próbować zainstalować pakiety, czy nie. Jeśli ustawiona na False, pozwala użytkownikowi użyć tej roli do skonfigurowania Cassandry, ale nie próbuje jej zainstalować (np. jeśli została zainstalowana z kodu źródłowego).

  • cassandra_join_cluster (domyślnie: False): To eksperymentalna funkcja, używaj z najwyższą ostrożnością! Jeśli ustawiona na true i cassandra_node_count jest wykryty jako 1 na węźle, następujące akcje zostaną podjęte na tym węźle przed jego skonfigurowaniem:

    • Cassandra zostanie zatrzymana
    • Katalogi danych Cassandry zostaną oczyszczone z wszystkich danych.

    Po wykonaniu tych operacji węzeł zostanie ponownie skonfigurowany i dołączy do klastra (który powinien być większy niż jeden węzeł).

  • cassandra_max_heapsize_mb: Własny fakt, który zwraca wartość (MB), która może być odpowiednia do ustawienia MAX_HEAP_SIZE. Zobacz Dostosowywanie zasobów Java po więcej szczegółów. Wymaga, aby był ustawiony fakt cassandra_memtotal_mb.

  • cassandra_memtotal_mb (domyślnie: ansible_memtotal_mb, jeśli ustawione): Jest używane do obliczenia cassandra_cms_max_heapsize_mb, cassandra_max_heapsize_mb, cassandra_cms_heap_new_size_mb i cassandra_heap_new_size_mb.

  • cassandra_path Ta zmienna została wprowadzona w wersji 1.4.0, ale nie została udokumentowana. Jak zauważono tutaj, jeśli zmienna jest zdefiniowana, a katalog zostanie usunięty, nie jest ponownie tworzona. Zmienna ta została teraz uznana za przestarzałą na rzecz cassandra_directories.

  • cassandra_node_count: Zmienna tylko do odczytu, która próbuje przechowywać liczbę węzłów w klastrze. Zostanie ustawiona tylko, jeśli cassandra_join_cluster jest ustawione na True.

  • cassandra_package (domyślnie: cassandra): Nazwa pakietu do zainstalowania, aby zapewnić Cassandrę.

  • cassandra_processor_vcpus (domyślnie: ansible_processor_vcpus, jeśli ustawione): Jest używane do obliczenia cassandra_cms_heap_new_size_mb i cassandra_heap_new_size_mb.

  • cassandra_rack: Jeśli zdefiniowane, ustawi rack w cassandra-rackdc.properties.

    Ta opcja jest przestarzała i zostanie usunięta w przyszłej wersji. Proszę używać zamiast tego cassandra_regex_replacements.

  • cassandra_regex_replacements (domyślnie: []): Lista hashy opisujących path, który jest względny do cassandra_configuration_directory, regexp, który jest wyrażeniem regularnym do znalezienia w pliku i line, to zastąpienie w pliku. Zobacz przykład poniżej dla więcej szczegółów.

  • cassandra_repo_apache_release (domyślnie: None): Nazwa serii wydań (może być jedną z 40x, 311x lub 30x). Musi być ustawiona, jeśli cassandra_configure_apache_repo jest ustawione na True.

  • cassandra_service_enabled (domyślnie: tak): Czy usługa cassandra powinna być włączona (może być 'tak' lub 'nie').

  • cassandra_service_restart (domyślnie: True): Jeśli ustawione na true, zmiany w pliku konfiguracyjnym Cassandry lub katalogach danych zapewnią odświeżenie usługi Cassandry po zmianach. Ustawienie tego flagi na false wyłączy to działanie, pozwalając użytkownikowi kontrolować, kiedy usługa jest restartowana.

  • cassandra_systemd_enabled (domyślnie: False): Czy usługa Cassandra powinna być włączona przez systemd jeśli ustawione na True, wtedy plik jednostki zostanie umieszczony w cassandra_systemd_path stworzony z szablonu cassandra_systemd_template.

  • cassandra_systemd_path (domyślnie: /usr/lib/systemd/system/cassandra.service): Ścieżka do pliku jednostki dla Cassandry. Ta zmienna jest ignorowana, jeśli cassandra_systemd_enabled jest False.

  • cassandra_systemd_template (domyślnie: "systemd/system/cassandra.service.j2"): Ścieżka do szablonu, z którego można stworzyć plik jednostki dla Cassandry. Ta zmienna jest ignorowana, jeśli cassandra_systemd_enabled jest False.

  • cassandra_task_delay (domyślnie: 10): Zadania Ansible, które zależą od łączności sieciowej (tj. apt, apt_key, apt_repository, package i yum) mogą być dotknięte wysoką latencją, dlatego te zadania są skonfigurowane do ponownego próbowania. Ten parametr definiuje, ile czekać między próbami. Zobacz także cassandra_task_retries.

  • cassandra_task_retries (domyślnie: 5): Zadania Ansible, które zależą od łączności sieciowej (tj. apt, apt_key, apt_repository, package i yum) mogą być dotknięte wysoką latencją, dlatego te zadania są skonfigurowane do ponownego próbowania. Ten parametr definiuje, ile prób powinno być podjętych. Zobacz także cassandra_task_delay.

Przykładowy Playbook

Ten playbook powinien być wystarczający do skonfigurowania Cassandry z bardzo podstawową konfiguracją:

---
- name: Przykładowy Playbook dla roli 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 }}"
      # Aby uzyskać sensowną wartość do ustawienia num_tokens, proszę zobaczyć
      # 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:
            # To ustawia nasienie na pierwszy węzeł w grupie Ansible
            # cassandra.
            - seeds: "{{ hostvars[groups['cassandra'][0]]['ansible_default_ipv4'].address }}"
      start_native_transport: true
    cassandra_configure_apache_repo: true
    # Tworzy alternatywną strukturę katalogów dla danych Cassandry. 
    # W tym przykładzie powstanie katalog o nazwie /data, który będzie należał do użytkownika root
    # z uprawnieniami rwxr-xr-x. Będzie miał szereg podkatalogów,
    # których właścicielem będzie użytkownik cassandra
    # z uprawnieniami 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

Aby zobaczyć playbooki, które są używane do testowania, zobacz molecule/default/converge.yml i molecule/combine_cluster/converge.yml.

Licencja

GPLv3

Informacje o autorze

Opracowane przez League of Crafty Programmers Ltd.

Aby zgłaszać problemy lub wnieść wkład, proszę odwiedzić https://github.com/locp/ansible-role-cassandra/issues

Zainstaluj
ansible-galaxy install locp.cassandra
Licencja
lgpl-3.0
Pobrania
22.9k