我正在运行一个有 5 个节点的 Cassandra 集群,每个节点有 10 个 1Tb 磁盘 (JBOD)。目前,其中一个节点处于有问题的情况下,由于单个磁盘上的磁盘空间不足,大型压缩无法再成功完成。
我试图弄清楚在 JBOD 配置中添加额外磁盘会产生什么影响。
- 是否会自动重新分配现有数据以最佳利用新磁盘?
- 是否只会将新数据写入新添加的磁盘?
- 我可以手动将 sstables 移动到不同的磁盘吗?
- 拆分 sstables 是一种选择吗?
我在网上找到了不完全确定的来源:
- https://stackoverflow.com/questions/23110054/cassandra-adding-disks-increase-storage-volume-without-adding-new-nodes似乎暗示“随着时间的推移,数据将在磁盘之间均匀分布”,但并没有指定这是由于重新平衡还是新数据将仅写入新磁盘的事实(也是旧链接,因此不确定是否仍然相关)。
- http://mail-archives.apache.org/mod_mbox/cassandra-user/201610.mbox/%3cCAMy13tA3cZ++LaVnUsuwkwbR5tvBdhMEOqWij9nrWRODq42rLQ@mail.gmail.com%3e似乎暗示压缩将始终使用 Cassandra 3.2+ 在本地运行数据磁盘.
新数据和压缩期间将写入新磁盘。实际逻辑取决于 Cassandra 版本,例如,较新版本将特定分区范围放入特定磁盘。通常的建议是使用 RAID-0 来拥有一个大磁盘,这样你就不会遇到大 SSTables 的问题。但是这种方法有一个缺点——如果丢失了一个磁盘,您会丢失所有数据并且需要重建所有内容。
从理论上讲,您可以手动将一些 SSTables 移动到其他磁盘(假设该节点已停止),然后 Cassandra 将在压缩期间重新分配数据,但我还没有尝试过这种配置。该操作还有另一个问题 - 如果您移动了一些 SSTables 并且它已删除或更新了被另一个磁盘上的新数据遮蔽的数据,并且如果该磁盘崩溃,那么您可以恢复已删除/旧数据。
每个节点 PS 10Tb 太疯狂了。想想如果服务器坏了,重建一个节点需要多少时间。