javigs82.clickhouse
Ansible Clickhouse
Diese Rolle ist verantwortlich für die Konfiguration und Installation eines Clickhouse-Clusters mit N Shards und M Replikaten. apt und yum wurden mit Molecule auf Vagrant getestet.
Das Cluster wird auf der Grundlage der Ansible-Inventargruppen, auch bekannt als Inventarmuster, aufgebaut. Die folgenden Gruppen sind Pflicht, um das Cluster auszuführen:
- clickhouse: Enthält alle Clickhouse-Inventar-Hosts. Diese Hosts müssen ihren Hostnamen wie folgt festlegen:
ch01-shard01-replica01
mit einem regulären Ausdruck wie:^ch\\d{2}-shard\\d{2}-replica\\d{2}
- zookeeper: Enthält alle Zookeeper-Inventar-Hosts.
Siehe in defaults nach, um zu überprüfen, wie Shards und Replikate in Abhängigkeit von Hostnamen berechnet werden.
Hinweis: {{ inventory_hostname }}
ist die DNS- oder IP-Adresse, während {{ ansible_hostname }}
der Hostname der Maschine ist.
Um zu überprüfen, ob der Hostname ({{ ansible_hostname}}
) korrekt eingestellt ist, führen Sie den folgenden Befehl auf der Hostmaschine aus:
hostname
Anforderungen
- Vagrant mit VirtualBox (siehe https://www.vagrantup.com/intro)
- ansible => 2.10
- python3
- pip3
- Molecule (siehe https://molecule.readthedocs.io/en/latest/installation.html)
Um molecule
zu installieren, verwenden Sie python3.
python3 -m pip install --user "molecule"
python3 -m pip install --user "molecule-vagrant"
Diese Lösung basiert auf der Fähigkeit, Hostnamen in einem privaten DNS-Server aufzulösen. Da Vagrant keine DNS-Lösung bereitstellt, wird die folgende Software in prepare.yml installiert, die der Vagrant-Infrastruktur einen internen DNS-Resolver hinzufügt.
---
- name: Prepare
hosts: all
tasks:
- name: EPEL-Release installieren
yum:
name: epel-release
state: present
- name: nss-mdns installieren
yum:
name: nss-mdns
state: present
- name: Stoppen Sie den cron-Dienst unter Debian, falls er läuft
systemd:
name: avahi-daemon
state: started
Mit nss-mdns
und avahi
kann Vagrant DNS wie
Hinweis: Die DNS-Auflösung sollte in einem realen Anwendungsfall komplexer sein.
Um den Hostnamen korrekt zu konfigurieren, beachten Sie den folgenden Link:
https://www.vagrantup.com/docs/networking/basic_usage#setting-hostname
Architektur
Clickhouse-Cluster wird auf dem Hostnamen aufgebaut, daher beachten Sie, dass der Hostname korrekt eingestellt ist wie:
^ch\\d{2}-shard\\d{2}-replica\\d{2}
wo chX-shardY-replicaZ der Schlüssel ist, um leicht herauszufinden, welche Replik zu welchem Shard gehört, basierend auf dem regulären Ausdruck.
Hinweis: ansible_hostname
ist nicht dasselbe wie inventory_hostname
:
- ansible_hostname: Das ist der Name im Betriebssystem: Geben Sie
hostname
auf der Hostmaschine ein - inventory_hostname: Das ist die URL (IP oder DNS) des Hosts und muss von anderen Cluster-Replikaten aufgelöst werden. IP-Adresse oder DNS sind beide gültig.
{{ ansible_hostname }}
wird zur Entdeckung von Replikaten verwendet, während {{ inventory_hostname}}
zur Ermöglichung der Kommunikation dient.
Ein Beispiel für ein Inventar könnte wie folgt aussehen:
[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>
wobei die URL (inventory_hostname) die IP oder den DNS darstellt, die zur Laufzeit aufgelöst wird.
Hinweis: Um das Cluster aufzubauen, sind die Gruppen clickhouse
und zookeeper
unbedingt erforderlich.
Design
- Herunterladen: Aus dem Yandex RPM-Repository. Rückgängigmachen ist durch die Eigenschaft
clickhouse_allow_downgrade
erlaubt. - Konfigurieren: Stellen Sie die
clickhouse
-Gruppe und den Benutzer sicher. Überprüfen Sie die Pfade und Konfigurationsdateien. Entdecken Sie Replikate und Shards anhand des regulären Ausdrucks. - Installieren: Herunterladen und installieren über yum
- Benutzer: Dynamische Liste zur Verwaltung von Benutzern. Die Passwortverwaltung ist nicht implementiert.
- RBAC: WIRD IMPLEMENTIERT
Standardvariablen der Rolle
Überprüfen Sie die Variablen in defaults
Cluster-Definition
Verwenden Sie diese Variablen, um die Hauptdefinition festzulegen.
Beachten Sie, dass die Clusterkonfiguration auf dem Hostnamen basiert. In diesem Fall sind clickhouse_replica_name
und clickhouse_shard_name
relevant, während clickhouse_hostname_regex
der reguläre Ausdruck der Hostnamensdefinition ist: ^ch\\d{2}-(shard\\d{2})-replica\\d{2}
Siehe vars für weitere Informationen.
# Clickhouse-Cluster-Definition
clickhouse_version: "20.8.7.15"
clickhouse_allow_downgrade: false
clickhouse_cluster_name: "meincluster"
clickhouse_service_name: "clickhouse-server"
clickhouse_service_status: "started"
# Benutzer/Gruppe
clickhouse_group: "clickhouse"
clickhouse_user: "clickhouse"
Unterstützung für die Clickhouse-Installation
# yum Unterstützung
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 }}"
# apt Unterstützung
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 }}"
# Pfad
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"
Clickhouse-Konfiguration
Mit diesen Variablen wird die Hauptkonfiguration festgelegt.
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: []
Netzwerk
Diese Variablen beziehen sich auf die Netzwerkkonfiguration
clickhouse_http_port: 8123
clickhouse_https_port: 8443
clickhouse_tcp_port: 9000
clickhouse_tcp_secure_port: 9440
clickhouse_interserver_http: 9009
# siehe vars für clickhouse_listen_host_default
clickhouse_listen_host: "{{ clickhouse_listen_host_default + clickhouse_listen_host_custom }}"
Hinweis: clickhouse_listen_host
muss allen Ch-Mitgliedern das Lauschen ermöglichen.
Benutzer
Verwenden Sie diese Variablen, um Benutzer anzupassen. Um einen Benutzer zu entfernen, verwenden Sie die Clickhouse-Konfigurationseigenschaften: https://clickhouse.tech/docs/en/operations/configuration-files/
# ch Benutzer: https://clickhouse.tech/docs/en/operations/configuration-files/
clickhouse_users_list:
- { user_name: "default",
profile: "default",
networks: ["::/1"],
quota: "default" }
Zookeeper
Die Liste der Zookeeper-Hosts basiert auf dem Muster der Inventargruppen.
# Zookeeper ist nicht zwingend erforderlich. Wenn Zookeeper nicht installiert ist,
# muss die Replikation von der Client-Seite durchgeführt werden.
clickhouse_zookeeper_list: "{{ groups['zookeeper'] }}"
clickhouse_zookeeper_port: "2181"
Variablen der Rollenvariablen
Dies sind Variablen, die größer sind als die Standard- und Inventargruppenvariablen. Sie können nur von einer höheren Priorität überschrieben werden, normalerweise jedoch nicht.
Beachten Sie, dass die Clusterkonfiguration auf dem Hostnamen basiert und
daher clickhouse_replica_name
und clickhouse_shard_name
wichtig sind, während clickhouse_hostname_regex
der reguläre Ausdruck der Hostnamensdefinition ist: ^ch\\d{2}-(shard\\d{2})-replica\\d{2}
. Siehe vars für weitere Informationen.
Überprüfen Sie die Variablen in vars.
---
# regex zum Entdecken von Shards und Replikaten
clickhouse_hostname_regex: "^ch\\d{2}-(shard\\d{2})-(replica\\d{2})"
# Entdecken basierend auf regex
clickhouse_shard_name: "{{ ansible_hostname | regex_search(clickhouse_hostname_regex, '\\1') | first }}"
clickhouse_replica_name: "{{ ansible_hostname | regex_search(clickhouse_hostname_regex, '\\2') | first }}"
# Shard-Listen werden anhand der Replikaten-Liste berechnet. Sie müssen dem regex entsprechen: siehe clickhouse_hostname_regex in vars/main.yml
clickhouse_shard_list: "{{ clickhouse_replica_list | map('extract', hostvars, 'ansible_hostname') | map('regex_search', clickhouse_hostname_regex, '\\1') | unique | map ('first') }}"
clickhouse_replica_list: "{{ groups['clickhouse'] }}"
clickhouse_listen_host_default:
- "{{ inventory_hostname }}"
- "127.0.0.1"
- "::1"
Diese sollten NIEMALS überschrieben werden, da sie den Kern davon bilden, wie die Rolle Replikate und Shards entdeckt und miteinander verknüpft.
Rollentags
Die folgenden Tags werden in dieser Rolle unterstützt:
ch:configure
: Für die Ausführung nur von Konfigurationsaufgaben.ch:install
: Für den Download und die Installation der Software.ch:service
: Zum Verwalten des Status dessystemctl
-Dienstes.
Abhängigkeiten
Clickhouse
ist von Zookeeper
abhängig, um Konsistenz zu erreichen.
Beispiel-Playbook
Ein Beispiel, wie die Rolle verwendet wird.
- 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'] }}"
Referenzen
- https://clickhouse.tech/docs/en/getting-started
- https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html
Autor
- javigs82 github
Danksagungen
- https://github.com/AlexeySetevoi/ansible-clickhouse
- https://github.com/nl2go/ansible-role-clickhouse
- https://github.com/idealista/clickhouse_role
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe die LICENSE Datei für Details.
ansible-galaxy install javigs82.clickhouse