内存选择
Cassandra节点没有最合适的内存配置,内存的大小取决于节点需要处理的数据。一般来说,集群节点至少需要8GB的内存,所部署的服务器服务器至少需要有64GB到256GB的内存。
如果Cassandra节点的内存给的太小,那么节点的memtables
就会越小,这就意味着该Cassandra节点就会在硬盘上生成大量的小SSTable
。查询的时候就会消耗更多的磁盘I/O。对性能影响很大。
所以说,赋给Cassandra节点的内存越大,节点的性能就会越好
。
CPU选择
Cassandra需要处理大量的写入压缩等操作,所以CPU的性能对Cassandra的性能也非常重要。
DataStax建议:16核的服务器是一个好的选择
。
带宽的选择
由于Cassandra是一个分布式的数据库,所以数据的读写和复制对Cassandra的性能都有非常大的影响。
所以网络带宽至少需要1GB或更大。
硬盘的选择
Cassandra何时使用硬盘
- 当Cassandra把数据写入commit log时。
- 当Cassandra把数据从memtables里刷到SSTable数据文件时。
- 当Cassandra定期压缩SSTables时(压缩会临时增大磁盘使用空间,在最坏的情况下,比如压缩策略使用
SizeTierdCompactionStrategy
时,压缩SSTable使用的空间会是SSTable总量的两倍
)。
最好使用SSD
由于Cassandra读写的数据最终都在硬盘上,所以硬盘的性能越好,Cassandra的性能也会越好。Cassandra对SSD的读写也进行了优化,使用SSD也能大大加速对数据的读写。
NFS, SAN和NAS都不推荐
为了提高IO,硬盘最好是在本地,并且越快越好。
如何评估硬盘的使用量
Cassandra对硬盘的使用主要用在存储commit log和数据目录。数据目录主要存储SSTable数据。除了这些,Cassandra还需要更多的空间来执行压缩工作。
最理想的情况下,存储commit log和数据目录的硬盘要分开。
下面我们看下如何计算集群的存储空间:
- 计算物理硬盘的原始大小:比如12块盘,每块盘7.2TB,则总量为12 * 7.2TB = 86.4TB
- 计算磁盘的可用空间,基本按90%算。 86.4 * 0.9 = 76.76TB。
- 由于Cassandra需要磁盘存储来进行压缩和修复操作,所以我们不能把所有空间都用于commit log存储和数据存储。
DataStax建议仅分配可用容量的50% ~80%来存储数据。其他的空间用于压缩等操作。
Linux系统参数
同步时钟并启用NTP
由于只有时间戳比已有数据更新时,Cassandra才会更新数据列。所以在集群上所有节点同步时钟非常重要。您可以使用NTP(Network Time Protocol)或其他方法来同步时钟。
如果您集群无法访问Internet,可以通过编辑/etc/sysconfig/ntpd
文件将其中一台服务器设置为NTP服务器。然后同步其他服务器。
在NUMA系统中禁用zone_reclaim_mode
为了避免潜在的性能问题,必须禁用’zone_reclaim_mode`。
可以使用如下方式检查:
cat /proc/sys/vm/zone_reclaim_mode
0
如果输出不是0,则使用如下方式来禁用:
echo 0 > /proc/sys/vm/zone_reclaim_mode
TCP设置
因为Cassandra的数据传输非常的重,所以我们需要通过编辑/etc/sysctl.conf
文件来增加默认的TCP设置:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.optmem_max = 40960
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
然后使用sudo sysctl –p /etc/sysctl.conf
命令来使其生效。
用户资源限制
在/etc/security/ limits.conf
文件中更新:
<cassandra_user> - memlock unlimited
<cassandra_user> - nofile 100000
<cassandra_user> - nproc 32768
<cassandra_user> - as unlimited
soft nofile 32768
hard nofile 32768
hard nproc 32768
soft nproc 32768
另外还需要包含如下设置:
vm.max_map_count = 1048575
关闭透明大页
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
禁用swap
sudo swapoff -all