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

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 .local auflösen.

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 des systemctl-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

Autor

Danksagungen

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe die LICENSE Datei für Details.

Über das Projekt

Clickhouse Cluster

Installieren
ansible-galaxy install javigs82.clickhouse
GitHub Repository
Lizenz
mit
Downloads
169
Besitzer