如何管理集群中的ClickHouse服务器在磁盘满时的存储

问题描述:

我在集群中设置了一个ClickHouse服务器,但文档中没有出现的其中一件事是如何管理大量的数据它说它可以处理高达PB级的数据,但是不能在单台服务器上存储那么多的数据。你通常每个都会有几个teras。 所以我的问题是,我如何处理它以存储在群集的节点中,然后当它需要更多空间时,添加另一个,它会自动处理发布到新服务器还是必须使用权重在分片分配中。如何管理集群中的ClickHouse服务器在磁盘满时的存储

当您在一台服务器上有多个磁盘时,如何使用它们来存储数据?

有没有办法在云中存储非常旧的数据并在需要时下载?例如,所有超过2年的数据都可以存储在Amazon S3中,因为它几乎不会被请求,如果是这样,则需要较长时间才能获取数据,但不会成为问题。

你会发现什么解决方案?处理日益庞大的数据库以避免将来出现磁盘空间问题。

由于

我将假定使用标准配置为ClickHouse群集:几个碎片组成的2-3副本节点,以及这些节点的每一个包含数据用于其各自碎片一个ReplicatedMergeTree表。在一个或多个节点上还创建了分布表,用于查询集群的节点(relevant section in the docs)。

当您添加新的分片时,旧数据不会自动移动到它。推荐的方法的确如“放置权重”一样,即增加新节点的权重,直到数据量均匀为止。但是,如果您想立即重新平衡数据,则可以使用命令。仔细阅读文档并记住该命令的各种限制,例如它不是原子的。

当一台服务器中有多个磁盘时,如何使用它们来存储数据?

请阅读关于在the administration tips中配置RAID的部分。

有没有办法将非常旧的数据存储在云中并在需要时下载?例如,所有超过2年的数据都可以存储在Amazon S3中,因为它几乎不会被请求,如果是这样,则需要较长时间才能获取数据,但不会成为问题。

ClickHouse中的MergeTree表按月分区。您可以使用ALTER TABLE DETACH/ATTACH PARTITION命令来操作分区。你可以例如在每个月的开始时,将分区分开一些较旧的月份并将其备份到Amazon S3。或者你可以设置一个具有足够磁盘空间的廉价机器集群,并在那里手动移动旧分区。如果您的查询始终包含日期过滤器,则不相关的分区将自动跳过,否则您可以设置两个分布式表:table_recent和table_all(集群配置包括具有旧分区的节点)。