johnpoint

johnpoint

(。・∀・)ノ゙嗨
github

使用 docker-compose 建立 clickhouse 集群

Docker Compose 配置#

version: '3'
services:
  clickhouse-server-ck1:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: yandex/clickhouse-server
    container_name: ck1
    networks:
      - ck-network
    ports:
      - "8124:8123"
      - "9001:9000"
      - "9010:9004"
    volumes:
      - `pwd`/clickhouse/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  clickhouse-server-ck2:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: yandex/clickhouse-server
    container_name: ck2
    networks:
      - ck-network
    ports:
      - "8125:8123"
      - "9002:9000"
      - "9011:9004"
    volumes:
      - `pwd`/clickhouse2/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server2/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server2/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  clickhouse-server-ck3:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: yandex/clickhouse-server
    container_name: ck3
    networks:
      - ck-network
    ports:
      - "8126:8123"
      - "9003:9000"
      - "9012:9004"
    volumes:
      - `pwd`/clickhouse3/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server3/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server3/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  zookeeper-1:
    restart: on-failure:10 # 退出非0重启,尝试10次
    image: zookeeper:3.8.0
    container_name: zookeeper1
    networks:
      - ck-network
    ports:
      - "2181:2181"
    volumes:
      - `pwd`/zookeeper/conf/:/apache-zookeeper-3.8.0-bin/conf/
      - `pwd`/zookeeper/data/:/data
      - `pwd`/zookeeper/datalog/:/datalog
      - `pwd`/zookeeper/logs/:/logs
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"

networks:
  ck-network:

Clickhouse 配置文件#

<?xml version="1.0"?>
<!--
  注意:用戶和查詢級別的設置在 "users.xml" 文件中設置。
  如果您不小心在這裡指定了用戶級別的設置,服務器將無法啟動。
  您可以將設置移動到 "users.xml" 文件中的正確位置
   或在這裡添加 <skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>。
-->
<clickhouse>
    <logger>
        <!-- 可能的級別 [1]:

          - none (關閉日誌)
          - fatal
          - critical
          - error
          - warning
          - notice
          - information
          - debug
          - trace
          - test (不適合生產使用)

            [1]: https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/Logger.h#L105-L114
        -->
        <level>trace</level>
        <log>/var/log/clickhouse-server/clickhouse-server.log</log>
        <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
        <!-- 旋轉策略
             查看 https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/FileChannel.h#L54-L85
          -->
        <size>1000M</size>
        <count>10</count>
        <!-- <console>1</console> --> <!-- 默認行為是自動檢測(如果不是守護進程模式且是 tty,則記錄到控制台) -->

        <!-- 每級別的覆蓋(舊版):

        例如,要抑制 ConfigReloader 的日誌,您可以使用:
        注意:levels.logger 是保留的,見下文。
        -->
        <!--
        <levels>
          <ConfigReloader>none</ConfigReloader>
        </levels>
        -->

        <!-- 每級別的覆蓋:

        例如,要抑制默認用戶的 RBAC 日誌,您可以使用:
        (但請注意,日誌名稱可能會隨版本而變化,即使是小版本升級後)
        -->
        <!--
        <levels>
          <logger>
            <name>ContextAccess (default)</name>
            <level>none</level>
          </logger>
          <logger>
            <name>DatabaseOrdinary (test)</name>
            <level>none</level>
          </logger>
        </levels>
        -->
    </logger>

    <!-- 在選項請求中向響應添加標頭。 OPTIONS 方法用於 CORS 預檢請求。 -->
    <!-- 默認情況下關閉。以下標頭對於 CORS 是必需的。-->
    <!-- http_options_response>
        <header>
            <name>Access-Control-Allow-Origin</name>
            <value>*</value>
        </header>
        <header>
            <name>Access-Control-Allow-Headers</name>
            <value>origin, x-requested-with</value>
        </header>
        <header>
            <name>Access-Control-Allow-Methods</name>
            <value>POST, GET, OPTIONS</value>
        </header>
        <header>
            <name>Access-Control-Max-Age</name>
            <value>86400</value>
        </header>
    </http_options_response -->

    <!-- 這是將在 clickhouse-client 中顯示的名稱。
         默認情況下,任何帶有 "production" 的內容在查詢提示中將以紅色突出顯示。
    -->
    <!--display_name>production</display_name-->

    <!-- HTTP API 的端口。另請參見 'https_port' 以獲取安全連接。
         此接口也由 ODBC 和 JDBC 驅動程序(DataGrip、Dbeaver 等)使用
         以及大多數 Web 界面(嵌入式 UI、Grafana、Redash 等)。
      -->
    <http_port>8123</http_port>

    <!-- 通過本地協議進行交互的端口:
         - clickhouse-client 和其他本地 ClickHouse 工具(clickhouse-benchmark、clickhouse-copier);
         - clickhouse-server 與其他 clickhouse-servers 進行分佈查詢處理;
         - 支持本地協議的 ClickHouse 驅動程序和應用程序
         (該協議也非正式稱為 "TCP 協議");
         另請參見 'tcp_port_secure' 以獲取安全連接。
    -->
    <tcp_port>9000</tcp_port>

    <!-- 與 MySQL 協議的兼容性。
         ClickHouse 將假裝為 MySQL 以便連接到此端口的應用程序。
    -->
    <mysql_port>9004</mysql_port>

    <!-- 與 PostgreSQL 協議的兼容性。
         ClickHouse 將假裝為 PostgreSQL 以便連接到此端口的應用程序。
    -->
    <postgresql_port>9005</postgresql_port>

    <!-- 帶有 TLS 的 HTTP API(HTTPS)。
         您必須配置證書以啟用此接口。
         請參見下面的 openSSL 部分。
    -->
    <!-- <https_port>8443</https_port> -->

    <!-- 帶有 TLS 的本地接口。
         您必須配置證書以啟用此接口。
         請參見下面的 openSSL 部分。
    -->
    <!-- <tcp_port_secure>9440</tcp_port_secure> -->

    <!-- 使用 PROXYv1 協議包裝的本地接口
         每個連接都會發送 PROXYv1 標頭。
         ClickHouse 將從標頭中提取有關代理轉發的客戶端地址的信息。
    -->
    <!-- <tcp_with_proxy_port>9011</tcp_with_proxy_port> -->

    <!-- 用於副本之間通信的端口。用於數據交換。
         它提供了伺服器之間的低級數據訪問。
         此端口不應從不受信任的網絡訪問。
         另請參見 'interserver_http_credentials'。
         通過此端口的連接傳輸的數據不應通過不受信任的網絡。
         另請參見 'interserver_https_port'。
      -->
    <interserver_http_port>9009</interserver_http_port>

    <!-- 用於帶有 TLS 的副本之間通信的端口。
         您必須配置證書以啟用此接口。
         請參見下面的 openSSL 部分。
         另請參見 'interserver_http_credentials'。
      -->
    <!-- <interserver_https_port>9010</interserver_https_port> -->

    <!-- 其他副本用於請求此服務器的主機名。
         如果未指定,則根據 'hostname -f' 命令確定。
         此設置可用於將複製切換到另一個網絡接口
         (服務器可能通過多個地址連接到多個網絡)
      -->

    <interserver_http_host>0.0.0.0</interserver_http_host>

    <!-- 您可以為副本之間的身份驗證指定憑據。
         當 interserver_https_port 從不受信任的網絡可訪問時,這是必需的,
         也建議避免來自您網絡中可能被攻擊的服務的 SSRF 攻擊。
      -->
    <!--<interserver_http_credentials>
        <user>interserver</user>
        <password></password>
    </interserver_http_credentials>-->

    <!-- 監聽指定的地址。
         如果您希望接受來自各處的 IPv4 和 IPv6 連接,請使用 ::(通配符 IPv6 地址)。
         注意:
         如果您從通配符地址打開連接,請確保至少採取以下措施之一:
         - 服務器受到防火牆保護,並且不受不受信任的網絡訪問;
         - 所有用戶都限制為子集的網絡地址(請參見 users.xml);
         - 所有用戶都有強密碼,僅可訪問安全(TLS)接口,或僅通過 TLS 接口進行連接。
         - 沒有密碼的用戶具有只讀訪問權限。
         另請參見:https://www.shodan.io/search?query=clickhouse
      -->
    <!-- <listen_host>::</listen_host> -->


    <!-- 對於不支持 IPv6 的主機也是如此: -->
    <listen_host>0.0.0.0</listen_host>

    <!-- 默認值 - 嘗試在 IPv4 和 IPv6 上監聽 localhost。 -->
    <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->

    <!-- 在嘗試監聽時,如果 IPv6 或 IPv4 網絡不可用,則不退出。 -->
    <!-- <listen_try>0</listen_try> -->

    <!-- 允許多個服務器在同一地址:端口上監聽。這不建議。 -->
    <!-- <listen_reuse_port>0</listen_reuse_port> -->

    <!-- <listen_backlog>4096</listen_backlog> -->

    <max_connections>4096</max_connections>

    <!-- 用於 HTTP 1.1 中的 'Connection: keep-alive' -->
    <keep_alive_timeout>3</keep_alive_timeout>

    <!-- gRPC 協議(請參見 src/Server/grpc_protos/clickhouse_grpc.proto 以獲取 API) -->
    <!-- <grpc_port>9100</grpc_port> -->
    <grpc>
        <enable_ssl>false</enable_ssl>

        <!-- 只有在 enable_ssl=1 時,以下兩個文件才會使用 -->
        <ssl_cert_file>/path/to/ssl_cert_file</ssl_cert_file>
        <ssl_key_file>/path/to/ssl_key_file</ssl_key_file>

        <!-- 服務器是否會要求客戶端提供證書 -->
        <ssl_require_client_auth>false</ssl_require_client_auth>

        <!-- 只有在 ssl_require_client_auth=1 時,以下文件才會使用 -->
        <ssl_ca_cert_file>/path/to/ssl_ca_cert_file</ssl_ca_cert_file>

        <!-- 默認壓縮算法(如果客戶端未指定其他算法,則應用,請參見 QueryInfo 中的 result_compression)。
             支持的算法:none、deflate、gzip、stream_gzip -->
        <compression>deflate</compression>

        <!-- 默認壓縮級別(如果客戶端未指定其他級別,則應用,請參見 QueryInfo 中的 result_compression)。
             支持的級別:none、low、medium、high -->
        <compression_level>medium</compression_level>

        <!-- 發送/接收的消息大小限制(以字節為單位)。 -1 表示無限制 -->
        <max_send_message_size>-1</max_send_message_size>
        <max_receive_message_size>-1</max_receive_message_size>

        <!-- 如果您想要非常詳細的日誌,請啟用 -->
        <verbose_logs>false</verbose_logs>
    </grpc>

    <!-- 與 https_port 和 tcp_port_secure 一起使用。完整的 ssl 選項列表:https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h#L71 -->
    <openSSL>
        <server> <!-- 用於 https 服務器和安全 tcp 端口 -->
            <!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt -->
            <certificateFile>/etc/clickhouse-server/server.crt</certificateFile>
            <privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
            <!-- dhparams 是可選的。您可以刪除 <dhParamsFile> 元素。
                 要生成 dhparams,請使用以下命令:
                  openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096
                 只有帶有 BEGIN DH PARAMETERS 的文件格式才受支持。
              -->
            <dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile>
            <verificationMode>none</verificationMode>
            <loadDefaultCAFile>true</loadDefaultCAFile>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
        </server>

        <client> <!-- 用於連接到 https 字典源和安全的 Zookeeper 通信 -->
            <loadDefaultCAFile>true</loadDefaultCAFile>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
            <!-- 用於自簽名: <verificationMode>none</verificationMode> -->
            <invalidCertificateHandler>
                <!-- 用於自簽名: <name>AcceptCertificateHandler</name> -->
                <name>RejectCertificateHandler</name>
            </invalidCertificateHandler>
        </client>
    </openSSL>

    <!-- http[s] 服務器上的默認根頁面。例如,在打開 http://localhost:8123 時從 https://tabix.io/ 加載 UI -->
    <!--
    <http_server_default_response><![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]></http_server_default_response>
    -->

    <!-- 最大並發查詢數。 -->
    <max_concurrent_queries>100</max_concurrent_queries>

    <!-- 服務器進程的最大內存使用量(常駐集大小)。
         零值或未設置意味著默認。默認為可用物理 RAM 的 "max_server_memory_usage_to_ram_ratio"。
         如果該值大於可用物理 RAM 的 "max_server_memory_usage_to_ram_ratio",則會被削減。

         約束在查詢執行時檢查。
         如果查詢嘗試分配內存,並且當前內存使用量加上分配量大於
          指定的閾值,則將引發異常。

         將此約束設置為幾個 GB 等小值並不實際,
          因為內存分配器將在緩存中保留這麼多內存,服務器將拒絕查詢服務。
      -->
    <max_server_memory_usage>0</max_server_memory_usage>

    <!-- 全局線程池中的最大線程數。
    如果未指定,則默認為最大 10000 個線程。
    此設置在有大量分佈查詢同時運行但大部分時間閒置的情況下會很有用,
    在這種情況下,可能需要更高的線程數。
    -->

    <max_thread_pool_size>10000</max_thread_pool_size>

    <!-- 在後台回收連接的工作線程數(另請參見 drain_timeout)。
         如果池已滿,則將同步排空連接。 -->
    <!-- <max_threads_for_connection_collector>10</max_threads_for_connection_collector> -->

    <!-- 在內存受限的環境中,您可能必須將其設置為大於 1 的值。
      -->
    <max_server_memory_usage_to_ram_ratio>0.9</max_server_memory_usage_to_ram_ratio>

    <!-- 簡單的服務器範圍內內存分析器。在每個峰值分配步驟(以字節為單位)收集堆棧跟蹤。
         數據將存儲在 system.trace_log 表中,查詢 ID = 空字符串。
         零表示禁用。
      -->
    <total_memory_profiler_step>4194304</total_memory_profiler_step>

    <!-- 收集隨機分配和釋放,並將其寫入 system.trace_log,標記為 'MemorySample'。
         機率是對於每個分配/釋放,無論分配的大小。
         注意,只有當未跟踪的內存量超過未跟踪的內存限制時,才會進行取樣,
          默認為 4 MiB,但如果 'total_memory_profiler_step' 降低,則可以降低。
         您可能希望將 'total_memory_profiler_step' 設置為 1 以進行額外的細粒度取樣。
      -->
    <total_memory_tracker_sample_probability>0</total_memory_tracker_sample_probability>

    <!-- 設置打開文件的限制(默認:最大)。此設置在 Mac OS X 上是有意義的,因為 getrlimit() 無法檢索
         正確的最大值。 -->
    <!-- <max_open_files>262144</max_open_files> -->

    <!-- 用於 MergeTree 家族表的未壓縮數據塊的緩存大小。
         以字節為單位。緩存對於服務器是單一的。內存僅在需要時分配。
         當 'use_uncompressed_cache' 用戶設置打開時使用(默認關閉)。
         未壓縮緩存在非常短的查詢和少數情況下是有利的。

         注意:對於 lz4,未壓縮緩存可能毫無意義,因為內存帶寬
         在某些服務器配置上比多核解壓縮慢。
         啟用它有時會使查詢變慢。
      -->
    <uncompressed_cache_size>8589934592</uncompressed_cache_size>

    <!-- 用於 MergeTree 家族表的標記緩存的近似大小。
         以字節為單位。緩存對於服務器是單一的。內存僅在需要時分配。
         您不應降低此值。
      -->
    <mark_cache_size>5368709120</mark_cache_size>


    <!-- 如果啟用 `min_bytes_to_use_mmap_io` 設置,
         MergeTree 表中的數據可以使用 mmap 進行讀取,以避免從內核複製到用戶空間。
         這僅對大文件有意義,並且僅在數據位於頁面緩存中時有幫助。
         為了避免頻繁的 open/mmap/munmap/close 調用(由於隨後的頁面錯誤而非常昂貴)
         並重用來自多個線程和查詢的映射,
         維護映射文件的緩存。其大小是映射區域的數量(通常等於映射文件的數量)。
         可以在 system.metrics、system.metric_log 中通過 MMappedFiles、MMappedFileBytes 指標監控映射文件中的數據量
         以及在 system.asynchronous_metrics、system.asynchronous_metrics_log 中通過 MMapCacheCells 指標,
         還可以在 system.events、system.processes、system.query_log、system.query_thread_log、system.query_views_log 中通過
         CreatedReadBufferMMap、CreatedReadBufferMMapFailed、MMappedFileCacheHits、MMappedFileCacheMisses 事件監控。
         注意,映射文件中的數據量不會直接消耗內存,並且不計入查詢或服務器內存使用量 - 因為這部分內存可以像操作系統頁面緩存一樣被丟棄。
         在 MergeTree 中刪除舊部分時,自動丟棄緩存(文件關閉),
         也可以通過 SYSTEM DROP MMAP CACHE 查詢手動丟棄。
      -->
    <mmap_cache_size>1000</mmap_cache_size>

    <!-- 編譯表達式的緩存大小(以字節為單位)。-->
    <compiled_expression_cache_size>134217728</compiled_expression_cache_size>

    <!-- 編譯表達式的緩存大小(以元素為單位)。-->
    <compiled_expression_cache_elements_size>10000</compiled_expression_cache_elements_size>

    <!-- 數據目錄的路徑,帶有尾隨斜杠。 -->
    <path>/var/lib/clickhouse/</path>

    <!-- 用於處理困難查詢的臨時數據的路徑。 -->
    <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>

    <!-- 來自 <storage_configuration> 的臨時文件的策略。
         如果未設置,則使用 <tmp_path>,否則忽略 <tmp_path>。

         注意:
         - move_factor              被忽略
         - keep_free_space_bytes    被忽略
         - max_data_part_size_bytes 被忽略
         - 您必須在該策略中擁有恰好一個卷
    -->
    <!-- <tmp_policy>tmp</tmp_policy> -->

    <!-- 包含用戶提供的文件的目錄,這些文件可以通過 'file' 表函數訪問。 -->
    <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>

    <!-- LDAP 服務器定義。 -->
    <ldap_servers>
        <!-- 在這裡列出 LDAP 服務器及其連接參數,以便稍後 1) 將它們用作專用本地用戶的身份驗證器,
              這些用戶指定了 'ldap' 身份驗證機制而不是 'password',或 2) 將它們用作遠程用戶目錄。
             參數:
                host - LDAP 服務器主機名或 IP,此參數是必需的,不能為空。
                port - LDAP 服務器端口,如果 enable_tls 設置為 true,默認為 636,否則為 389。
                bind_dn - 用於構造要綁定的 DN 的模板。
                        在每次身份驗證嘗試期間,將通過用實際用戶名替換模板中的所有 '{user_name}' 子字符串來構造最終的 DN。
                user_dn_detection - 用於檢測綁定用戶的實際用戶 DN 的 LDAP 搜索參數的部分。
                        這主要用於在服務器為 Active Directory 時進行進一步的角色映射的搜索過濾器。
                         當替換 '{user_dn}' 子字符串時,將使用最終的用戶 DN。
                         默認情況下,用戶 DN 設置為等於綁定 DN,但一旦進行搜索,將更新為實際檢測到的用戶 DN 值。
                    base_dn - 用於構造 LDAP 搜索的基 DN 的模板。
                            在每次 LDAP 搜索期間,將通過用實際用戶名和綁定 DN 替換模板中的所有 '{user_name}' 和 '{bind_dn}' 子字符串來構造最終的 DN。
                    scope - LDAP 搜索的範圍。
                            接受的值為:'base'、'one_level'、'children'、'subtree'(默認)。
                    search_filter - 用於構造 LDAP 搜索的搜索過濾器的模板。
                            在每次 LDAP 搜索期間,將通過用實際用戶名、綁定 DN、用戶 DN 和基 DN 替換模板中的所有 '{user_name}'、'{bind_dn}'、'{user_dn}' 和 '{base_dn}' 子字符串來構造最終的過濾器。
                            注意,特殊字符必須在 XML 中正確轉義。
                verification_cooldown - 在成功綁定嘗試後的一段時間(以秒為單位),在此期間用戶將被認為已成功身份驗證,無需聯繫 LDAP 服務器。
                        指定 0(默認)以禁用緩存,並強制每次身份驗證請求都聯繫 LDAP 服務器。
                enable_tls - 觸發使用安全連接到 LDAP 服務器的標誌。
                        對於純文本(ldap://)協議,指定 'no'(不建議)。
                        對於 LDAP over SSL/TLS(ldaps://)協議,指定 'yes'(建議,默認)。
                        對於舊版 StartTLS 協議(純文本(ldap://)協議,升級到 TLS),指定 'starttls'。
                tls_minimum_protocol_version - SSL/TLS 的最小協議版本。
                        接受的值為:'ssl2'、'ssl3'、'tls1.0'、'tls1.1'、'tls1.2'(默認)。
                tls_require_cert - SSL/TLS 對等證書驗證行為。
                        接受的值為:'never'、'allow'、'try'、'demand'(默認)。
                tls_cert_file - 證書文件的路徑。
                tls_key_file - 證書密鑰文件的路徑。
                tls_ca_cert_file - CA 證書文件的路徑。
                tls_ca_cert_dir - 包含 CA 證書的目錄的路徑。
                tls_cipher_suite - 允許的密碼套件(以 OpenSSL 表示法)。
             示例:
                <my_ldap_server>
                    <host>localhost</host>
                    <port>636</port>
                    <bind_dn>uid={user_name},ou=users,dc=example,dc=com</bind_dn>
                    <verification_cooldown>300</verification_cooldown>
                    <enable_tls>yes</enable_tls>
                    <tls_minimum_protocol_version>tls1.2</tls_minimum_protocol_version>
                    <tls_require_cert>demand</tls_require_cert>
                    <tls_cert_file>/path/to/tls_cert_file</tls_cert_file>
                    <tls_key_file>/path/to/tls_key_file</tls_key_file>
                    <tls_ca_cert_file>/path/to/tls_ca_cert_file</tls_ca_cert_file>
                    <tls_ca_cert_dir>/path/to/tls_ca_cert_dir</tls_ca_cert_dir>
                    <tls_cipher_suite>ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384</tls_cipher_suite>
                </my_ldap_server>
             示例(典型的 Active Directory,配置了用戶 DN 檢測以進行進一步的角色映射):
                <my_ad_server>
                    <host>localhost</host>
                    <port>389</port>
                    <bind_dn>EXAMPLE\{user_name}</bind_dn>
                    <user_dn_detection>
                        <base_dn>CN=Users,DC=example,DC=com</base_dn>
                        <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
                    </user_dn_detection>
                    <enable_tls>no</enable_tls>
                </my_ad_server>
        -->
    </ldap_servers>

    <!-- 要為 HTTP 請求啟用 Kerberos 身份驗證支持(GSS-SPNEGO),對於那些明確配置為
          通過 Kerberos 進行身份驗證的用戶,在這裡定義一個單一的 'kerberos' 部分。
         參數:
            principal - 典型的服務主體名稱,將在接受安全上下文時獲取並使用。
                    此參數是可選的,如果省略,將使用默認主體。
                    此參數不能與 'realm' 參數一起指定。
            realm - 將用於限制身份驗證的領域,僅限於發起者的領域與之匹配的請求。
                    此參數是可選的,如果省略,則不會應用額外的領域過濾。
                    此參數不能與 'principal' 參數一起指定。
         示例:
            <kerberos />
         示例:
            <kerberos>
                <principal>HTTP/[email protected]</principal>
            </kerberos>
         示例:
            <kerberos>
                <realm>EXAMPLE.COM</realm>
            </kerberos>
    -->

    <!-- 用於讀取用戶、角色、訪問權限、設置配置文件、配額的來源。 -->
    <user_directories>
        <users_xml>
            <!-- 預定義用戶的配置文件的路徑。 -->
            <path>users.xml</path>
        </users_xml>
        <local_directory>
            <!-- 存儲由 SQL 命令創建的用戶的文件夾的路徑。 -->
            <path>/var/lib/clickhouse/access/</path>
        </local_directory>

        <!-- 要將 LDAP 服務器作為未在本地定義的用戶的遠程用戶目錄,請定義一個單一的 'ldap' 部分
              及以下參數:
                server - 在上面的 'ldap_servers' 配置部分中定義的 LDAP 服務器名稱之一。
                        此參數是必需的,不能為空。
                roles - 包含將分配給從 LDAP 服務器檢索的每個用戶的本地定義角色的列表的部分。
                        如果此處未指定角色或在角色映射期間未分配角色(如下所述),則用戶將無法在身份驗證後執行任何操作。
                role_mapping - 包含 LDAP 搜索參數和映射規則的部分。
                        當用戶身份驗證時,仍然綁定到 LDAP,將使用 search_filter 和登錄用戶的名稱執行 LDAP 搜索。
                        在該搜索期間找到的每個條目中,提取指定屬性的值。對於每個具有指定前綴的屬性值,將刪除前綴,並將其餘值作為 ClickHouse 中定義的本地角色的名稱,預期在 CREATE ROLE 命令之前創建。
                        可以在同一 'ldap' 部分中定義多個 'role_mapping' 部分。所有這些都將被應用。
                    base_dn - 用於構造 LDAP 搜索的基 DN 的模板。
                            在每次 LDAP 搜索期間,將通過用實際用戶名、綁定 DN 和用戶 DN 替換模板中的所有 '{user_name}'、'{bind_dn}' 和 '{user_dn}' 子字符串來構造最終的 DN。
                    scope - LDAP 搜索的範圍。
                            接受的值為:'base'、'one_level'、'children'、'subtree'(默認)。
                    search_filter - 用於構造 LDAP 搜索的搜索過濾器的模板。
                            在每次 LDAP 搜索期間,將通過用實際用戶名、綁定 DN、用戶 DN 和基 DN 替換模板中的所有 '{user_name}'、'{bind_dn}'、'{user_dn}' 和 '{base_dn}' 子字符串來構造最終的過濾器。
                            注意,特殊字符必須在 XML 中正確轉義。
                    attribute - LDAP 搜索返回的值的屬性名稱。默認為 'cn'。
                    prefix - 預期在 LDAP 搜索返回的原始字符串列表中的每個字符串前面的前綴。前綴將從原始字符串中刪除,結果字符串將被視為本地角色名稱。默認為空。
             示例:
                <ldap>
                    <server>my_ldap_server</server>
                    <roles>
                        <my_local_role1 />
                        <my_local_role2 />
                    </roles>
                    <role_mapping>
                        <base_dn>ou=groups,dc=example,dc=com</base_dn>
                        <scope>subtree</scope>
                        <search_filter>(&amp;(objectClass=groupOfNames)(member={bind_dn}))</search_filter>
                        <attribute>cn</attribute>
                        <prefix>clickhouse_</prefix>
                    </role_mapping>
                </ldap>
             示例(典型的 Active Directory,角色映射依賴於檢測到的用戶 DN):
                <ldap>
                    <server>my_ad_server</server>
                    <role_mapping>
                        <base_dn>CN=Users,DC=example,DC=com</base_dn>
                        <attribute>CN</attribute>
                        <scope>subtree</scope>
                        <search_filter>(&amp;(objectClass=group)(member={user_dn}))</search_filter>
                        <prefix>clickhouse_</prefix>
                    </role_mapping>
                </ldap>
        -->
    </user_directories>

    <!-- 默認設置配置文件。 -->
    <default_profile>default</default_profile>

    <!-- 用戶定義設置的前綴的以逗號分隔的列表。 -->
    <custom_settings_prefixes></custom_settings_prefixes>

    <!-- 系統設置配置文件。這些設置由內部過程(分佈式 DDL 工作程序等)使用。 -->
    <!-- <system_profile>default</system_profile> -->

    <!-- 緩衝區設置配置文件。
         這些設置由緩衝存儲用於將數據刷新到基礎表。
         默認:來自 system_profile 指令。
    -->
    <!-- <buffer_profile>default</buffer_profile> -->

    <!-- 默認數據庫。 -->
    <default_database>default</default_database>

    <!-- 服務器時區可以在這裡設置。

         當在字符串和 DateTime 類型之間轉換時使用時區,
          當以文本格式打印 DateTime 和從文本解析 DateTime 時,
          它在日期和時間相關函數中使用,如果未作為參數傳遞特定時區。

         時區指定為 IANA 時區數據庫中的標識符,例如 UTC 或 Africa/Abidjan。
         如果未指定,則使用服務器啟動時的系統時區。

         請注意,服務器可能會顯示時區別名,而不是指定的名稱。
         示例:W-SU 是 Europe/Moscow 的別名,Zulu 是 UTC 的別名。
    -->
    <!-- <timezone>Europe/Moscow</timezone> -->

    <!-- 您可以在這裡指定 umask(請參見 "man umask")。服務器將在啟動時應用它。
         數字始終解析為八進制。默認 umask 為 027(其他用戶無法讀取日誌、數據文件等;組只能讀取)。
    -->
    <!-- <umask>022</umask> -->

    <!-- 在啟動後執行 mlockall 以降低首次查詢延遲
          並防止 clickhouse 可執行文件在高 IO 負載下被換出。
         建議啟用此選項,但會導致啟動時間增加幾秒鐘。
    -->
    <mlock_executable>true</mlock_executable>

    <!-- 使用巨大頁面重新分配機器代碼("text")。高度實驗性。 -->
    <remap_executable>false</remap_executable>

    <![CDATA[
         如果要使用 JDBC 表引擎和函數,請取消下面的註釋。

         要安裝並在後台運行 JDBC 桥接:
         * [Debian/Ubuntu]
           export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
           export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '<release>' | sed -e 's|.*>\(.*\)<.*|\1|')
           wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
           apt install --no-install-recommends -f ./clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
           clickhouse-jdbc-bridge &

         * [CentOS/RHEL]
           export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
           export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '<release>' | sed -e 's|.*>\(.*\)<.*|\1|')
           wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
           yum localinstall -y clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
           clickhouse-jdbc-bridge &

         請參閱 https://github.com/ClickHouse/clickhouse-jdbc-bridge#usage 獲取更多信息。
    ]]>
    <!--
    <jdbc_bridge>
        <host>127.0.0.1</host>
        <port>9019</port>
    </jdbc_bridge>
    -->

    <!-- 可以在分佈式表中使用的集群的配置。
         https://clickhouse.com/docs/en/operations/table_engines/distributed/
      -->
    <remote_servers>
        <default_cluster>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck1</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck2</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck3</host>
                    <port>9000</port>
                </replica>
            </shard>
        </default_cluster>
    </remote_servers>

    <macros>
        <replica>ck1</replica>
        <shard>01</shard>
        <layer>01</layer>
    </macros>


    <!-- 允許在與 URL 相關的存儲引擎和表函數中使用的主機列表。
        如果此部分不在配置中,則允許所有主機。
    -->
    <!--<remote_url_allow_hosts>-->
    <!-- 主機應該與 URL 中的指定完全相同。名稱在 DNS 解析之前進行檢查。
        示例:"yandex.ru"、"yandex.ru." 和 "www.yandex.ru" 是不同的主機。
                如果在 URL 中明確指定了端口,則檢查主機:端口作為整體。
                如果此處指定的主機沒有端口,則允許此主機的任何端口。
                "yandex.ru" -> "yandex.ru:443"、"yandex.ru:80" 等是允許的,但 "yandex.ru:80" -> 僅允許 "yandex.ru:80"。
        如果主機指定為 IP 地址,則按 URL 中指定的方式進行檢查。示例:"[2a02:6b8:a::a]"。
        如果有重定向並且啟用了對重定向的支持,則檢查每個重定向(位置字段)。
        主機應使用主機 xml 標籤指定:
                <host>yandex.ru</host>
    -->

    <!-- 可以指定正則表達式。使用 RE2 引擎進行正則表達式。
        正則表達式不對齊:不要忘記添加 ^ 和 $。也不要忘記轉義點(.)元字符
        (忘記這樣做是常見的錯誤來源)。
    -->
    <!--</remote_url_allow_hosts>-->

    <!-- 如果元素具有 'incl' 屬性,則將使用對應的替換值。
         默認情況下,替換文件的路徑為 /etc/metrika.xml。可以在 'include_from' 元素的配置中更改。
         替換值在該文件的 /clickhouse/name_of_substitution 元素中指定。
      -->

    <!-- ZooKeeper 用於存儲有關副本的元數據,當使用複製表時。
         可選。如果您不使用複製表,則可以省略該部分。

         查看 https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/
      -->

    <zookeeper>
        <node>
            <host>zookeeper1</host>
            <port>2181</port>
        </node>
    </zookeeper>

    <!-- 複製表的參數替換。
          可選。如果您不使用複製表,則可以省略該部分。

         查看 https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/#creating-replicated-tables
      -->
    <!--
    <macros>
        <shard>01</shard>
        <replica>example01-01-1</replica>
    </macros>
    -->


    <!-- 嵌入式字典的重新加載間隔,以秒為單位。默認:3600。 -->
    <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>


    <!-- 最大會話超時,以秒為單位。默認:3600。 -->
    <max_session_timeout>3600</max_session_timeout>

    <!-- 默認會話超時,以秒為單位。默認:60。 -->
    <default_session_timeout>60</default_session_timeout>

    <!-- 將數據發送到 Graphite 以進行監控。可以定義幾個部分。 -->
    <!--
        interval - 每 X 秒發送一次
        root_path - 鍵的前綴
        hostname_in_path - 將主機名附加到 root_path(默認 = true)
        metrics - 從表 system.metrics 發送數據
        events - 從表 system.events 發送數據
        asynchronous_metrics - 從表 system.asynchronous_metrics 發送數據
    -->
    <!--
    <graphite>
        <host>localhost</host>
        <port>42000</port>
        <timeout>0.1</timeout>
        <interval>60</interval>
        <root_path>one_min</root_path>
        <hostname_in_path>true</hostname_in_path>

        <metrics>true</metrics>
        <events>true</events>
        <events_cumulative>false</events_cumulative>
        <asynchronous_metrics>true</asynchronous_metrics>
    </graphite>
    <graphite>
        <host>localhost</host>
        <port>42000</port>
        <timeout>0.1</timeout>
        <interval>1</interval>
        <root_path>one_sec</root_path>

        <metrics>true</metrics>
        <events>true</events>
        <events_cumulative>false</events_cumulative>
        <asynchronous_metrics>false</asynchronous_metrics>
    </graphite>
    -->

    <!-- 為 Prometheus 監控提供服務端點。 -->
    <!--
        endpoint - 指標路徑(相對於根,從 "/" 開始)
        port - 設置服務器的端口。如果未定義或為 0,則使用 http_port
        metrics - 從表 system.metrics 發送數據
        events - 從表 system.events 發送數據
        asynchronous_metrics - 從表 system.asynchronous_metrics 發送數據
        status_info - 從 CH 的不同組件發送數據,例如:字典狀態
    -->
    <!--
    <prometheus>
        <endpoint>/metrics</endpoint>
        <port>9363</port>

        <metrics>true</metrics>
        <events>true</events>
        <asynchronous_metrics>true</asynchronous_metrics>
        <status_info>true</status_info>
    </prometheus>
    -->

    <!-- 查詢日誌。僅用於設置 log_queries = 1 的查詢。 -->
    <query_log>
        <!-- 要插入數據的表。如果表不存在,將創建它。
             當查詢日誌結構在系統更新後發生變化時,
              舊表將被重命名,並自動創建新表。
        -->
        <database>system</database>
        <table>query_log</table>
        <!--
            PARTITION BY expr: https://clickhouse.com/docs/en/table_engines/mergetree-family/custom_partitioning_key/
            示例:
                event_date
                toMonday(event_date)
                toYYYYMM(event_date)
                toStartOfHour(event_time)
        -->
        <partition_by>toYYYYMM(event_date)</partition_by>
        <!--
            表 TTL 規範:https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl
            示例:
                event_date + INTERVAL 1 WEEK
                event_date + INTERVAL 7 DAY DELETE
                event_date + INTERVAL 2 WEEK TO DISK 'bbb'

        <ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
        -->

        <!-- 您可以提供完整的引擎表達式(以 ENGINE = 開頭)作為 partition_by 的替代,
             示例: <engine>ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 1024</engine>
          -->

        <!-- 刷新數據的間隔。 -->
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_log>

    <!-- 跟蹤日誌。存儲由查詢分析器收集的堆棧跟蹤。
         請參見 query_profiler_real_time_period_ns 和 query_profiler_cpu_time_period_ns 設置。 -->
    <trace_log>
        <database>system</database>
        <table>trace_log</table>

        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </trace_log>

    <!-- 查詢線程日誌。包含有關參與查詢執行的所有線程的信息。
         僅用於設置 log_query_threads = 1 的查詢。 -->
    <query_thread_log>
        <database>system</database>
        <table>query_thread_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_thread_log>

    <!-- 查詢視圖日誌。包含有關與查詢相關的所有依賴視圖的信息。
         僅用於設置 log_query_views = 1 的查詢。 -->
    <query_views_log>
        <database>system</database>
        <table>query_views_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_views_log>

    <!-- 取消註釋以使用部分日誌。
         部分日誌包含有關 MergeTree 表中所有操作的部分的信息(創建、刪除、合併、下載)。-->
    <part_log>
        <database>system</database>
        <table>part_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </part_log>

    <!-- 取消註釋以將文本日誌寫入表中。
         文本日誌包含來自普通服務器日誌的所有信息,但以結構化和高效的方式存儲。
         發送到表中的消息的級別可以限制(<level>),如果未指定,則所有消息將發送到表中。
    <text_log>
        <database>system</database>
        <table>text_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <level></level>
    </text_log>
    -->

    <!-- 指標日誌包含具有 ProfileEvents、CurrentMetrics 當前值的行,這些值是以 "collect_interval_milliseconds" 間隔收集的。 -->
    <metric_log>
        <database>system</database>
        <table>metric_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <collect_interval_milliseconds>1000</collect_interval_milliseconds>
    </metric_log>

    <!--
        異步指標日誌包含來自
        system.asynchronous_metrics 的指標值。
    -->
    <asynchronous_metric_log>
        <database>system</database>
        <table>asynchronous_metric_log</table>
        <!--
            異步指標每分鐘更新一次,因此
            沒有必要更頻繁地刷新。
        -->
        <flush_interval_milliseconds>7000</flush_interval_milliseconds>
    </asynchronous_metric_log>

    <!--
        OpenTelemetry 日誌包含 OpenTelemetry 跟蹤跨度。
    -->
    <opentelemetry_span_log>
        <!--
            默認的表創建代碼不足,這個 <engine> 規範
            是一個變通方法。此日誌沒有 'event_time',但有兩個時間,
            開始和結束。按結束時間排序,以避免將數據插入
            過去太遠的時間(可能我們有時可以插入一個跨度
            比表中最後一個跨度早幾秒,因為幾個跨度並行插入之間的競爭)。這為跨度提供了一個
            全局順序,我們可以用來例如重試插入到某些外部
            系統。
        -->
        <engine>
            engine MergeTree
            partition by toYYYYMM(finish_date)
            order by (finish_date, finish_time_us, trace_id)
        </engine>
        <database>system</database>
        <table>opentelemetry_span_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </opentelemetry_span_log>


    <!-- 崩潰日誌。存儲致命錯誤的堆棧跟蹤。
         此表通常是空的。 -->
    <crash_log>
        <database>system</database>
        <table>crash_log</table>

        <partition_by/>
        <flush_interval_milliseconds>1000</flush_interval_milliseconds>
    </crash_log>

    <!-- 會話日誌。存儲用戶登錄(成功或失敗)和登出事件。 -->
    <session_log>
        <database>system</database>
        <table>session_log</table>

        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </session_log>

    <!-- 嵌入式字典的參數,用於 Yandex.Metrica。
         查看 https://clickhouse.com/docs/en/dicts/internal_dicts/
    -->

    <!-- 區域層次結構文件的路徑。 -->
    <!-- <path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file> -->

    <!-- 包含區域名稱的文件的目錄的路徑 -->
    <!-- <path_to_regions_names_files>/opt/geo/</path_to_regions_names_files> -->


    <!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
    <!-- 自定義 TLD 列表。
         格式: <name>/path/to/file</name>

         變更將在服務器重啟後應用。
         列表的路徑位於 top_level_domains_path(見上文)。
    -->
    <top_level_domains_lists>
        <!--
        <public_suffix_list>/path/to/public_suffix_list.dat</public_suffix_list>
        -->
    </top_level_domains_lists>

    <!-- 外部字典的配置。請參見:
         https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts
    -->
    <dictionaries_config>*_dictionary.xml</dictionaries_config>

    <!-- 用戶定義可執行函數的配置 -->
    <user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

    <!-- 取消註釋以使數據壓縮效果提高 30-100%。
         如果您剛開始使用 ClickHouse,請不要這樣做。
      -->
    <!--
    <compression>
        <!- - 一組變體。按順序檢查。最後匹配的情況獲勝。如果沒有匹配,將使用 lz4。 - ->
        <case>

            <!- - 條件。必須滿足所有條件。某些條件可以省略。 - ->
            <min_part_size>10000000000</min_part_size>        <!- - 最小部分大小(以字節為單位)。 - ->
            <min_part_size_ratio>0.01</min_part_size_ratio>   <!- - 部分的最小大小相對於整個表的大小。 - ->

            <!- - 使用的壓縮方法。 - ->
            <method>zstd</method>
        </case>
    </compression>
    -->

    <!-- 加密的配置。服務器在啟動時執行命令以
         獲取加密密鑰,如果定義了這樣的命令,
         否則將禁用加密編解碼器。該
         命令通過 /bin/sh 執行,預期將寫入
         Base64 編碼的密鑰到 stdout。 -->
    <encryption_codecs>
        <!-- aes_128_gcm_siv -->
        <!-- 獲取來自 env 的十六進制密鑰的示例 -->
        <!-- 代碼應使用此密鑰,並在其長度不為 16 字節時引發異常 -->
        <!--key_hex from_env="..."></key_hex -->

        <!-- 多個十六進制密鑰的示例。它們可以從 env 中導入或在配置中寫下 -->
        <!-- 代碼應使用這些密鑰,並在其長度不為 16 字節時引發異常 -->
        <!-- key_hex id="0">...</key_hex -->
        <!-- key_hex id="1" from_env=".."></key_hex -->
        <!-- key_hex id="2">...</key_hex -->
        <!-- current_key_id>2</current_key_id -->

        <!-- 獲取來自配置的十六進制密鑰的示例 -->
        <!-- 代碼應使用此密鑰,並在其長度不為 16 字節時引發異常 -->
        <!-- key>...</key -->

        <!-- 添加隨機數的示例 -->
        <!-- nonce>...</nonce -->

        <!-- /aes_128_gcm_siv -->
    </encryption_codecs>

    <!-- 允許在集群上執行分佈式 DDL 查詢(CREATE、DROP、ALTER、RENAME)。
         只有在啟用 ZooKeeper 時才有效。如果不需要此功能,請註釋掉它。 -->
    <distributed_ddl>
        <!-- 在 ZooKeeper 中的 DDL 查詢隊列的路徑 -->
        <path>/clickhouse/task_queue/ddl</path>

        <!-- 將使用此配置文件中的設置來執行 DDL 查詢 -->
        <!-- <profile>default</profile> -->

        <!-- 控制可以同時運行多少 ON CLUSTER 查詢。 -->
        <!-- <pool_size>1</pool_size> -->

        <!--
             清理設置(活動任務不會被刪除)
        -->

        <!-- 控制任務 TTL(默認為 1 週) -->
        <!-- <task_max_lifetime>604800</task_max_lifetime> -->

        <!-- 控制應該多頻繁執行清理(以秒為單位) -->
        <!-- <cleanup_delay_period>60</cleanup_delay_period> -->

        <!-- 控制隊列中可以有多少任務 -->
        <!-- <max_tasks_in_queue>1000</max_tasks_in_queue> -->
    </distributed_ddl>

    <!-- 用於微調 MergeTree 表的設置。請參見源代碼中的文檔,位於 MergeTreeSettings.h -->
    <!--
    <merge_tree>
        <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
    </merge_tree>
    -->

    <!-- 防止意外 DROP。
         如果 MergeTree 表的大小大於 max_table_size_to_drop(以字節為單位),則無法使用任何 DROP 查詢刪除該表。
         如果您想刪除一個表而不想更改 clickhouse-server 配置,則可以創建特殊文件 <clickhouse-path>/flags/force_drop_table 並執行一次 DROP。
         默認情況下,max_table_size_to_drop 為 50GB;max_table_size_to_drop=0 允許刪除任何表。
         max_partition_size_to_drop 也是如此。
         取消註釋以禁用保護。
    -->
    <!-- <max_table_size_to_drop>0</max_table_size_to_drop> -->
    <!-- <max_partition_size_to_drop>0</max_partition_size_to_drop> -->

    <!-- GraphiteMergeTree 表引擎的參數示例 -->
    <graphite_rollup_example>
        <pattern>
            <regexp>click_cost</regexp>
            <function>any</function>
            <retention>
                <age>0</age>
                <precision>3600</precision>
            </retention>
            <retention>
                <age>86400</age>
                <precision>60</precision>
            </retention>
        </pattern>
        <default>
            <function>max</function>
            <retention>
                <age>0</age>
                <precision>60</precision>
            </retention>
            <retention>
                <age>3600</age>
                <precision>300</precision>
            </retention>
            <retention>
                <age>86400</age>
                <precision>3600</precision>
            </retention>
        </default>
    </graphite_rollup_example>

    <!-- 在 <clickhouse-path> 中包含用於各種輸入格式的模式文件的目錄。
         如果不存在,將創建該目錄。
      -->
    <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>

    <!-- 默認查詢掩碼規則,匹配的行將在日誌中替換為其他內容
        (文本日誌和 system.query_log)。
        name - 規則的名稱(可選)
        regexp - 兼容 RE2 的正則表達式(必需)
        replace - 敏感數據的替換字符串(可選,默認為六個星號)
    -->
    <query_masking_rules>
        <rule>
            <name>隱藏加密/解密參數</name>
            <regexp>((?:aes_)?(?:encrypt|decrypt)(?:_mysql)?)\s*\(\s*(?:'(?:\\'|.)+'|.*?)\s*\)</regexp>
            <!-- 或更安全,但也更具侵入性:
                (aes_\w+)\s*\(.*\)
            -->
            <replace>\1(???)</replace>
        </rule>
    </query_masking_rules>

    <!-- 取消註釋以使用自定義 http 處理程序。
        規則從上到下檢查,第一個匹配運行處理程序
            url - 匹配請求 URL,您可以使用 'regex:' 前綴來使用正則匹配(可選)
            methods - 匹配請求方法,您可以使用逗號分隔多個方法匹配(可選)
            headers - 匹配請求標頭,匹配每個子元素(子元素名稱為標頭名稱),您可以使用 'regex:' 前綴來使用正則匹配(可選)
        handler 是請求處理程序
            type - 支持的類型:static、dynamic_query_handler、predefined_query_handler
            query - 與 predefined_query_handler 類型一起使用,當處理程序被調用時執行查詢
            query_param_name - 與 dynamic_query_handler 類型一起使用,提取並執行與 HTTP 請求參數中的 <query_param_name> 值相對應的值
            status - 與 static 類型一起使用,響應狀態碼
            content_type - 與 static 類型一起使用,響應內容類型
            response_content - 與 static 類型一起使用,發送到客戶端的響應內容,當使用前綴 'file://' 或 'config://' 時,從文件或配置中查找內容發送到客戶端。

    <http_handlers>
        <rule>
            <url>/</url>
            <methods>POST,GET</methods>
            <headers><pragma>no-cache</pragma></headers>
            <handler>
                <type>dynamic_query_handler</type>
                <query_param_name>query</query_param_name>
            </handler>
        </rule>

        <rule>
            <url>/predefined_query</url>
            <methods>POST,GET</methods>
            <handler>
                <type>predefined_query_handler</type>
                <query>SELECT * FROM system.settings</query>
            </handler>
        </rule>

        <rule>
            <handler>
                <type>static</type>
                <status>200</status>
                <content_type>text/plain; charset=UTF-8</content_type>
                <response_content>config://http_server_default_response</response_content>
            </handler>
        </rule>
    </http_handlers>
    -->

    <send_crash_reports>
        <!-- 將 <enabled> 更改為 true 允許將崩潰報告發送到 -->
        <!-- ClickHouse 核心開發團隊通過 Sentry https://sentry.io -->
        <!-- 在預生產環境中這樣做是非常感謝的 -->
        <enabled>false</enabled>
        <!-- 如果您不希望將服務器主機名附加到崩潰報告中,請將 <anonymize> 更改為 true -->
        <anonymize>false</anonymize>
        <!-- 默認端點應僅在您有 -->
        <!-- 一些內部工程師或雇用顧問將為您調試 ClickHouse 問題時更改為不同的 Sentry DSN -->
        <endpoint></endpoint>
    </send_crash_reports>

    <!-- 取消註釋以禁用 ClickHouse 內部 DNS 緩存。 -->
    <!-- <disable_internal_dns_cache>1</disable_internal_dns_cache> -->

    <!-- 您還可以這樣配置 rocksdb: -->
    <!--
    <rocksdb>
        <options>
            <max_background_jobs>8</max_background_jobs>
        </options>
        <column_family_options>
            <num_levels>2</num_levels>
        </column_family_options>
        <tables>
            <table>
                <name>TABLE</name>
                <options>
                    <max_background_jobs>8</max_background_jobs>
                </options>
                <column_family_options>
                    <num_levels>2</num_levels>
                </column_family_options>
            </table>
        </tables>
    </rocksdb>
    -->
    <timezone>Asia/Shanghai</timezone>
</clickhouse>

啟動命令#

docker-compose up -d

TODO#

現在配置的 zookeeper 仍然是單機部署的,有空看看部署個 zookeeper 集群怎麼配置

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。