AlexeySetevoi.clickhouse

ansible-clickhouse

Статус сборки Статус сборки Тэг GitHub (последний по дате) Ansible Galaxy

Простая роль для развёртывания и управления clickhouse-server. Любые вопросы и предложения по улучшению приветствуются.

Переменные роли

F: Вы можете указать конкретную версию (или * для последней). Имейте в виду, что понижение версии не поддерживается.

clickhouse_version: "19.11.3.11"

F: Вы можете управлять портами прослушивания:

clickhouse_http_port: 8123
clickhouse_tcp_port: 9000
clickhouse_interserver_http: 9009

F: Вы можете добавить IP-адреса для прослушивания дополнительно к значениям по умолчанию:

clickhouse_listen_host_custom:
  - "192.168.0.1"

F: Вы можете управлять TTL для журнала запросов:

clickhouse_query_log_ttl: 'event_date + INTERVAL 7 DAY DELETE'

F: Вы можете управлять TTL для журнала потоков запросов:

clickhouse_query_thread_log_ttl: 'event_date + INTERVAL 7 DAY DELETE'

F: Либо можете указать IP-адреса напрямую, например, чтобы слушать на всех IPv4 и IPv6 адресах:

clickhouse_listen_host:
  - "::"

F: Вы можете создать пользовательские профили:

clickhouse_profiles_custom:
 my_custom_profile:
   max_memory_usage: 10000000000
   use_uncompressed_cache: 0
   load_balancing: random
   my_super_param: 9000

Позволяет любые простые K-V. Преобразуется в XML:

<profiles>
    <!-- Профили настроек. -->
    <!-- Профили по умолчанию. -->
        <default>
            <max_memory_usage>10000000000</max_memory_usage>
            <load_balancing>random</load_balancing>
            <use_uncompressed_cache>0</use_uncompressed_cache>
        </default>
        <readonly>
            <readonly>1</readonly>
        </readonly>
        <!-- Конец профилей по умолчанию. -->
        <!-- Пользовательские профили. -->
        <my_custom_profile>
            <max_memory_usage>10000000000</max_memory_usage>
            <load_balancing>random</load_balancing>
            <use_uncompressed_cache>0</use_uncompressed_cache>
            <my_super_param>9000</my_super_param>
        </my_custom_profile>
        <!-- Конец пользовательских профилей. -->
</profiles>

F: Вы можете создавать пользовательских пользователей:

clickhouse_users_custom:
      - { name: "testuser",
          password_sha256_hex: "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2",
          networks: "{{ clickhouse_networks_default }}",
          profile: "default",
          quota: "default",
          dbs: [ testu1 ] ,
          comment: "обычный пользователь с простым паролем"}
      - { name: "testuser2",
          password: "testplpassword",
          networks: "{{ clickhouse_networks_default }}",
          profile: "default",
          quota: "default",
          dbs: [ testu2 ] ,
          comment: "обычный пользователь с хэшированным паролем"}
      - { name: "testuser3",
          password: "testplpassword",
          networks: { 192.168.0.0/24, 10.0.0.0/8 },
          profile: "default",
          quota: "default",
          dbs: [ testu1,testu2,testu3 ] ,
          comment: "обычный пользователь с несколькими БД и несколькими пользовательскими разрешениями на доступ"}
      - { name: "testuser4",
          ldap_server: "example_ldap_server",
          networks: { 192.168.0.0/24, 10.0.0.0/8 },
          profile: "default",
          quota: "default",
          dbs: [ testu1,testu2,testu3 ] ,
          comment: "внешняя аутентификация с использованием определения ldap_server"}

F: Вы можете управлять собственными квотами:

clickhouse_quotas_custom:
 - { name: "my_custom_quota", intervals: "{{ clickhouse_quotas_intervals_default }}", comment: "Квота по умолчанию - учитывает только количество запросов" }

Объект квоты — это простой словарь:

 - { duration: 3600, queries: 0, errors: 0, result_rows: 0, read_rows: 0, execution_time: 0 }

F: Вы можете создавать любые базы данных: состояние БД по умолчанию — присутствует

clickhouse_dbs_custom:
      - { name: testu1 }
      - { name: testu2 }
      - { name: testu3 }
      - { name: testu4, state: absent }
      - { name: testu5, state: present }
      - { name: testu6, state: absent, cluster: testu6 }
      - { name: testu7, state: present, cluster: testu7 }
      - { name: testu8, state: absent, cluster: testu8, engine: Lazy(3600) }
      - { name: testu9, state: present, cluster: testu9, engine: Lazy(3600) }

F: Вы можете создавать словари через ODBC:

clickhouse_dicts:
          test1:
            name: test_dict
            odbc_source:
              connection_string: "DSN=testdb"
              source_table: "dict_source"
            lifetime:
              min: 300
              max: 360
            layout: hashed
            structure:
              key: "testIntKey"
              attributes:
                - { name: testAttrName, type: UInt32, null_value: 0 }
          test2:
            name: test_dict
            odbc_source:
              connection_string: "DSN=testdb"
              source_table: "dict_source"
            lifetime:
              min: 300
              max: 360
            layout: complex_key_hashed
            structure:
              key:
                attributes:
                  - { name: testAttrComplexName, type: String }
              attributes:
                - { name: testAttrName, type: String, null_value: "" }

F: Флаг для удаления ClickHouse с хоста (по умолчанию отключен):

clickhouse_remove: no

F: Вы можете управлять конфигурацией Kafka:

# глобальная конфигурация
clickhouse_kafka_config:
  auto_offset_reset: smallest
  debug: cgrp
# конфигурация на уровне темы
clickhouse_kafka_topics_config:
  topic1:
    retry_backoff_ms: 250
    fetch_min_bytes: 100000
  topic2:
    retry_backoff_ms: 300
    fetch_min_bytes: 120000

F: Вы можете управлять конфигурацией LDAP-сервера:

clickhouse_ldap_servers:
  # Отладка с помощью ldapwhoami -H '<host>' -D '<bind_dn>' -w <password>
  example_ldap_server:
    host: "ldaps.example.com"
    port: "636"
    bind_dn: "EXAMPLENET\\{user_name}"
    verification_cooldown: "300"
    enable_tls: "yes"
    tls_require_cert: "demand"

F: Вы можете управлять внешним пользовательским каталогом LDAP:

# Полезное руководство на https://altinity.com/blog/integrating-clickhouse-with-ldap-part-two
clickhouse_ldap_user_directories:
  - server: "example_ldap_server"
    roles:
      - "ldap_user"
    role_mapping:
      base_dn: "ou=groups,dc=example,dc=com"
      attribute: "CN"
      scope: "subtree"
      search_filter: "(&amp;(objectClass=group)(member={user_dn}))"
      prefix: "clickhouse_"

F: Вы можете управлять конфигурацией Merge Tree. Для списка доступных параметров смотрите настройки таблиц MergeTree.

clickhouse_merge_tree_config:
  max_suspicious_broken_parts: 5
  parts_to_throw_insert: 600

Пример плейбука

Включение примера использования вашей роли (например, с переменными, переданными в качестве параметров) всегда будет полезно для пользователей:

  - hosts: clickhouse_cluster
    remote_user: root
    vars:
      clickhouse_users_custom:
          - { name: "testuser",
              password_sha256_hex: "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2",
              networks: "{{ clickhouse_networks_default }}",
              profile: "default",
              quota: "default",
              dbs: [ testu1 ] ,
              comment: "обычный пользователь с простым паролем"}
          - { name: "testuser2",
              password: "testplpassword",
              networks: "{{ clickhouse_networks_default }}",
              profile: "default",
              quota: "default",
              dbs: [ testu2 ] ,
              comment: "обычный пользователь с хэшированным паролем"}
          - { name: "testuser3",
              password: "testplpassword",
              networks: { 192.168.0.0/24, 10.0.0.0/8 },
              profile: "default",
              quota: "default",
              dbs: [ testu1,testu2,testu3 ] ,
              comment: "обычный пользователь с несколькими БД и несколькими пользовательскими разрешениями на доступ"}
      clickhouse_query_log_ttl: 'event_date + INTERVAL 7 DAY DELETE'
      clickhouse_query_thread_log_ttl: 'event_date + INTERVAL 7 DAY DELETE'
      clickhouse_dicts:
          test1:
            name: test_dict
            odbc_source:
              connection_string: "DSN=testdb"
              source_table: "dict_source"
            lifetime:
              min: 300
              max: 360
            layout: hashed
            structure:
              key: "testIntKey"
              attributes:
                - { name: testAttrName, type: UInt32, null_value: 0 }
          test2:
            name: test_dict
            odbc_source:
              connection_string: "DSN=testdb"
              source_table: "dict_source"
            lifetime:
              min: 300
              max: 360
            layout: complex_key_hashed
            structure:
              key:
                attributes:
                  - { name: testAttrComplexName, type: String }
              attributes:
                - { name: testAttrName, type: String, null_value: "" }
      clickhouse_dbs_custom:
         - { name: testu1 }
         - { name: testu2, state:present }
         - { name: testu3, state:absent }
      clickhouse_clusters:
        your_cluster_name:
          shard_1:
              - { host: "db_host_1", port: 9000 }
              - { host: "db_host_2", port: 9000 }
          shard_2:
              - { host: "db_host_3", port: 9000 }
              - { host: "db_host_4", port: 9000 }       
      clickhouse_zookeeper_nodes:
        - { host: "zoo_host_1", port: 2181 }
        - { host: "zoo_host_2", port: 2181 }
        - { host: "zoo_host_3", port: 2181 }
    roles:
      - ansible-clickhouse

Чтобы сгенерировать макросы: в файле host_vars\db_host_1.yml

clickhouse_macros:
  layer: 01
  shard: "your_shard_name"
  replica: "db_host_1"

Укрепление безопасности кластера. Вы можете настроить кластер с помощью дополнительных настроек, которые включают:

  • HTTPS порт
  • Шифрование TCP порта с помощью TLS
  • HTTPS для репликации данных
  • Учетные данные для репликации данных
  • Секрет для проверки распределенных запросов
  • ACL ZooKeeper
- hosts: clickhouse_cluster
  become: true
  roles:
    - ansible-clickhouse
  vars:
    # HTTPS вместо обычного HTTP
    clickhouse_https_port: 8443
    # Шифрование TLS для родного TCP-протокола (требуется `clickhouse-client --secure`)
    clickhouse_tcp_secure_port: 9440
    # Шифрование TLS между узлами в кластере
    clickhouse_interserver_https: 9010
    # Учетные данные для аутентификации узлов во время репликации данных
    clickhouse_interserver_http_credentials:
      user: "internal"
      password: "supersecretstring"
    # Секрет для проверки узлов в кластере для распределенных запросов
    clickhouse_distributed_secret: "supersecretstring2"
    # Защита паролем путей ZooKeeper, используемых ClickHouse
    clickhouse_zookeeper_identity:
      user: "zoo_user"
      password: "secretzoostring"
    # Настройки OpenSSL
    clickhouse_ssl_server:
      certificate_file: "/etc/clickhouse-server/server.crt"
      private_key_file: "/etc/clickhouse-server/server.key"
      dh_params_file: "/etc/clickhouse-server/dhparam.pem"
      verification_mode: "none"
      load_default_ca_file: "true"
      cache_sessions: "true"
      disable_protocols: "sslv2,sslv3"
      prefer_server_ciphers: "true"
    clickhouse_clusters:
      your_cluster_name:
        shard_1:
          - host: "db_host_1"
            port: 9440
            secure: true
          - host: "db_host_2"
            port: 9440
            secure: true
        shard_2:
          - host: "db_host_3"
            port: 9440
            secure: true
          - host: "db_host_4"
            port: 9440
            secure: true
    clickhouse_zookeeper_nodes:
      - host: "zoo_host_1"
        port: 2181
      - host: "zoo_host_2"
        port: 2181
      - host: "zoo_host_3"
        port: 2181

F: Вы можете отдельно вызывать этапы (из плейбука, внешней роли и т.д.):

Тег Действие
install Только установка пакетов
config_sys Только конфигурация системных конфигураций (users.xml и config.xml)
config_db Только добавление и удаление баз данных
config_sys Только регенерация словарей
config config_sys + config_db

Лицензия

BSD

Информация об авторе

ClickHouse от ClickHouse, Inc..

Роль от AlexeySetevoi.

Дорогие контрибьюторы, спасибо.

О проекте

Role for installation and managing ClickHouse

Установить
ansible-galaxy install AlexeySetevoi.clickhouse
Лицензия
Unknown
Загрузки
4.3k
Владелец