Cassandra 文档

版本

您正在查看预发布版本的文档。

生产建议

cassandra.yamljvm.options 文件包含许多关于生产环境使用的注意事项和建议。本页将扩展文件中的部分信息。

令牌

每个节点使用多个令牌范围称为虚拟节点或 vnodes。vnodes 可以在新节点引导到集群时,通过更多流式传输对等体来促进灵活扩展。限制流式传输的负面影响(I/O 和 CPU 开销)可以实现增量集群扩展。但是,更多令牌会导致与更多对等体共享数据,并导致可用性降低。必须根据集群的特征读取和写入来平衡这两个因素。要了解更多信息,建议阅读 Cassandra 在虚拟节点中的可用性,Joseph Lynch 和 Josh Snyder

使用 cassandra.yaml 文件中的设置更改令牌数量

num_tokens: 16

以下是最常见的令牌计数,以及何时以及为何使用每个令牌计数的简要说明。

令牌计数 描述

1

最大可用性、最大集群大小、最少对等体,但扩展性不灵活。必须始终将集群大小加倍才能扩展并保持平衡。

4

弹性和可用性的良好结合。建议用于最终将超过 30 个节点的集群。需要添加大约 20% 的节点才能保持平衡。缩减集群可能会导致集群不平衡。

8

使用 8 个 vnodes 将工作负载分布在系统之间,方差约为 10%,对性能的影响最小。

16

最适合经常扩展和缩减的弹性很强的集群,但对于大型集群来说,可用性可能存在问题。不建议用于超过 50 个节点的集群。

除了设置令牌计数之外,在 cassandra.yaml 中将 allocate_tokens_for_local_replication_factor 设置为适当的副本数量也极其重要,以确保令牌分配均匀。

预读

预读是操作系统的一项功能,它试图在页面缓存中尽可能多地加载数据。旋转磁盘的寻道时间可能很长,导致高延迟,因此使用页面缓存提高读取吞吐量可以提高性能。通过利用预读,操作系统可以在没有额外寻道成本的情况下将更多数据拉入内存。当可用 RAM 大于热数据集大小时,此方法效果很好,但当情况相反时(数据集 > RAM)可能会出现问题。热数据集越大,预读就越没有用。

在以下情况下,预读肯定没有用

  • 小分区,例如只有一个分区键的表

  • 固态硬盘 (SSD)

预读实际上会增加磁盘使用量,在某些情况下会导致延迟和吞吐量性能下降高达 5 倍。读取密集型、键值表,其行很小(小于 1KB),尤其容易出现此问题。

推荐的预读设置如下

硬件 初始建议

旋转磁盘

64KB

SSD

4KB

可以使用 blockdev 工具在 Linux 系统上调整预读。

例如,将磁盘 /dev/sda1 的预读设置为 4KB

$ blockdev --setra 8 /dev/sda1

blockdev 设置设置要预读的 512 字节扇区数量。上面的参数 8 等效于 4KB,即 8 * 512 字节。

所有系统都不同,因此请将这些建议作为起点,并根据您的 SLA 和吞吐量要求进行调整。要了解预读如何影响磁盘资源使用,我们建议仔细阅读 深入分析,使用外部工具 部分。

压缩

压缩数据通过压缩固定大小的字节缓冲区并将其写入磁盘来存储。缓冲区大小由表模式设置中 WITH COMPRESSION 的压缩映射中的 chunk_length_in_kb 元素确定。从 Cassandra 4.0 开始,默认设置为 16KB。

由于必须从磁盘读取整个压缩缓冲区,因此使用过大的压缩块长度会导致读取小记录时出现重大开销。与默认预读设置相结合,结果可能是某些工作负载的巨大读取放大。因此,为该设置选择适当的值非常重要。

LZ4Compressor 是默认的推荐压缩算法。如果您需要有关压缩的更多信息,请阅读 The Last Pickle 博客文章关于压缩性能

压缩

有不同的 压缩 策略可用于不同的工作负载。我们建议阅读有关不同策略的信息,以了解哪种策略最适合您的环境。同一集群中的不同表可能(并且经常这样做)使用不同的压缩策略。

加密

在设置生产集群时,最好设置对等体到对等体加密和客户端服务器加密。在集群为生产流量提供服务后设置它很难正确完成。如果您计划使用任何类型的网络加密,我们建议在最初配置集群时设置它。稍后更改这些配置并非不可能,但错误会导致停机或数据丢失。

确保使用 NetworkTopologyStrategy 创建键空间

生产集群永远不应该使用 SimpleStrategy。生产键空间应使用 NetworkTopologyStrategy (NTS)。例如

CREATE KEYSPACE mykeyspace WITH replication =     {
   'class': 'NetworkTopologyStrategy',
   'datacenter1': 3
};

使用 NetworkTopologyStrategy 初始化的 Cassandra 集群可以利用配置多个机架和数据中心的能力。

配置机架和探测器

在集群已配置后正确配置或更改机架是不受支持的过程。从单机架迁移到多机架也不受支持,会导致数据丢失。使用 GossipingPropertyFileSnitch 是本地或混合云环境最灵活的解决方案。Ec2Snitch 仅适用于 AWS EC2 环境,可靠性很高。