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

How to administrate storage of ClickHouse server in a Cluster when disks get full

我正在集群中设置一个 ClickHouse 服务器,但是文档中没有出现的一件事是如何管理非常大量的数据,它说它可以处理高达 PB 的数据,但您不能在单个服务器中存储那么多数据。你通常会有几个 tera。 所以我的问题是,我如何处理它以存储在集群的一个节点中,然后当它需要更多 space 时,添加另一个,它会自动处理到新服务器的分发还是我必须玩与分片分布中的权重。

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

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

您会找到什么解决方案?处理不断扩展的数据库以避免将来出现磁盘 space 问题。

谢谢

我假设您对 ClickHouse 集群使用标准配置:由 2-3 个副本节点组成的几个分片,并且在每个节点上都有一个 ReplicatedMergeTree table 包含其各自分片的数据。还有在一个或多个节点上创建的分布式table,配置为查询集群的节点(relevant section in the docs)。

添加新分片时,不会自动将旧数据移动到其中。推荐的方法确实是 "play with the weights" 正如你所说,即增加新节点的权重,直到数据量均匀。但是如果你想立即重新平衡数据,你可以使用ALTER TABLE RESHARD命令。仔细阅读文档并记住此命令的各种限制,例如它不是原子的。

When you have more than 1 disk in one server, how can it use them all to store the data?

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

Is there a way to store very old data in the cloud and download it if needed? For example all data older than 2 years can be stored in Amazon S3 as it will be hardly requested and in case it is, it will take a longer time to retreive the data but wouldn't be a problem.

ClickHouse 中的 MergeTree table 按月分区。您可以使用 ALTER TABLE DETACH/ATTACH PARTITION 命令来操作分区。你可以例如在每个月的开始分离旧月份的分区并将其备份到 Amazon S3。或者,您可以设置一组具有充足磁盘 space 的更便宜的机器,然后手动将旧分区移动到那里。如果你的查询总是包含日期过滤器,不相关的分区将被自动跳过,否则你可以设置两个分布式 tables:table_recent 和 table_all(集群配置包括节点旧分区)。

版本 19.15 引入了多磁盘存储配置。 20.1 引入了基于时间的数据重排。