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
- Vagrant z VirtualBox (zobacz https://www.vagrantup.com/intro)
- ansible => 2.10
- python3
- pip3
- Molecule (zobacz https://molecule.readthedocs.io/en/latest/installation.html)
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
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ługisystemctl
.
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
- https://clickhouse.tech/docs/en/getting-started
- https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html
Autor
- javigs82 github
Podziękowania
- https://github.com/AlexeySetevoi/ansible-clickhouse
- https://github.com/nl2go/ansible-role-clickhouse
- https://github.com/idealista/clickhouse_role
Licencja
Ten projekt jest licencjonowany na podstawie Licencji MIT - zobacz plik LICENSE po szczegóły.
ansible-galaxy install javigs82.clickhouse