扩展
描述
该例子架构旨在提供可扩展性。它包括三个节点:两个组合的 ClickHouse 和协调(ClickHouse Keeper)服务器,以及一个只有 ClickHouse Keeper 的第三个服务器,以完成三个节点的法定人数。在该示例中,我们将创建一个数据库、表,以及一个可以在两个节点上查询数据的分布式表。
级别:基础
术语
副本
数据的副本。ClickHouse始终至少有一个数据副本,因此副本的最小数量为1。这是一个重要细节,您可能不习惯将数据的原始副本视为副本,但这是ClickHouse代码和文档中使用的术语。添加数据的第二个副本可以提供故障容错能力。
分片
数据的子集。ClickHouse始终至少为您的数据提供一个分片,因此如果您不将数据拆分到多个服务器上,您的数据将存储在一个分片中。在多个服务器上对数据进行分片可以在超出单个服务器的容量时分担负载。目标服务器由分片键确定,并在创建分布式表时定义。分片键可以是随机的,也可以是哈希函数的输出。涉及分片的部署示例将使用 rand()
作为分片键,并提供有关何时以及如何选择不同分片键的进一步信息。
分布式协调
ClickHouse Keeper提供数据复制和分布式DDL查询执行的协调系统。ClickHouse Keeper与Apache ZooKeeper兼容。
环境
架构图

节点 | 描述 |
---|---|
chnode1 | 数据 + ClickHouse Keeper |
chnode2 | 数据 + ClickHouse Keeper |
chnode3 | 用于 ClickHouse Keeper 法定人数 |
在生产环境中,我们强烈建议 ClickHouse Keeper 在专用主机上运行。该基本配置在 ClickHouse Server 进程中运行 Keeper 功能。有关独立部署 ClickHouse Keeper 的说明,请参阅 安装文档。
安装
在三台服务器上按照 针对您存档类型的说明 安装 ClickHouse(.deb、.rpm、.tar.gz 等)。在此示例中,您将在所有三台机器上遵循 ClickHouse Server 和 Client 的安装说明。
编辑配置文件
在通过添加或编辑配置文件来配置 ClickHouse Server 时,您应该:
- 将文件添加到
/etc/clickhouse-server/config.d/
目录 - 将文件添加到
/etc/clickhouse-server/users.d/
目录 - 保持
/etc/clickhouse-server/config.xml
文件不变 - 保持
/etc/clickhouse-server/users.xml
文件不变
chnode1 配置
对于 chnode1
,有五个配置文件。您可以选择将这些文件合并为一个文件,但为了文档的清晰性,单独查看它们可能更简单。在您阅读配置文件时,您会发现 chnode1
和 chnode2
之间的大部分配置是相同的;不同之处将突出显示。
网络和日志配置
这些值可以根据您的需要自定义。此示例配置提供了一个在 1000M 滚动三次的调试日志。ClickHouse 将在 IPv4 网络上监听 8123 和 9000 端口,并将使用 9009 端口进行服务器之间的通信。
ClickHouse Keeper 配置
ClickHouse Keeper 提供数据复制和分布式 DDL 查询执行的协调系统。ClickHouse Keeper 兼容 Apache ZooKeeper。此配置在 9181 端口启用 ClickHouse Keeper。突出显示的行指定该实例的 Keeper 的 server_id
为 1。这个是三个服务器中 enable-keeper.xml
文件的唯一区别。chnode2
的 server_id
设置为 2
,chnode3
的 server_id
设置为 3
。Raft 配置部分在所有三个服务器上都是相同的,以下突出显示,以显示 server_id
与 Raft 配置中的 server
实例之间的关系。
如果出于某种原因替换或重建了 Keeper 节点,请不要重用现有的 server_id
。例如,如果 server_id
为 2
的 Keeper 节点被重建,则应分配一个 server_id
为 4
或更高。
宏配置
宏 shard
和 replica
减少了分布式 DDL 的复杂性。配置的值会自动替代您的 DDL 查询,从而简化您的 DDL。此配置的宏指定每个节点的分片和副本编号。
在这个 2 个分片 1 个副本的示例中,由于只有一个副本,因此在 chnode1
和 chnode2
上的副本宏均为 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 Server 使用 ClickHouse Keeper 进行复制和分布式 DDL 的协调。此文件指定 ClickHouse Server 应在 chnode1 - 3 上的 9181 端口使用 Keeper,并且该文件在 chnode1
和 chnode2
上相同。
chnode2 配置
由于 chnode1
和 chnode2
的配置非常相似,这里只会指出不同之处。
网络和日志配置
ClickHouse Keeper 配置
该文件包含 chnode1
和 chnode2
之间的两个区别之一。 在 Keeper 配置中 server_id
设置为 2
。
宏配置
宏配置是 chnode1
和 chnode2
之间的区别之一。在此节点上,shard
设置为 2
。
复制和分片配置
配置使用 Keeper
chnode3 配置
由于 chnode3
不存储数据,仅用于 ClickHouse Keeper 提供法定人数的第三个节点,因此 chnode3
只有两个配置文件,一个用于配置网络和日志,另一个用于配置 ClickHouse Keeper。
网络和日志配置
ClickHouse Keeper 配置
测试
- 连接到
chnode1
并验证上面配置的集群cluster_2S_1R
是否存在
- 在集群上创建一个数据库
- 使用 MergeTree 表引擎在集群上创建一个表。
我们不用在表引擎上指定参数,因为这些将根据我们的宏自动定义
- 连接到
chnode1
并插入一行
- 连接到
chnode2
并插入一行
- 连接到任一节点
chnode1
或chnode2
,您将只看到在该节点上插入的行。 例如,在chnode2
上:
- 创建一个分布式表以查询两个节点的两个分片。
(在此示例中,
rand()
函数设置为分片键,以便随机分配每个插入)
- 连接到
chnode1
或chnode2
,并查询分布式表,以查看两个行。