javigs82.clickhouse

Ansible Clickhouse

Ta rola odpowiada za konfigurowanie i instalowanie klastra Clickhouse z N shardami i M replikami. apt i yum przetestowane na Vagrancie.

Klastr jest zbudowany na podstawie grup inwentarza Ansible, znanych jako wzorce inwentarza, dlatego poniższe grupy są obowiązkowe do uruchomienia klastra:

  • clickhouse: zawiera wszystkie hosty inwentarza Clickhouse. Te hosty muszą mieć ustawione nazwy hostów w formacie: ch01-shard01-replica01 zgodnie z wyrażeniem regularnym: ^ch\\d{2}-shard\\d{2}-replica\\d{2}
  • zookeeper: zawiera wszystkie hosty inwentarza Zookeepera.

Sprawdź defaults, aby zobaczyć, jak obliczane są shard i repliki na podstawie nazw hostów:

Uwaga: {{ inventory_hostname }} to adres DNS lub IP, a {{ ansible_hostname }} to nazwa hosta maszyny.

Aby sprawdzić, czy nazwa hosta ({{ ansible_hostname}}) jest poprawnie ustawiona, użyj na hoście następującej komendy:

hostname

Wymagania

Aby zainstalować molecule, użyj python3.

python3 -m pip install --user "molecule"
python3 -m pip install --user "molecule-vagrant"

To rozwiązanie opiera się na zdolności do rozwiązywania nazw hostów w prywatnym serwerze DNS. Zakładając, że Vagrant nie oferuje żadnego rozwiązania DNS, poniższe oprogramowanie jest zainstalowane w prepare.yml, zapewniając infrastrukturze Vagrant wewnętrzny resolver DNS.

---
- name: Przygotowanie
  hosts: all
  tasks:
    - name: Zainstaluj epel-release
      yum:
        name: epel-release
        state: present
  
    - name: Zainstaluj nss-mdns
      yum:
        name: nss-mdns
        state: present

    - name: Zatrzymaj usługę cron w debianie, jeśli działa
      systemd:
        name: avahi-daemon
        state: started

Dzięki nss-mdns i avahi, Vagrant jest w stanie rozwiązywać DNS jak .local

Uwaga: Rozwiązywanie DNS powinno być bardziej zaawansowane w rzeczywistych przypadkach użycia.

Aby poprawnie skonfigurować nazwę hosta, sprawdź poniższy link:

https://www.vagrantup.com/docs/networking/basic_usage#setting-hostname

Architektura

Clickhouse-cluster jest zbudowany w oparciu o nazwę hosta, dlatego upewnij się, że nazwa hosta jest poprawnie ustawiona jak

^ch\\d{2}-shard\\d{2}-replica\\d{2}

gdzie chX-shardY-replicaZ jest kluczem do łatwego odkrywania, która replika należy do jakiego sharda na podstawie wyrażenia regularnego.

Uwaga: ansible_hostname nie jest tym samym co inventory_hostname:

  • ansible_hostname: To nazwa w systemie operacyjnym: wykonaj hostname na maszynie hosta.
  • inventory_hostname: To adres URL (IP lub DNS) hosta, który musi być rozwiązywany przez inne repliki klastra. Adres IP lub DNS są obie ważne.

{{ ansible_hostname }} będzie używane do odkrywania replik, podczas gdy {{ inventory_hostname}} do umożliwienia komunikacji.

Przykład inwentarza może wyglądać tak:

[clickhouse]
<URL-ch01-shard01-replica01> ansible_host=<ip>
<URL-ch01-shard01-replica02> ansible_host=<ip>
...
<URL-ch01-shard02-replica01> ansible_host=<ip>
<URL-ch01-shard02-replica02> ansible_host=<ip>
...
<URL-chX-shardY-replicaZ> ansible_host=<ip>

[zookeeper]
<URL-zookeeper01> ansible_host=<ip>
...
<URL-zookeeperN> ansible_host=<ip>

Gdzie URL (inventory_hostname) może być IP lub DNS, który będzie rozwiązywany w czasie działania.

Uwaga, aby zbudować klaster, grupa clickhouse i grupa zookeeper są obowiązkowe.

Projekt

  • Pobierz: Z repozytorium RPM Yandex. Downgrade jest dozwolony dzięki właściwości clickhouse_allow_downgrade.
  • Konfiguracja: Zapewnij grupę i użytkownika clickhouse. Zapewnij ścieżki i pliki konfiguracyjne. Odkryj repliki i shard na podstawie wyrażenia regularnego.
  • Instalacja: Pobierz i zainstaluj przez yum.
  • Użytkownicy: Dynamiczna lista do zarządzania użytkownikami. Zarządzanie hasłami nie zostało zaimplementowane.
  • RBAC: DO ZAIMPLEMENTOWANIA.

Domyślne Zmienne Roli

Sprawdź zmienne w defaults.

Definicja Klastra

Użyj tych zmiennych do ustawienia głównej definicji. Zauważ, że konfiguracja klastra opiera się na nazwie hosta i dlatego, clickhouse_replica_name oraz clickhouse_shard_name mają znaczenie, podczas gdy clickhouse_hostname_regex to wyrażenie regularne definicji nazwy hosta: ^ch\\d{2}-(shard\\d{2})-replica\\d{2} Zobacz vars po więcej informacji.

# definicja klastra clickhouse
clickhouse_version: "20.8.7.15"
clickhouse_allow_downgrade: false
clickhouse_cluster_name: "mycluster"

clickhouse_service_name: "clickhouse-server"
clickhouse_service_status: "started"

# użytkownik/grupa
clickhouse_group: "clickhouse"
clickhouse_user: "clickhouse"

Wsparcie Instalacji Clickhouse

# wsparcie yum 
clickhouse_yum_repo: "https://repo.clickhouse.tech/rpm/stable/x86_64/"
clickhouse_yum_repo_key: "https://repo.clickhouse.tech//CLICKHOUSE-KEY.GPG"
clickhouse_yum_package:
  - "clickhouse-client-{{ clickhouse_version }}"
  - "clickhouse-common-static-{{ clickhouse_version }}"
  - "clickhouse-server-{{ clickhouse_version }}"

# wsparcie apt
clickhouse_apt_repo: "deb https://repo.clickhouse.tech/deb/stable/ main/"
clickhouse_apt_repo_keyserver: "keyserver.ubuntu.com"
clickhouse_apt_repo_key: "E0C56BD4"
clickhouse_apt_package:
  - "clickhouse-client={{ clickhouse_version }}"
  - "clickhouse-common-static={{ clickhouse_version }}"
  - "clickhouse-server={{ clickhouse_version }}"

# ścieżki
clickhouse_path_config: "/etc/clickhouse-server"
clickhouse_path_config_d: "{{ clickhouse_path_config }}/config.d"
clickhouse_path_log: "/var/log/clickhouse-server"
clickhouse_path_data: "/var/lib/clickhouse"

Konfiguracja Clickhouse

Dzięki tym zmiennym, main configuration jest skonfigurowana.

clickhouse_config:
  max_connections: 2048
  keep_alive_timeout: 3
  max_concurrent_queries: 100
  uncompressed_cache_size: 8589934592
  mark_cache_size: 5368709120
  builtin_dictionaries_reload_interval: 3600
  max_session_timeout: 3600
  default_session_timeout: 60
  mlock_status: false
  merge_tree_config: []

Sieci

Te zmienne dotyczą konfiguracji sieci.

clickhouse_http_port: 8123
clickhouse_https_port: 8443
clickhouse_tcp_port: 9000
clickhouse_tcp_secure_port: 9440
clickhouse_interserver_http: 9009

# zobacz zmienne dla clickhouse_listen_host_default
clickhouse_listen_host: "{{ clickhouse_listen_host_default + clickhouse_listen_host_custom }}"

Uwaga: clickhouse_listen_host musi umożliwić członkom ch słuchanie.

Użytkownicy

Użyj tych zmiennych, aby dostosować użytkowników. Aby usunąć użytkownika, użyj atrybutów konfiguracyjnych Clickhouse: https://clickhouse.tech/docs/en/operations/configuration-files/

# użytkownicy ch: https://clickhouse.tech/docs/en/operations/configuration-files/
clickhouse_users_list:
  - { user_name: "default",
      profile: "default",
      networks: ["::/1"],
      quota: "default" }

Zookeeper

Lista hostów Zookeepera oparta jest na wzorcu grup inwentarza.

# zookeeper nie jest obligatoryjny. Jeśli zookeeper nie jest zainstalowany, 
# replikacja musi być realizowana po stronie klienta.
clickhouse_zookeeper_list: "{{ groups['zookeeper'] }}"
clickhouse_zookeeper_port: "2181"

Zmienne Roli Vars

Są to zmienne, które mają wyższą rangę niż domyślne zmienne i zmienne grup inwentarza. Mogą być nadpisane tylko przez wyższe priorytety, ale zazwyczaj nie są.

Zauważ, że konfiguracja klastra opiera się na nazwie hosta i dlatego, clickhouse_replica_name oraz clickhouse_shard_name mają znaczenie, podczas gdy clickhouse_hostname_regex to wyrażenie regularne definicji nazwy hosta: ^ch\\d{2}-(shard\\d{2})-replica\\d{2}. Zobacz vars po więcej informacji.

Sprawdź zmienne w vars.

---
# wyrażenie regularne do odkrywania shardów i replik
clickhouse_hostname_regex: "^ch\\d{2}-(shard\\d{2})-(replica\\d{2})"
# odkrywanie na podstawie wyrażenia regularnego 
clickhouse_shard_name: "{{ ansible_hostname | regex_search(clickhouse_hostname_regex, '\\1') | first }}"
clickhouse_replica_name: "{{ ansible_hostname | regex_search(clickhouse_hostname_regex, '\\2') | first }}"

# lista shardów jest obliczana na podstawie listy replik. Muszą spełniać wyrażenie regularne: zobacz clickhouse_hostname_regex w vars/main.yml
clickhouse_shard_list: "{{ clickhouse_replica_list | map('extract', hostvars, 'ansible_hostname') | map('regex_search', clickhouse_hostname_regex, '\\1') | unique | map ('first') }}"
# lista replik to wszystkie hosty grupy
clickhouse_replica_list: "{{ groups['clickhouse'] }}"

clickhouse_listen_host_default:
  - "{{ inventory_hostname }}"
  - "127.0.0.1"
  - "::1"

Nie należy ich NIGDY nadpisywać, ponieważ są podstawą sposobu, w jaki rola odkrywa i łączy repliki z shardami.

Tagowanie Roli

Następujące tagi są obsługiwane w tej roli:

  • ch:configure: W celu wykonania tylko zadań konfiguracyjnych.
  • ch:install: W celu pobrania i zainstalowania oprogramowania.
  • ch:service: W celu zarządzania statusem usługi systemctl.

Zależności

Clickhouse zależy od Zookeeper, aby osiągnąć spójność.

Przykładowy Playbook

Oto przykład, jak używać tej roli.

    - hosts: my_clickhouse_group
      tasks:
        - include_role:
            name: javigs82.clickhouse
          vars:
            clickhouse_cluster_name: "e-commerce"
            clickhouse_replica_list: "{{ groups['my_clickhouse_group'] }}"
            clickhouse_zookeeper_list: "{{ groups['my_zookeeper_group'] }}"

Referencje

Autor

Podziękowania

Licencja

Ten projekt jest licencjonowany na podstawie Licencji MIT - zobacz plik LICENSE po szczegóły.

Zainstaluj
ansible-galaxy install javigs82.clickhouse
Licencja
mit
Pobrania
169
Właściciel