关闭

Cassandra 3.x官方文档_cassandra.yaml配置文件

2279人阅读 评论(0) 收藏 举报
分类:

cassandra.yamlCassandra的主要配置文件

重要: 修改完cassandra.yaml文件配置以后,你必须重启节点使他生效。它位于下面的目录中:

 

• Cassandra package 安装: /etc/cassandra

• Cassandra tarball 安装: install_location/conf

 

配置属性分为以下几个部分:

快速开始

配置集群所需的最小属性

常用的

配置Cassandra时最常用的属性

性能调优

性能调优以及系统资源调用,包括commit logcompaction,内存,硬盘I/OCPU,读和写。

高级的

高级用户或者不常用的属性的属性配置

安全

服务器和客户端安全设置。

 

注:带注释的值表示内部定义,缺少,注释或者实现取决于cassandra.yaml文件里的其他属性。此外,一些注释的值并不符合实际默认值,这些值仅推荐于默认值改变时。

 

快速开始配置属性

配置集群所需的最小属性

 

相关信息:在111页的初始化一个多节点集群(单数据中心)和在114页的初始化一个多节点集群(多数据中心)

cluster_name

(默认: Test Cluster) 集群名称。这个设置防止一个逻辑集群的节点加入另外一个集群。一个集群中所有节点必须使用相同的名称。

 

listen_address

(默认: localhost) Cassandra绑定的,用来连接其他Cassandra节点的IP地址或者主机名称。设置这个参数或者listen_interface不需要同时。当在多节点间通信时,必须修改默认配置:

一般设置为空。如果节点是正确设置的(主机名称,名称解析等)Cassandra通过InetAddress.getLocalHost()可以从系统获取本地地址

如果是单节点集群,你可以使用默认配置(localhost)

如果Cassandra找不到正确的地址,你可以指定IP地址或者主机名称。

永远不要指定0.0.0.0,总是错的。

如果你使用多个物理网络接口,把listen_addresslisten_on_broadcast_address设为true

 

listen_interface

(默认: eth0)Cassandra绑定的接口,用于连接其他Cassandra节点。接口必须对应一个地址,不支持IP别名。参考listen_address

 

listen_interface_prefer_ipv6

(默认: false) 默认情况下,如果一个接口有一个ipv4ipv6的地址,第一个被使用的是ipv4地址。如果该选项设置为true,第一个被使用的就是ipv6地址。

 

如果安装过程中修改了任何默认的目录,请确保你有root权限来设置这些属性。

 

commitlog_directory

这个目录是commit log 存放的地方:

 

为了获得最佳的写入性能,将commit log放在单独的磁盘分区,或者(理想情况下)data文件目录分开的物理设备上。由于commit log只能追加的,因此HDD已经可以达到这个目的了。

 

data_file_directories
这个目录位置就是表数据存储的地方(SSTables)Cassandra将数据均匀的分布在这个位置,受配置的压缩策略粒度的限制。

 

作为生产的最佳实践,使用RAID 0 and SSDs

 

saved_caches_directory
这个目录是table keyrow缓存存放的地方。默认位置:
• Package
安装: /var/lib/cassandra/saved_caches
• Tarball
安装: install_location/data/saved_caches

 

常用的属性
配置Cassandra最常用的的属性。

第一次启动节点之前,你应该仔细评估你的要求。

常见的初始化属性

:请务必在快速启动选项中设置好属性。

commit_failure_policy

(默认: stop)提交磁盘故障策略:

• die

关闭gossipThrift,然后杀掉JVM进程,这样节点就可以被替换。

• stop

关闭gossipThrift,使节点实际上死亡了,但是可以使用JMX检查。

• stop_commit

关闭commit log,让写聚集,但继续提供读服务(就像Cassandra 2.0.5之前的版本)

• ignore

忽略致命错误,并让批失败。

 

disk_optimization_strategy

(默认: ssd)优化磁盘读取策略可以设置成固态硬盘或者旋转的。

 

disk_failure_policy

(默认: stop)设置Cassandra如何响应磁盘故障。建议设置成stop或者best_effort

• die

关闭gossipThrift,然后对于任何系统错误或者仅仅是SSTable错误,都杀掉JVM进程,这样节点就可以被替换。

• stop_paranoid

关闭gossipThrift,即使仅仅是SSTable错误。

• stop

关闭gossipThrift,让节点实际上死亡了,但是可以使用JVX检查。

• best_effort

停止使用故障磁盘,然后基于剩余可用的SSTables来响应请求。这意味着你会在一致性级别为1的基础上看到过时的数据。

• ignore

忽略致命错误,并允许请求失败;所有文件系统错误都会被记录,但是忽略。在Cassandra 1.2版本之前是这种情况。

 

相关信息:在133页,Cassandra 1.2处理磁盘故障博客和使用JBOD从单磁盘故障恢复。

 

endpoint_snitch

(默认: org.apache.cassandra.locator.SimpleSnitch) 设置成一个实现IEndpointSnitch接口的类。Cassandra使用告密者来定位节点和路由请求。

• SimpleSnitch

用于单数据中心部署或者公共云中的单个区域。不识别数据中心或者机架信息。它视策略顺序为接近,当忽略读修复时可以提高缓存局部性。

•GossipingPropertyFileSnitch

建议生产使用。本地节点机架和数据中心定义在cassandra-rackdc.properties文件里,通过八卦协议传播到其他节点。为了便于从PropertyFileSnitch移植,它也使用cassandra-topology.properties,如果存在的话。

• PropertyFileSnitch

决定于机架和数据中心的距离,这是明确的在cassandratopology.properties文件里配置的。

• Ec2Snitch

EC2部署在一个单一区域。从亚马逊的EC2 API加载区域和可用区域信息。该区域被视为数据中心和作为机架可用区域,而且使用私有IP。它不跨多个区域工作。

• Ec2MultiRegionSnitch

使用共有IP作为broadcast_address以此来允许跨区域连通。这意味着你也必须把种子节点地址设置为共有IP,而且开放公共IP防火墙的storage_port端口或者l_storage_port端口。对于区域内通信,Cassandra在连接建立之后切换到私有IP

• RackInferringSnitch:

Proximity由机架和数据中心决定的,假定符合每个节点IP地址的第三个和第二个字节。使用这个告密者最好的例子是写一个定制的告密者类(除非这恰好符合你的部署)

• GoogleCloudSnitch:

在跨一个或者多个区域的Google云平台上部署Cassandra时,使用GoogleCloudSnitch。这个区域被视为一个数据中心和被视为数据中心内机架的可用区域。所有通信发生在相同逻辑网络内的私有IP地址。

• CloudstackSnitch

Apache Cloudstack环境中使用CloudstackSnitch

相关信息:20页的Snitches

 

rpc_address

(默认: localhost) 客户端连接的监听地址: (Thrift RPC 服务和本地运输). 有效值:

• unset:

通过节点的主机名和配置来决定地址。如果不设置,必须由主机名来决定这个节点的IP地址,使用/etc/hostname, /etc/hosts, 或者 DNS

• 0.0.0.0:

监听所有配置的接口,但是你必须把broadcast_rpc_address设置成0.0.0.0.以外的值。

• IP address

• hostname

相关信息: Network

 

rpc_interface

(默认: eth1)客户端连接监听地址。接口必须对应一个单一地址,不支持IP别名。参考rpc_address.

 

rpc_interface_prefer_ipv6

(默认: false) 默认情况下,如果一个接口有一个ipv4和一个ipv6地址,那么ipv4地址会被优先使用。如果设置成trueipv6地址会被优先使用。

 

seed_provider

这些主机地址被视为联系人地址。Cassandra节点使用种子列表来发现对方以及学习环的拓扑结构。

• class_name (默认: org.apache.cassandra.locator.SimpleSeedProvider)

Cassandra用来处理种子逻辑的类。它可以定制,但是通常不需要。

• - seeds (默认: 127.0.0.1)

一个逗号分隔的IP地址列表,gossip用来引导新节点加入集群中去。

当多个节点在运行时,你必须修改默认的列表。在多数据中心的集群中,种子节点至少包含一个每个数据中心的一个地址是个不错的主意。为了容错考虑,推荐每个数据中心指定超过一个种子节点。

否则,gossip在引导一个新节点时不得不和另外一个数据中心通信了。不推荐把每个节点都当成种子节点,因为增加了维护成本和减少了gossip的性能。Gossip优化不是关键,但建议使用较少的种子列表。

(大概每个数据中心三个种子节点).

相关信息:在111页,初始化多节点集群(单数据中心)114页,初始化多节点集群(多数据中心)

 

enable_user_defined_functions

(默认: false)用户自定义函数存在安全风险,因为它们是在服务器端执行。在Cassandra 3.0和后来版本中,用户自定义函数在含有恶意执行代码的沙箱中执行的。它们默认是禁止的。

enable_scripted_user_defined_functions

(默认: false) 如果enable_user_defined_functionstrue,那么Java的用户自定义函数始终启用。启用该选项来使用javascript和任何自定义的JSR-223的用户自定义函数。如果enable_user_defined_functionsfalse,那么这个选项就没有效果。

 

 

常见的compaction设置

compaction_throughput_mb_per_sec

(默认: 16) compaction指定的总吞吐量的阀值。你插入速度越快,越需要在规定时间内更快的压缩速度。推荐的值是1632的写吞吐量(单位:Mb/s)。设为0,表示禁用compaction throttling

相关信息:154页的,配置compaction

compaction_large_partition_warning_threshold_mb

(默认: 100) 在压缩分区大于设定值时记录警告。

 

 

常见的 memtable 设置

memtable_heap_space_in_mb

(默认: 1/4 堆大小)

设置在堆内存里分配的memtables的大小。Cassandra使用这个和memtable_offheap_space_in_mb的值总和来决定何时自动刷新memtables。更多详细信息,参考memtable_cleanup_threshold.

相关信息:Java堆的优化

memtable_offheap_space_in_mb

(默认: 1/4堆大小)

设置在堆外内存里分配的memtables大小。Cassandra使用这个和memtable_heap_space_in_mb的值总和来决定何时自动刷新memtables。跟多详细信息,参考memtable_cleanup_threshold.

相关信息Java 堆的优化

 

 

常见的硬盘设置

concurrent_reads

(默认: 32)对于在内存中获取更多数据的合适的负载,瓶颈是从磁盘中读取数据。设置(16x处理器数量)成允许在堆栈中足够低的队列,以便操作系统和驱动可以重新排序它们。默认设置既应用于逻辑卷管理(LVM),也适用于RAID驱动。

concurrent_writes

(默认: 32)Cassandra里的写很少会是I/O限制,所以理想的并发写的数量决定于系统中CPU核心的数量。推荐的值是8xCPU数量。

concurrent_counter_writes

(默认: 32)计数器在自增之前写当前读的值,然后写回调。

推荐值是(16x处理器数量)

concurrent_batchlog_writes

(默认: 32)并发批量写日志的限制,类似于concurrent_writes

concurrent_materialized_view_writes

(默认: 32) 比并发读或者并发写更少的并发物化视图的写,因为物化视图写中包含了一个读取。

 

 

常见的自动备份设置

incremental_backups

(默认: false)备份上次快照后更新的数据。启用以后,Cassandra为每一个SSTable的刷新或者流创建一个硬链接,在本地键空间的备份/子目录下。删除这些链接是运营商的责任。

相关信息: 31页,启用增量备份

snapshot_before_compaction

(默认: false) 启用或禁用在每次压缩之前设置快照。当一个数据的格式发生变化时,该选项对于备份数据来说很有用。使用该选项时要非常小心,因为Cassandra不会自动的清除旧的快照。

相关信息: 54页,配置compaction

 

 

常见的故障检测设置

phi_convict_threshold

(默认: 8)在指数级别上调整故障检测器的灵敏度。一般这个设置不需要调整。

相关信息:见4页,故障检测和恢复

 

 

性能调优属性

性能调优和资源利用,包括commit log,压缩,内存,磁盘I/OCPU,读和写。

 

 

Commit log设置

commitlog_sync

(默认: periodic) Cassandra用来承认毫秒级别内的写操作的方法:

• periodic: (默认: 10000毫秒[10])

使用commitlog_sync_period_in_ms控制commit log多久一次同步到磁盘。周期性同步是立即承认的。

• batch: (默认: disabled)

使用commitlog_sync_batch_window_in_ms(默认:2毫秒)控制Cassandra在同步之前等待其它的写操作多久的时间。当使用这种方法,写操作是不会被承认的,直到同步到磁盘。

 

commitlog_segment_size_in_mb

(默认: 32MB)设置每个独立的commitlog文件段的大小。一个commitlog段在它的所有数据都被刷新到SSTables以后,可能被存档,删除,或者回收。这个数据量可能包括系统中每一个表的commitlog段。默认的大小一般适用于大部分的commitlog存档,但是如果你想要一个更细的粒度,8或者16MB也是合理的。

 

这个属性决定了最大mutation的大小,定义为段大小的一半。如果一个mutation的大小超过了最大mutation大小,mutation就会被拒绝。在增加commitlog段之前,调查清楚为什么mutations会比预期的要大。寻找访问模式和数据模型潜在的问题,因为增加commitlog段大小是一个有限制的调整。

 

相关信息:见107页,Commit log存档配置

 

max_mutation_size_in_kb

此属性是独立可配置的。更多信息,见上面的commitlog_segment_size_in_mb

 

commitlog_compression

(默认: not enabled) 如果commit log是被压缩的,则设置使用压缩器。可选项:LZ4, Snappy或者Deflate如果compressor选项未设置,则commit log是未被压缩写入的。

 

commitlog_total_space_in_mb

(默认: 32MB 或者 32-bit JVMs, 8192MB for 64-bit JVMs)If the

Related information: Configuring memtable thresholds on page 154

commit logs使用的总的空间。如果使用的空间超过了这个值,Cassandra转到下一个最近的段,刷新那些最旧的commitlog 段对应的memtables到磁盘中,删除这些log段。这减少了启动时重播的数据量,防止不经常更新的表不定期的保留commitlog段。一个小的commitlog总空间会导致不活跃的表产生更频繁的刷新活动。

相关信息:见154页,配置memtable门槛

 

 

Compaction设置

相关信息:见154页,配置compaction

concurrent_compactors

(默认:比磁盘数量或者处理器数量更少,每个CPU中最少有2个,最多有8)

设置每个节点允许同时运行的并发compaction进程的数目,不包括compactions验证和反熵修复。同时compactions有助于在一个读-写混合负载环境中保持读性能,通过在单一长期运行的compaction过程中比较小的SSTables累加来减轻这种趋势。如果你的数据目录备份在SSD上,把改值增大到处理器的数目。如果compaction运行过慢或者过快,首先调整compaction_throughput_mb_per_sec大小。

::增大并发compactors数量会影响可用的磁盘存储,因为并发compactions是并行发生的,尤其对于STCS。当增大改配置时,确保有足够的可用磁盘空间。

sstable_preemptive_open_interval_in_mb

(默认: 50MB) 当进行compacting时,替换打开SSTables才能彻底写,并利用现有的SSTables替换任何以前写的。该设置有助于在SSTables之间顺利的转移读,通过减少页缓存的流失和保持热点的行继续为热点。

 

 

Memtable 设置

memtable_allocation_type

(默认: heap_buffers) 指定Cassandra分配和管理内存中memtable的方式。参考Offheap memtables in Cassandra 2.1。在releases 3.2.0 3.2.1,唯一的选择是:heap-buffers

(在堆内NIO (非阻塞 I/O) 缓冲区).

memtable_cleanup_threshold

(默认: 1/(memtable_flush_writers+ 1)).

用来自动刷新memtable的比例。Casssandra添加memtable_heap_space_in_mbmemtable_offheap_space_in_mb然后乘以memtable_cleanup_threshold的总数来获得以MB为单位的空间。当non-flushing memtables使用的内存总量超过了这个值,Casandra会刷新最大的memtable到磁盘。

 

举个例子,想象一个节点,它的memtable_heap_space_in_mbmemtable_offheap_space_in_mb总和是1000,而且memtable_cleanup_threshold0.5,memtable_cleanup的值是500MB。这个节点有两个memtablesMemtable A150MB)和Memtable B(350MB)。当其中一个memtable增大时,使用的总空间就超过了500MB。这种情况发生时,CassandraMemtable B刷新到磁盘。

 

memtable_cleanup_threshold越大,意味着刷新越大,刷新频率越少和潜在更少的compaction活动,也会更少的并发刷新活动,这使得你的磁盘很难在写压力下保持饱和。

 

这部分文件公式用来计算基于memtable_flush_writers的数量比。cassandra.yaml里默认值是0.11,当节点有很多磁盘或者设置节点的memtable_flush_writers8时有效。另外一个例子,如果节点使用单一SSD,计算memttable_cleanup_threshold值为0.33,基于memtable_flush_writers的最小值2.

file_cache_size_in_mb

(默认: 小于堆大小的1/4或者512) SSTable-reading缓存使用的总内存

buffer_pool_use_heap_if_exhausted

(默认: true)指定当SSTable缓存池枯竭时是否分配或者关闭堆内存(当缓存池超过了file_cache_size_in_mb最大内存),除此之外它不会缓存,但是会按要求分配。

memtable_flush_writers

(默认:比磁盘数量或者处理器数量少,最小2,最大8)note 设置memtable刷新写线程的数量。这些线程被磁盘I//O阻塞,而且每一个被阻塞时在内存中持有一个memtable。如果你的数据目录备份在SSD上,把该设置增大成处理器的数量。

 

 

缓存和索引设置

column_index_size_in_kb

(默认: 64)分区内行索引的粒度。对于巨大的行,增加该设置来提高查找时间。如果你使用key缓存,注意不要把这个设置的太大因为key缓存会被覆盖。如果你不太确定行的大小,最好使用默认设置。

index_summary_capacity_in_mb

(默认: 堆内存大小的5% [])SSTable索引摘要的固定内存池大小。如果所有索引摘要使用的内存超过了这个限制,任何低读取速度的SSTable收缩它们的索引摘要来满足这个限制。这是个最好的情况。在极端状况下,Cassandra可能会使用超过这个值的内存。

index_summary_resize_interval_in_minutes

(默认: 60 分钟)索引摘要应重新取样的频率。这个是周期性完成的,以此来重新分配固定大小的内存池到SSTables最近的读取率。想禁用它,设置成-1。这使得现有的索引摘要保持在当前的采样水平。

 

 

磁盘设置

stream_throughput_outbound_megabits_per_sec

(默认: 200 Mbps)所有出境流文件在指定的吞吐量下向节点传输的阀门。Cassandra在流数据引导或修复的时候大部分都是顺序I/O,这样会导致网络连接饱和,客户端(RPC)性能降低。

inter_dc_stream_throughput_outbound_megabits_per_sec

(默认: unset)数据中心之间流文件传输的阀门。该设置允许数据中心之间节流流吞吐量,除了在stream_throughput_outbound_megabits_per_sec配置的网络流交通的节流之外。

trickle_fsync

(默认: false)当做顺序写的时候,启用该项来告诉fsync强迫操作系统在trickle_fsync_interval_in_kb设置的间隔里刷新脏数据缓存。启用该参数,避免脏缓存突然刷新进而影响到读延迟。推荐在SSD上使用,而不是在HDD上。

trickle_fsync_interval_in_kb

(默认: 10240).设置fsync大小,单位kb

windows_timer_interval

(默认: 1)

Windows默认的内核定时器和调度分辨率是15.6ms为了电源保护。在Windows上降低该值可以提供更小的延迟和更好的吞吐量。然而,一些虚拟的环境通过修改该配置低于系统默认配置可能导致负面的性能影响。sysinternals 'clockres'工具可以证实你的系统默认配置。

 

 

高级属性

高级用户的属性或者不常用的属性

 

 

高级初始化属性

auto_bootstrap

(默认: true) 这个设置已经从默认配置删除了。它使新节点(非种子节点)自动的转移正确数据到它们自己那里。当初始化一个没有数据的新集群,添加设置auto_bootstrap: false.

 

相关信息:见111初始化一个多节点集群(单数据中心) 和见114.初始化一个多节点集群(多数据中心)

batch_size_warn_threshold_in_kb

(默认: 每一批5KB) 任何批量大小超过此值(kb)的日志告警。增加该值得时候一定要小心,因为可能引起节点不稳定。

batch_size_fail_threshold_in_kb

(默认: 每一批50KB) 任何批量大小超过该值的都会失败。默认的值是10Xbatch_size_warn_threshold_in_kb的值。

broadcast_address

(默认: listen_address)一个节点告诉集群中其他节点与它联系的IP地址。它允许共有和私有地址不相同。比如说,在不是所有的节点可以访问其他节点的拓扑结构的时候,使用私有IP地址的broadcast_address参数。

 

如果你的Cassandra集群部署在扩多个亚马逊EC2区域上,而且你是用的是Ec2MultiRegionSnitch,把broadcast_address设置成节点的共有IP地址,listen_address设置成私有IP

listen_on_broadcast_address

(默认: false) 果你使用多物理网络接口,把这个属性和listen_address都设置成ture。这样允许节点在两个接口上通信。

如果网络会在共有和私有网络之间自动路由,就把该属性设置成false,就像亚马逊EC2那样做。

initial_token

(默认: disabled) 在一个节点只有一个token值的架构中使用,其中一个节点在环空间中拥有一个连续的范围。设置该属性来覆盖num_tokens

如果你的Cassandra安装没有使用虚拟节点或者把num_tokens设置成1或者没有指定(#num_tokens),你就应该在集群第一次启动和增加容量的时候总是指定这个参数。更多信息,见Cassandra 1.1 节点和集群配置文档。

该参数在一些特殊情况下可以和num_tokens (虚拟节点)一起使用,比如132页的从快照恢复

num_tokens

(默认: 256) 定义当在环中使用虚拟节点的时候随机分配给该节点的token的数量。相对于其他节点来说,越多token,该节点存储数据的比例就越大。一般情况下所有节点都应该有相同数量的token,在硬件容量相同的情况下。推荐的值是256。如果未指定(#num_tokens)Cassandra使用1(相当于#num_tokens : 1)来兼容遗留系统,而且使用initial_token设置。

如果不使用虚拟节点,注释#num_tokens : 256或者设置num_tokens : 1然后使用initial_token

如果你有一个已经存在的集群,使用的是每个节点一个token,而且希望迁移到虚拟节点上,参考

在已经存在的生产集群上启用虚拟节点。

:如果使用DataStax企业版,该属性默认值由节点类型和安装类型决定的。

allocate_tokens_keyspace

(默认: KEYSPACE)当触发的时候自动为该节点分配num_tokenstoken。分配算法尝试用一种方法在数据中心所有节点上优化副本负载,给指定的KEYSPACE的复制策略。分配给每个节点的负载会接近于虚拟节点数量的比例。

partitioner

(默认: org.apache.cassandra.dht.Murmur3Partitioner) 把行分配(通过分区键)到集群中的所有节点上。任何IPartitioner都可以使用,包括你自己的,只要在类路径上。对于新集群,使用默认分区器。

为了向下兼容,Cassandra提供了以下分区器:

RandomPartitioner

ByteOrderedPartitioner (deprecated)

OrderPreservingPartitioner (deprecated)

相关信息:见18页,分区器

storage_port

(默认: 7000)节点内部通信的端口

tracetype_query_ttl

(默认: 86400)在日志查询过程中使用的不同的跟踪类型的TTL(生存时间)

tracetype_repair_ttl

(默认: 604800)在日志修复过程中使用的不同的跟踪类型的TTL(生存时间)。

 

 

高级自动备份设置

auto_snapshot

(默认: true) 启用或者禁用是否在清空keyspace或者删除tables之前要拍摄快照。为了防止数据丢失,强烈建议使用默认设置。如果把它设置成false,你可能在清空或者删除的时候丢失数据。

 

 

Key 缓存和全局行属性

当创建或者修改表时,你可以通过设置表的缓存参数来启用或者禁用key缓存(分区键缓存)或者row缓存。其他rowkey缓存调优和配置选项,是在全局(节点)级别设置的。基于整体的工作负载和特定的表的使用,Cassandra使用这些设置来为节点上每个表自动分配内存。你也可以配置这些缓存的全局保存期限。

相关信息: 缓存配置

key_cache_keys_to_save

(默认: 禁用 所有的key都被保存)key缓存中保存的key的数量

key_cache_save_period

(默认: 14400 [4 小时]) key保存在缓存中的秒数持续时间。缓存保存在saved_caches_directory保存的缓存大大提高了冷启动速度,对I/O影响相对较小。

key_cache_size_in_mb

(默认: empty)一个表的全局缓存设置。它是key缓存在内存中的最大大小。当未设置值时,缓存会被设置成小于可用堆大小的5%,或者100MB。要想禁用它,就设置为0

相关信息:设置缓存容量

row_cache_class_name

(默认: 禁用 - row 缓存不可用)note指定要使用的行缓存提供程序,OHCProvider还是SerializingCacheProviderOHCProvider是完全堆外内存的,SerializingCacheProvider是部分堆外内存的。

row_cache_keys_to_save

(默认: 禁用 所有的key都被保存)row缓存中保存的key的数量。

row_cache_size_in_mb

(默认: 0- 禁用)行缓存在内存中的最大大小。行缓存可以存储超过key_cache_size_in_mb但是空间密集,因为它包含了整行。仅仅在热点行或者静态行使用行缓存。如果你减少的太小,你可能在启动的时候得不到最热点的key

row_cache_save_period

(默认: 0- 禁用) Row保存在缓存中的秒数持续时间。缓存保存在saved_caches_directory该设置有row_cache_size_in_mb描述的限制。

memory_allocator

(默认: NativeAllocator)

堆外内存分配器。除了缓存外,该属性还会影响存储引擎元数据。支持的值:

• NativeAllocator

• JEMallocAllocator

实验表明,jemalloc相比较native分配器而言更节省内存,因为它更能防止碎片化。使用、安装jemalloc作为库和修改cassandra-env.sh

注意: JEMalloc3.6.0和以后的版本应该在选项中使用。已知错误发生在较早版本中。

 

 

计数器缓存属性

计数器缓存有助于减少计数器锁对于热点计数单元格的竞争。如果RF = 1,计数器缓存命中会导致Cassandra在完全写之前跳过读。RF > 1计数器缓存命中将有助于减少锁的持续时间,帮助热点计算器单元格更新,但是不允许跳过完全读。只有计数器的本地(时钟,计数)元组存储在内存中,而不是整个计数器,所以它相对便宜.

Note: 减小计数器缓存的值的大小,可能导致不能在启动时获取最热点的key

counter_cache_size_in_mb

(默认值: empty)当没有指定值时,最小是堆内存的2.5%或者50MB。如果你执行计数器删除而且依赖gc_grace_seconds你应该禁用计数器缓存。想禁用它,设置成0.

counter_cache_save_period

(默认: 7200 [2 小时]) Cassandra应该存储计数器缓存的时间。缓存被保存在saved_caches_directory

counter_cache_keys_to_save

(默认值: disabled)从计数器缓存保存的key的数量。如果禁用,所有的key都会被保存。

 

 

墓碑的设置

当执行一个扫描,在一个分区内或跨分区,墓碑必须保存在内存中这样允许把他们返回给协调者。

协调者使用它们确保其他副本知道已删除的行。生成很多个墓碑的工作负载,可能会导致性能问题,然后耗尽服务器的堆内存。参考Cassandra反模式: 队列和类似队列的数据集。只有当你理解了它带来的影响而且要扫描更多的墓碑,你才能去调整这些阈值。此外,你可以使用

StorageServiceMBean来在运行的时候调整这些阈值。

相关信息: Cassandra反模式: 队列和类似队列的数据集

tombstone_warn_threshold

(默认: 1000)警告前一个查询可以扫描的最大墓碑数量。

tombstone_failure_threshold

(默认: 100000)终止前一个查询可以扫描的最大墓碑数量。

 

 

网络超时设置

range_request_timeout_in_ms

(默认: 10000 毫秒) 协调者等待顺序扫描或者索引扫描完成的时间

read_request_timeout_in_ms

(默认: 5000 毫秒)协调者等待读操作完成的时间

counter_write_request_timeout_in_ms

(默认: 5000 毫秒) 协调者等待计数器写完成的时间

cas_contention_timeout_in_ms

(默认: 1000 毫秒)协调者继续重试CAS(compare and set)操作的时间。

truncate_request_timeout_in_ms

(默认: 60000 毫秒) 协调者等待清空数据库完成的时间。一个默认很长的时间,可以允许在移除数据之前先做快照。如果auto_snapshot是禁用的(不推荐),你可以减小这个时间。

write_request_timeout_in_ms

(默认: 2000 毫秒) 协调者等待写操作完成的时间。

相关信息:见135页,Hinted Handoff: repair during write path

request_timeout_in_ms

(默认: 10000 毫秒) 其他操作的默认时间。

相关信息,见135页,Hinted Handoff: repair during write path

 

 

节点间的设置

cross_node_timeout

(默认: false) 启用或者禁用节点间操作超时的信息交换(精确测量请求超时)。如果禁用,Cassandra假定请求立即由协调者转发到副本,意味着在超负荷之下需要额外的时间来处理已经超时的请求。

注意: 在启用该属性之前,确保NTP(网络时间协议)已经安装,而且节点间的时间是同步的。

internode_send_buff_size_in_bytes

(默认: N/A)设置节点间调用发送套接字缓存大小。

当设置该属性和internode_recv_buff_size_in_bytes的时候,缓存的大小限制为net.core.wmem_max。如果未设置,缓存大小被net.ipv4.tcp_wmem定义。

/proc/sys/net/core/wmem_max

/proc/sys/net/core/rmem_max

/proc/sys/net/ipv4/tcp_wmem

/proc/sys/net/ipv4/tcp_wmem

internode_recv_buff_size_in_bytes

(默认: N/A)设置节点间调用的接收套接字缓存大小。

internode_compression

(默认: all) 控制节点间的通信是否是压缩的,有效值有这些:

all

所有通信都是压缩的

• dc

数据中心之间的通信时压缩的

• none

不压缩

inter_dc_tcp_nodelay

(默认: false) 启用或禁用数据中心之间通信的tcp_nodelay。当禁用较大的,但是较小的网络数据包被发送。这减少了TCP协议本身的开销。然而,如果跨数据中心响应被阻塞,它会增加延迟。

streaming_socket_timeout_in_ms

(默认: 3600000 - 1 小时)启用或禁用流操作的socket超时。当流超时,流从当前文件从新开始。避免把改值设置的太低,因为它会导致大量的数据再流。

 

 

本地传输(CQL二进制协议)

start_native_transport

(默认: true) 禁用或启用本地传输服务器。使用和rpc_address相同的地址,但是端口和rpc_port不相同。见native_transport_port

native_transport_port

(默认: 9042)客户端监听CQL本地传输的端口

native_transport_max_threads

(默认: 128)线程处理请求的最大数量。和rpc_max_threads类似,而且和下面的不同:

默认是不同的(128与不限制)

没有相应的native_transport_min_threads.

空闲线程在30秒后停止

native_transport_max_frame_size_in_mb

(默认: 256MB) 允许帧的最大大小。帧(请求)大于此的会被当成无效而被拒绝。

native_transport_max_concurrent_connections

(默认: -1)指定客户端最大并发连接数。默认的值-1,意思是不限制。

native_transport_max_concurrent_connections_per_ip

(默认: -1)指定每个源IP的客户最大并发连接数。默认的值-1,意思是不限制。

 

 

RPC (远程过程调用)设置

客户端连接的调优和配置的设置。

broadcast_rpc_address

(默认: unset)广播到驱动和其他Cassandra节点的RPC地址。不能设置成0.0.0.0。如果为空,就被设置成rpc_address或者rpc_interface的值。如果rpc_address或者 rpc_interfaceis设置成了0.0.0.0,那么该属性必须要设置。

rpc_port

(默认: 9160)客户端连接的Thrift端口。

start_rpc

(默认: true)启动Thrift RPC服务器

rpc_keepalive

(默认: true)在客户端连接启用或者禁用keepalive(RPC或者本地)

rpc_max_threads

(默认: unlimited)不管RPC服务器(rpc_server_type)的选择是什么,RPC线程池的最大请求决定了多少并发请求是可能的。然而,如果你在使用rpc_server_type的参数同步,它也决定了可连接的客户端数量。对于大量的客户端连接,这可能导致线程堆栈的内存占用过大。强烈推荐在客户端使用连接池。设置线程池的最大大小作为行为不端的客户端的防护。如果达到了最大值,Cassandra阻塞额外的连接,直到其中一个客户端断开连接。

rpc_min_threads

(默认: 16)note设置RPC线程池的最小大小

rpc_recv_buff_size_in_bytes

(默认: N/A)设置RPC接收socket缓存的大小

rpc_send_buff_size_in_bytes

(默认: N/A)设置RPC发送socket缓存的大小

rpc_server_type

(默认: sync) Cassandra提供了三种RPC服务器的选择。在Windows上,sync大约比hsha30%。在Linux上,synchsha性能差不多,但是hsha使用内存更少。

• sync: (默认每个Thrift连接一个线程)

对于一个大数量的客户端,内存是限制因素。在64JVM上,180KB是每个线程最小的栈大小,对应于你使用的虚拟内存。物理内存的限制,决定于使用的栈空间。

• hsha:

半同步,半异步。所有的Thrift客户端是异步处理的,使用少量的线程,而且不会随客户端数量而改变,从而可以很好的扩展到多客户端。RPC请求是同步的(每个主动请求一个线程)

: 当选择此项时,你必须改变rpc_max_threads的默认值(不限制)

你自己的RPC服务器

你必须提供一个完全限定的o.a.c.t.TServerFactory类名,可以创建服务器实例。

 

 

高级故障检测设置

处理性能不佳或者故障组件的设置

gc_warn_threshold_in_ms

(默认: 1000) 任何GC暂停时间长于此间隔的,都记录在WARN级别。(默认的,Cassandra把任何GC暂停时间长于200ms的,都记录在INFO级别)

更多信息:105页的Configuring logging

dynamic_snitch_badness_threshold

(默认: 0.1) 设置性能阈值,用于动态的将用户请求从性能不好的节点转移。具体来说,他控制表现不佳的节点到底有多糟,在动态告密者更喜欢其他副本之前。值为0.2意味着,Cassandra继续偏爱动态告密者直到节点响应时间比表现最好的节点要差20%。直到达到阈值,传入的请求被动态的路由到最近的副本(由告密者决定的)。如果这个参数的值比0大,而且read_repair_chance1.0小,缓存的容量在节点上最大化。

dynamic_snitch_reset_interval_in_ms

(默认: 600000 毫秒)重置所有节点分数的时间间隔,允许坏节点恢复

dynamic_snitch_update_interval_in_ms

(默认: 100 毫秒)告密者计算节点分数频率的时间间隔。因为计算分数是CPU密集型的,因此当较少该间隔时要小心。

hints_flush_period_in_ms

(默认: 10000)设置hints从内部缓存刷新到磁盘的频率。

hints_directory

(默认: $CASSANDRA_HOME/data/hints)设置hints的存储位置

hinted_handoff_enabled

(默认: true) 启用或禁用hinted handoff。想每个数据中心都启用,添加数据中心列表。举个例子:hinted_handoff_enabled: DC1,DC2。一个hint表明写需要重播到不可用的节点。Cassandrahint写入到协调者的一个hint文件里。

相关信息:见135页,Hinted Handoff:在写路径修复

hinted_handoff_disabled_datacenters

(默认: none) 指定不会执行hinted handoffs的数据中心黑名单。想要每个数据中心启用,需要添加到数据中心列表。例如,hinted_handoff_disabled_datacenters:- DC1 - DC2.

相关信息:见135页,Hinted Handoff:在写路径修复

hinted_handoff_throttle_in_kb

(默认: 1024)每秒每个传输线程最大的阈值(kb)。此速率按比例减少了集群中节点的数量。例如,如果集群中有两个节点,每个交付线程将使用最大速率。如果有三个,每个节点将节流最大值的一半,因为两个预计同时传输hints

max_hint_window_in_ms

(默认: 10800000 毫秒 [3 小时])为一个未响应的节点生成hints的最大时间。超过了这个时间间隔,新hints不会再生成,直到节点回来而且响应了。如果节点再次下线,一个新的间隔开始了。该设置可防止一个节点重新上线对于资源的突然请求,而且集群剩下的节点尝试重播大量的hinted写。

相关信息:见14页,故障检测和恢复

max_hints_delivery_threads

(默认: 2)传递hints的线程数量。在多数据中心部署中,考虑增加这个数量,因为跨数据中心的handoff一般都比较慢。

max_hints_file_size_in_mb

(默认: 128)单个hints文件的最大大小,单位MB

hints_compression

(默认: LZ4Compressor) Hints文件压缩器。支持的压缩器有:LZ, Snappy, Deflate如果你不指定一个压缩器,hints文件就不会被压缩。

batchlog_replay_throttle_in_kb

(默认: 1024KB 每秒)

总的最大阀门。阀门随着集群的节点数量的减少。

 

 

 

请求调度属性

根据定义好的策略来处理传入的客户端请求的设置。如果你需要使用这些属性,你的节点过载而且丢弃请求。建议你添加更多的节点,而不是尝试优先级的请求。

:该选项的属性仅应用于Thrift的传输。他们在本地协议使用CQL协议没有影响。

request_scheduler

(默认: org.apache.cassandra.scheduler.NoScheduler)根据定义好的策略定义一个调度来处理传入的客户端请求。这个调度对于包含多个keyspaces的单个集群的客户端请求的节流是有作用的。该参数尤其对于客户端请求很好,而且不会影响节点间通信。有效的值如下:

org.apache.cassandra.scheduler.NoScheduler

没有调度发生

org.apache.cassandra.scheduler.RoundRobinScheduler

对于一个节点的一系列的客户端请求,为每一个equest_scheduler_id使用一个单独的队列。

一个实现了RequestScheduler接口的Java

request_scheduler_id

(默认: keyspace)执行请求调度的标识符。当前唯一有效的值是keyspace。见weights

request_scheduler_options

(默认: disabled)包含了一个属性列表,定义了request_scheduler的配置选项。

• throttle_limit: Thenumber of in-flight requests per client. Requests beyond this limit are queuedup until running requests complete. Recommended value is ((concurrent_reads+concurrent_writes)× 2).

每个客户端的in-flight数量。请求超过这个限制的会进入到队列中,直到运行中的请求完成。推荐的值是((并发读数量 + 并发写数量) × 2).

• default_weight: (默认: 1)

每个回合中循环处理有多少请求。

• weights: (默认: Keyspace: 1)

它设置每个回合中循环处理有多少请求,基于request_scheduler_id.

 

 

Thrift 接口属性

旧的客户端遗留的APICQL是一个类似的而且对Cassandra来说更好的API

thrift_framed_transport_size_in_mb

(默认: 15)Thrift的帧的大小(最大字段长度)。帧是应用程序插入的行或者行的一部分。

thrift_max_message_length_in_mb

(默认: 16)Thrift消息的最大长度(MB),包括所有的字段。Thrift开销(每一帧开销1字节)。消息的长度一般和批处理结合起来使用。一帧的长度大于或等于24,容纳了四个插入的批处理,每一个是24字节。要求的消息的长度大于或等于24+24+24+24+4(帧的数量)

 

 

安全属性

服务器和客户端安全设置

authenticator

(默认: AllowAllAuthenticator) 认证后端。它实现了IAuthenticator的识别用户的接口。可用的验证器有:

AllowAllAuthenticator:

禁用验证。不进行检查。

PasswordAuthenticator

使用存储system_auth.credentials表里的在用户名称和hash处理过的密码来验证用户。如果你没有改变system_auth键空间的默认复制因子1,单副本的节点挂掉以后,就不可能登陆上集群了因为system_auth键空间还没有被复制。

相关信息:见96页,内部认证

internode_authenticator

(默认: enabled)

内部认证后端。它实现了org.apache.cassandra.auth.AllowAllInternodeAuthenticator,来允许或禁止端节点的连接。

authorizer

(默认: AllowAllAuthorizer)授权人后端。它实现了IAuthenticator来限制进入和提供权限。可用的授权者有:

AllowAllAuthorizer

禁用授权;允许任何用户的任何行为。

CassandraAuthorizer

system_auth.permissions表里存储权限。如果你没有改变system_auth键空间的默认复制因子1,而且单副本的节点挂掉以后,就不可能登陆上集群了因为system_auth键空间还没有被复制。

role_manager

(默认: CassandraRoleManager)

AuthenticationAuthorization后端的一部分,实现了IRoleManager接口来保持角色间的授权和会员身份。Cassandra提供了org.apache.cassandra.auth.CassandraRoleManager,用来在system_auth键空间里存储角色信息。大部分IRoleManager的方法都需要认证登陆,因此除非设置IAuthenticator实际实现认证,否则大多数此功能将不可用。CassandraRoleManager

system_auth键空间里存储了角色数据。如果你使用了改角色管理器,请增加system_auth的复制因子数量。

roles_validity_in_ms

(默认: 2000) 获取权限可能是一个昂贵的操作,取决于授权者,因此该设置允许很灵活。角色缓存的有效期;设置0来禁用。授权角色被缓存认证会话,过了指定时间以后,变成适合重装。使用AllowAllAuthenticator会自动变成禁用。

roles_update_interval_in_ms

(默认: 2000)如果启用,刷新角色缓存的间隔。默认和roles_validity_in_ms一样的。过了这个间隔,缓存条目成了刷新的条件。在下一次访问,异步加载,直到它完成旧的返回值。如果roles_validity_in_ms为非0,则这个也一样。

credentials_validity_in_ms

(默认: 2000) 认证在缓存中保持有效多久。这个缓存是紧密耦合提供的PasswordAuthenticator,实现了IAuthenticator如果另外一个IAuthenticator实现配置了,这个缓存就没用,这些配置都没效果。把它设为0来禁用。

相关信息:见95页,Internal authentication内部认证,97页,内部授权

: 认证以加密形式缓存。这可能会导致性能损失,抵消了缓存所获得的延迟减少。

credentials_update_interval_in_ms

(默认: credentials_validity_in_m值一样)过了这个时间,缓存条目成了刷新的条件。下次访问缓存时,系统将调度缓存的异步重载。直到该缓存重载完成,缓存才返回旧的值。如果credentials_validity_in_ms为非0,该属性也必须为非0.

permissions_validity_in_ms

(默认: 2000)缓存中的权限保持多久有效。取决于授权者,比如CassandraAuthorizer,获取权限可能是资源密集型。当设置为0或者AllowAllAuthorizer时,禁用该属性。

相关信息:见97页,Object permissions

permissions_update_interval_in_ms

(默认: permissions_validity_in_ms得值一样)Refresh interval for permissions cache (if enabled). 刷新权限的缓存间隔(如果启用)。过了这个间隔,缓存条目成了刷新的条件。下次访问缓存时,将调度一个异步重载,返回旧的值,知道它完成。如果permissions_validity_in_ms,那么该属性必须为非0.

server_encryption_options

启用或禁用节点内部加密。你也必须生成秘钥而且提供相应的秘钥和信任的位置和密码。没有当前启用的自定义加密选项。可用的选项有:

•internode_encryption: (默认: none)

启用或禁用节点内部通信加密,使用tls_rsa_with_aes_128_cbc_sha密码套件的认证、密钥交换和数据传输加密。如果运行在使用DHE / ECDHE密码(联邦信息处理标准)FIPS 140兼容模式。可用的节点间选项是:

• all

加密所有节点间通信

• none

不加密

• dc

加密数据中心之间的通信(仅对于服务器)

• rack

加密机架之间的通信(仅对有服务器)

• keystore: (默认: conf/.keystore)

一个java秘钥库的位置(JKS)适用于使用java安全套接字扩展(JSSE),这是安全套接字层(SSLjava版,和传输层安全(TLS)协议。

秘钥库包含了私有秘钥,用来加密对外的消息。

• keystore_password: (默认: cassandra)

秘钥库的密码

truststore: (默认: conf/.truststore)

信任库的位置,包含了验证远程服务器的可信任证书。

truststore_password: (默认: cassandra)

信任库的密码。这些选项里的密码必须符合生成秘钥库和信任库里的密码。想看生成这些文件的说明,请参阅使用JSSE来生成秘钥库。

高级设置有:

protocol: (默认: TLS)

algorithm: (默认: SunX509)

store_type: (默认: JKS)

cipher_suites: (默认:

TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA)

require_client_auth: (默认: false)

 

 

启用或禁用证书认证。

相关信息:见95页,Node-to-node encryption节点与节点之间加密

client_encryption_options

禁用或启用客户端-节点间加密。你也必须生成秘钥而且提供相应的秘钥和信任的位置和密码。没有当前启用的自定义加密选项。可用的选项有:

• enabled: (默认: false)

设置true来启用

• keystore: (默认: conf/.keystore)

The location of a Javakeystore (JKS) suitable for use with Java Secure Socket Extension (JSSE), whichis the Java version of the Secure Sockets Layer (SSL), and Transport LayerSecurity (TLS) protocols.

一个java秘钥库的位置(JKS)适用于使用java安全套接字扩展(JSSE),这是安全套接字层(SSLjava版,和传输层安全(TLS)协议。

秘钥库包含了私有秘钥,用来加密对外的消息。

• keystore_password: (默认: cassandra)

秘钥库的密码。这些选项里的密码必须符合生成秘钥库和信任库里的密码。想看生成这些文件的说明,请参阅使用JSSE来生成秘钥库。

• require_client_auth:(默认: false)

启用或禁用证书验证(Cassandra 1.2.3开始可用)

• truststore:(Default: conf/.truststore)

如果require_client_authtrue,则设置。

• truststore_password:<truststore_password>

如果require_client_authtrue,则设置。

 

高级设置有:

• protocol: (默认: TLS)

• algorithm: (默认: SunX509)

• store_type: (默认: JKS)

• cipher_suites:(Default:

TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA)

相关信息:见92页,Client-to-node encryption客户端-节点加密

transparent_data_encryption_options

使数据在静止(磁盘上)加密。推荐:下载和安装对应JDK版本的Java Cryptography Extension (JCE) UnlimitedStrength Jurisdiction Policy Files

Cassandra支持的透明数据加密的文件类型:

commitlog

hints

可用选项有:

• enabled: (默认: false)

• chunk_length_kb: (默认: 64)

• cipher: options:

• AES

• CBC

• PKCS5Padding

• key_alias: testing:1

• iv_length: 16

: iv_lengthcassandra.yaml文件里是默认被注释的。除非cipher设置成了AES才取消注释。值必须是16(字节)

• key_provider:

• class_name: org.apache.cassandra.security.JKSKeyProvider

parameters:

• keystore: conf/.keystore

• keystore_password: cassandra

• store_type: JCEKS

• key_password: cassandra

ssl_storage_port

(默认: 7001)加密通信的SSL端口。除非启用encryption_options,否则不使用。

native_transport_port_ssl

(默认: 9142) Cassandra 3.0和后来的版本中,一个额外的专用端口可以指定用于加密。如果客户端加密启用而且native_transport_port_ssl是禁用的,native_transport_port(默认:9042)将加密所有流量。要使用非加密和加密的流,启用native_transport_port_ssl

 

 

Cassandrainclude文件

Set environmentvariables (cassandra.in.sh).

设置环境变量,Cassandra使用cassandra.in.sh,位于:

• Tarball 安装: install_location/bin/cassandra.in.sh

• Package 安装: /usr/share/cassandra/cassandra.in.sh

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:67329次
    • 积分:1380
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:205篇
    • 译文:10篇
    • 评论:11条
    Coding
      你只看到我在不停的忙碌,却没看到我奋斗的热情。你有朝九晚五,我有通宵达旦。你否定我的现在,我决定我的未来。你可以轻视我的存在,我会用代码证明这是谁的时代!梦想是注定孤独的旅行,路上少不了质疑和嘲笑,但那又怎么样 。哪怕遍体鳞伤 也要coding。我是java程序员 我为自己代言!
    博客专栏
    最新评论