跳到主要内容
跳到主要内容

扩展

描述

此示例架构设计用于提供可扩展性。它包括三个节点:两个结合了 ClickHouse 和协调功能(ClickHouse Keeper)的服务器,以及一个仅有 ClickHouse Keeper 的第三个服务器,以完成三者的法定人数。在该示例中,我们将创建一个数据库、表和一个分布式表,以查询两个节点上的数据。

级别:基础

Terminology

Replica

データのコピー。ClickHouse は常にデータのコピーを少なくとも 1 つ持っており、最小限の レプリカ の数は 1 つです。これは重要な詳細であり、データのオリジナルコピーをレプリカとしてカウントすることに慣れていないかもしれませんが、ClickHouse のコードとドキュメントで使用される用語です。データの 2 番目のレプリカを追加することにより、フォールトトレランスを提供します。

Shard

データのサブセット。ClickHouse は常にデータのためのシャードを少なくとも 1 つ持っているため、データを複数のサーバーに分割しない場合、データは 1 つのシャードに格納されます。データを複数のサーバーにシャーディングすることで、単一のサーバーの容量を超えた場合に負荷を分散させることができます。宛先サーバーは シャーディングキー によって決定され、分散テーブルを作成する際に定義されます。シャーディングキーはランダムであったり、ハッシュ関数 の出力として定義されることがあります。シャーディングに関する導入例では、rand() をシャーディングキーとして使用し、異なるシャーディングキーを選択するタイミングと方法についてのさらなる情報を提供します。

Distributed coordination

ClickHouse Keeper はデータレプリケーションおよび分散DDLクエリ実行のためのコーディネーションシステムを提供します。ClickHouse Keeper は Apache ZooKeeper と互換性があります。

环境

架构图

节点描述
chnode1数据 + ClickHouse Keeper
chnode2数据 + ClickHouse Keeper
chnode3用于 ClickHouse Keeper 的法定人数
备注

在生产环境中,我们强烈建议 ClickHouse Keeper 运行在专用主机上。此基本配置在 ClickHouse 服务器进程内运行 Keeper 功能。有关独立部署 ClickHouse Keeper 的说明,请参见 安装文档

安装

按照 您的归档类型的说明 在三台服务器上安装 ClickHouse(.deb、.rpm、.tar.gz 等)。对于此示例,您将依次在所有三台机器上遵循 ClickHouse 服务器和客户端的安装说明。

编辑配置文件

best practices

ClickHouse Serverの設定を行う際、設定ファイルを追加または編集する場合は次の点に注意してください:

  • /etc/clickhouse-server/config.d/ ディレクトリにファイルを追加する
  • /etc/clickhouse-server/users.d/ ディレクトリにファイルを追加する
  • /etc/clickhouse-server/config.xml ファイルはそのままにする
  • /etc/clickhouse-server/users.xml ファイルはそのままにする

chnode1 配置

对于 chnode1,有五个配置文件。您可以选择将这些文件合并为一个文件,但为了文档的清晰性,可以单独查看它们。当您浏览配置文件时,您会发现 chnode1chnode2 的大部分配置是相同的;差异将被强调。

网络和日志配置

这些值可以根据您的需要进行自定义。此示例配置为您提供一个在 1000M 时滚动的调试日志三次。ClickHouse 将在端口 8123 和 9000 上监听 IPv4 网络,并将使用端口 9009 进行服务器之间的通信。

ClickHouse Keeper 配置

ClickHouse Keeper 为数据复制和分布式 DDL 查询执行提供协调系统。ClickHouse Keeper 与 Apache ZooKeeper 兼容。此配置在端口 9181 上启用 ClickHouse Keeper。突出显示的行指定此 Keeper 实例的 server_id 为 1。这是三个服务器中 enable-keeper.xml 文件的唯一差异。chnode2server_id 将设置为 2,而 chnode3server_id 将设置为 3。所有三台服务器上的 raft 配置部分是相同的,下面高亢显示 server_id 与 raft 配置中的 server 实例之间的关系。

备注

如果由于任何原因替换或重建了 Keeper 节点,请不要重复使用现有的 server_id。例如,若 server_id2 的 Keeper 节点被重建,请将其 server_id 设置为 4 或更高。

宏配置

shardreplica 减少了分布式 DDL 的复杂性。配置的值会自动替换到您的 DDL 查询中,从而简化您的 DDL。此配置的宏指定了每个节点的分片和副本编号。 在这个 2 个分片 1 个副本的示例中,副本宏在 chnode1chnode2 上为 replica_1,因为只有一个副本。分片宏在 chnode1 上为 1,在 chnode2 上为 2

复制和分片配置

从顶部开始:

  • XML 的 remote_servers 部分指定环境中的每个集群。属性 replace=true 将默认 ClickHouse 配置中的示例 remote_servers 替换为此文件中指定的 remote_servers 配置。没有此属性,此文件中的远程服务器将被附加到默认中的示例列表。
  • 在此示例中,有一个名为 cluster_2S_1R 的集群。
  • 创建了一个名为 cluster_2S_1R 的集群的密钥,值为 mysecretphrase。该密钥在环境中的所有远程服务器之间共享,以确保正确的服务器连接在一起。
  • 集群 cluster_2S_1R 有两个分片,并且每个分片有一个副本。查看本文档开头的架构图,并将其与下面 XML 中的两个 shard 定义进行比较。在每个分片定义中都有一个副本。该副本是该特定分片的。为此副本指定了主机和端口。配置中第一个分片的副本存储在 chnode1 上,第二个分片的副本存储在 chnode2 上。
  • 分片的内部复制设置为 true。每个分片可以在配置文件中定义 internal_replication 参数。如果将此参数设置为 true,则写入操作将选择第一个健康的副本并将数据写入其上。

配置使用 Keeper

在上面的几个文件中配置了 ClickHouse Keeper。此配置文件 use-keeper.xml 正在配置 ClickHouse 服务器使用 ClickHouse Keeper 进行复制和分布式 DDL 的协调。此文件指定 ClickHouse 服务器应在节点 chnode1 - 3 上使用端口 9181 上的 Keeper,该文件在 chnode1chnode2 上是相同的。

chnode2 配置

由于 chnode1chnode2 的配置非常相似,这里将仅指出差异。

网络和日志配置

ClickHouse Keeper 配置

此文件包含 chnode1chnode2 之间的两个差异之一。在 Keeper 配置中,server_id 设置为 2

宏配置

宏配置是 chnode1chnode2 之间的差异之一。在此节点上,shard 设置为 2

复制和分片配置

配置使用 Keeper

chnode3 配置

由于 chnode3 不存储数据,仅用于 ClickHouse Keeper 提供法定人数的第三个节点,chnode3 只有两个配置文件,一个用于配置网络和日志,另一个用于配置 ClickHouse Keeper。

网络和日志配置

ClickHouse Keeper 配置

测试

  1. 连接到 chnode1 并验证上述配置的集群 cluster_2S_1R 是否存在
  1. 在集群上创建一个数据库
  1. 在集群上创建一个使用 MergeTree 表引擎的表。
备注

我们无需在表引擎上指定参数,因为这些参数将根据我们的宏自动定义。

  1. 连接到 chnode1 并插入一行
  1. 连接到 chnode2 并插入一行
  1. 连接到 chnode1chnode2 其中一个节点,您将只看到在该节点上插入的表中的行。 例如,在 chnode2
  1. 创建一个分布式表以查询两个节点上的两个分片。 (在此示例中,rand() 函数设置为分片键,以便随机分配每个插入)
  1. 连接到 chnode1chnode2,并查询分布式表以查看两个行。

详细信息: