我正在集群中设置一个clickhouse服务器,但是文档中没有出现的内容之一是如何管理大量的数据,它说它可以处理多达PB的数据,但是不能在单个服务器中存储那么多数据。你通常会有几万亿在每个。
所以我的问题是,我如何处理它以存储在集群的一个节点中,然后当它需要更多空间时,添加另一个,它是否自动处理到新服务器的分发,或者我是否必须使用shard分发中的权重。
当一台服务器中有多个磁盘时,它如何使用所有磁盘来存储数据?
有没有办法将非常旧的数据存储在云中,并在需要时下载?例如,所有超过2年的数据都可以存储在amazon s3中,因为几乎不需要它,如果需要,则需要更长的时间来检索数据,但这不是问题。
你能找到什么解决办法?处理不断扩展的数据库以避免将来出现磁盘空间问题。
谢谢

最佳答案

我假设您使用clickhouse集群的标准配置:几个shard由2-3个副本节点组成,每个节点上都有一个replicatedmergetree表,其中包含各自shard的数据。在配置为查询集群节点的一个或多个节点上还创建了分布式表(relevant section in the docs)。
添加新碎片时,旧数据不会自动移动到其中。建议的方法确实是像您所说的那样“使用权重”,即增加新节点的权重,直到数据量均匀为止。但如果要立即重新平衡数据,可以使用ALTER TABLE RESHARD命令。请仔细阅读文档,并记住此命令的各种限制,例如它不是原子命令。
当一台服务器中有多个磁盘时,它如何使用所有磁盘来存储数据?
请阅读the administration tips中有关配置raid的部分。
有没有办法将非常旧的数据存储在云中,并在需要时下载?例如,所有超过2年的数据都可以存储在amazon s3中,因为几乎不需要它,如果需要,则需要更长的时间来检索数据,但这不是问题。
clickhouse中的mergetree表按月分区。可以使用ALTALTABLE分离/附加分区命令来操作分区。例如,您可以在每个月初分离某个旧月份的分区,并将其备份到amazon s3。或者您可以设置一个具有足够磁盘空间的廉价计算机集群,并手动将旧分区移到那里。如果查询总是包含日期上的筛选器,则将自动跳过不相关的分区,否则可以设置两个分布式表:table_recent和table_all(集群配置包括具有旧分区的节点)。

关于database - 磁盘已满时如何在群集中管理ClickHouse服务器的存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43847107/

10-12 14:42