javigs82.clickhouse
Ansible Clickhouse
この役割は、NシャードおよびMレプリカを持つクリックハウスクラスタの設定とインストールを担当します。 aptおよびyum は、Vagrant上でモレキュールテスト済みです。
クラスタは、Ansibleのインベントリグループ、つまりインベントリパターンに基づいて構築されるため、以下のグループはクラスタを実行するために必須です:
- clickhouse: すべてのクリックハウスインベントリホストが含まれています。これらのホストはホスト名を
ch01-shard01-replica01
のように設定する必要があります、 正規表現は^ch\\d{2}-shard\\d{2}-replica\\d{2}
のようになります。 - zookeeper: すべてのZooKeeperインベントリホストが含まれています。
ホスト名に基づいてシャードとレプリカがどのように計算されているかを確認するには、defaultsを参照してください:
注意: {{ inventory_hostname }}
はDNSまたはIPアドレスであり、{{ ansible_hostname }}
はマシンのホスト名です。
ホスト名({{ ansible_hostname}}
)が正しく設定されているかを確認するには、ホストマシンで次のコマンドを実行してください:
hostname
要件
- VagrantとVirtualBox(詳細は https://www.vagrantup.com/introを参照)
- ansible => 2.10
- python3
- pip3
- モレキュール(詳細は https://molecule.readthedocs.io/en/latest/installation.htmlを参照)
molecule
をインストールするには、python3を使用します。
python3 -m pip install --user "molecule"
python3 -m pip install --user "molecule-vagrant"
このソリューションは、プライベートDNSサーバーでホスト名を解決する機能に基づいています。 したがって、VagrantがDNSソリューションを提供しないと仮定し、以下のソフトウェアがprepare.ymlにインストールされています。 これにより、Vagrantインフラが内部DNSリゾルバを持つようになります。
---
- name: Prepare
hosts: all
tasks:
- name: Install epel-release
yum:
name: epel-release
state: present
- name: Install nss-mdns
yum:
name: nss-mdns
state: present
- name: Stop service cron on debian, if running
systemd:
name: avahi-daemon
state: started
nss-mdns
とavahi
によって、Vagrantは
注意: リアルな使用ケースでは、DNS解決はより複雑であると期待されます。
ホスト名を正しく設定するには、次のリンクを参照してください:
https://www.vagrantup.com/docs/networking/basic_usage#setting-hostname
アーキテクチャ
Clickhouse-clusterはホスト名の上に構築されるため、ホスト名が次のように正しく設定されていることを確認してください:
^ch\\d{2}-shard\\d{2}-replica\\d{2}
ここで chX-shardY-replicaZ は、正規表現に基づいてどのレプリカがどのシャードに属しているかを簡単に発見する方法を提供するキーです。
注意: ansible_hostname
とinventory_hostname
は異なります:
- ansible_hostname: OS内の名前です:ホストマシンで
hostname
を実行してください。 - inventory_hostname: ホストのURL(IPまたはDNS)であり、他のクラスタレプリカによって解決される必要があります。 IPアドレスまたはDNSの両方が有効です。
{{ ansible_hostname }}
はレプリカの発見に使用され、{{ inventory_hostname}}
は通信を可能にします。
インベントリの例は以下の通りです:
[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>
ここで、URL(inventory_hostname)は、ランタイムで解決されるIPまたはDNSです。
クラスタを構築するには、clickhouse
グループとzookeeper
グループが必須です。
設計
- ダウンロード: Yandex RPMリポジトリから。ダウングレードは
clickhouse_allow_downgrade
プロパティによって許可されます。 - 設定:
clickhouse
グループおよびユーザーを確保します。パスと設定ファイルを確認します。正規表現に基づいてレプリカとシャードを発見します。 - インストール: yumを使ってダウンロードとインストールを行います。
- ユーザー: ユーザーを管理するための動的リスト。パスワード管理は実装されていません。
- RBAC: 実装予定です。
役割のデフォルト変数
defaultsで変数を確認してください。
クラスタ定義
これらの変数を使用して、メイン定義を設定します。
クラスタ設定はホスト名に依存しており、それによりclickhouse_replica_name
とclickhouse_shard_name
が重要であり、clickhouse_hostname_regex
はホスト名定義の正規表現です: ^ch\\d{2}-(shard\\d{2})-replica\\d{2}
詳細についてはvarsを参照してください。
# clickhouseクラスタ定義
clickhouse_version: "20.8.7.15"
clickhouse_allow_downgrade: false
clickhouse_cluster_name: "mycluster"
clickhouse_service_name: "clickhouse-server"
clickhouse_service_status: "started"
# ユーザー/グループ
clickhouse_group: "clickhouse"
clickhouse_user: "clickhouse"
Clickhouse インストールサポート
# 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 }}"
# 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 }}"
# パス
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 設定
これらの変数を使用して、主要な設定が設定されます。
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: []
ネットワーキング
これらの変数はネットワーク設定に関連しています。
clickhouse_http_port: 8123
clickhouse_https_port: 8443
clickhouse_tcp_port: 9000
clickhouse_tcp_secure_port: 9440
clickhouse_interserver_http: 9009
# clickhouse_listen_host_defaultを参照
clickhouse_listen_host: "{{ clickhouse_listen_host_default + clickhouse_listen_host_custom }}"
注意: clickhouse_listen_host
は、chメンバーがリスニングできるようにする必要があります。
ユーザー
これらの変数を使用してユーザーをカスタマイズします。 ユーザーを削除するには、Clickhouseの設定属性を使用します: https://clickhouse.tech/docs/en/operations/configuration-files/
# chユーザー: https://clickhouse.tech/docs/en/operations/configuration-files/
clickhouse_users_list:
- { user_name: "default",
profile: "default",
networks: ["::/1"],
quota: "default" }
Zookeeper
ZooKeeperホストリストはインベントリグループパターンに基づいています。
# ZooKeeperは必須ではありません。ZooKeeperがインストールされていない場合、
# レプリケーションはクライアント側で行われます。
clickhouse_zookeeper_list: "{{ groups['zookeeper'] }}"
clickhouse_zookeeper_port: "2181"
役割変数
これらは、デフォルトおよびインベントリグループの変数よりも大きい変数です。 通常、これらはより高い優先度によってのみ上書き可能ですが、通常は上書きしないでください。
クラスタ設定はホスト名に依存しており、それにより、clickhouse_replica_name
とclickhouse_shard_name
が重要であり、clickhouse_hostname_regex
はホスト名定義の正規表現です: ^ch\\d{2}-(shard\\d{2})-replica\\d{2}
詳細についてはvarsを参照してください。
varsで変数を確認してください。
---
# シャードとレプリカを発見するための正規表現
clickhouse_hostname_regex: "^ch\\d{2}-(shard\\d{2})-(replica\\d{2})"
# 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 }}"
# シャードリストはレプリカリストによって計算されます。 regexに従う必要があります: vars/main.ymlのclickhouse_hostname_regexを参照
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"
これらは決して上書きしないでください。ロールがレプリカとシャードを発見し、関連付ける方法の核心となるからです。
役割タグ
この役割でサポートされているタグは次のとおりです:
ch:configure
: 設定タスクのみ実行するため。ch:install
: ソフトウェアのダウンロードとインストールを行います。ch:service
:systemctl
サービスの状態を管理します。
依存関係
Clickhouse
は、一貫性を確保するためにZookeeper
に依存しています。
例プレイブック
ロールの使用例を含みます。
- 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'] }}"
参考文献
- https://clickhouse.tech/docs/en/getting-started
- https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html
作者
- javigs82 github
謝辞
- https://github.com/AlexeySetevoi/ansible-clickhouse
- https://github.com/nl2go/ansible-role-clickhouse
- https://github.com/idealista/clickhouse_role
ライセンス
このプロジェクトはMITライセンスの下でライセンスされています - 詳細についてはLICENSEファイルを参照してください。
ansible-galaxy install javigs82.clickhouse