Cassandra--配置文件讲解
本篇博客主要讲Cassandra的配置文件,主要是说的cassandra.yaml
里面的一些配置项。这里会把主要的都列出来,以供参考,后续有新的东西也会持续补充更新。
Cassandra配置文件
- 在0.7版本之前,cassandra的配置文件是
conf/storage-conf.xml
文件。0.7之后是conf/cassandra.yaml
文件 - 可以通过-Dcassandra.conf指定需要加载的配置文件,例如:
1
2
3
4
-Dcassandra.config=alternate-cassandra.yaml
-Dcassandra.config=http://www.example.com/remote-cassandra.yaml
-Dcassandra.config=file:///home/me/external-local-cassandra.yaml
集群相关
cluster_name
集群名称:同一集群该值相同,默认:Test Clusterinitial_token
(Token值,表示了一致性哈希环中的位置)
默认为空,系统自动生成。为空还表示使用virtual nodes,删除了节点之后它会自动均衡数据,不要你手动处理。auto_bootstrap
第一次启动的时候,是否在加入Cassandra集群时从其他服务器获取属于本服务器的数据。如果当前Cassandra服务器不在seed配置选项中,并且是第一次启动,将从Cassandra集群中其他服务器获取属于本服务器的数据。
种子地址
seed_provider
通过该参数设置种子地址,以用来发现子节点- class_name (默认: org.apache.cassandra.locator.SimpleSeedProvider),可以自定义
- seeds (默认: 127.0.0.1)
gossip用来引导新节点加入集群中去,多数据中心的集群,最好每个数据中心都包含一个种子节点(容错,推荐超过一个种子节点)。
否则,gossip在引导一个新节点时不得不和另外一个数据中心通信了。不推荐把每个节点都当成种子节点(大概每个数据中心三个种子节点)。
权限相关
authenticator 用户授权,选项:
1.1. AllowAllAuthenticator:(默认值)不需要密码,具备所有的权限
1.2. SimpleAuthenticator:需要账号密码(用户/密码在passwd.properties文件中定义)authority 校验权限
验证该用户是否具备操作某一个Column Family的权限,这是安全认证的第一步。Cassandra中定义了一系列验证用户权限的策略,可以选择的项为:
2.1. AllowAllAuthority:(默认值),用户具备所有的权限
2.2. SimpleAuthority:需要校验(用户/权限在access.properties文件中定义)role_manager: CassandraRoleManager
- roles_validity_in_ms: 2000
- permissions_validity_in_ms: 2000
- credentials_validity_in_ms: 2000
数据分区策略
- partitioner:数据分区的策略(集群中所有节点该配置相同)
- org.apache.cassandra.dht.RandomPartitioner
- org.apache.cassandra.dht.ByteOrderedPartitioner
- org.apache.cassandra.dht.OrderPreservingPartitioner
- org.apache.cassandra.dht.CollatingOrderPreservingPartitioner
数据目录
data_file_directories:SSTable数据文件存储位置
(默认:$CASSANDRA_HOME/data/data)下面示例多个的写法1
2
3
4data_file_directories:
- /data1/cassandra/data
- /data2/cassandra/data
- /data3/cassandra/datacommitlog_directory:日志文件目录
(默认:$CASSANDRA_HOME/data/commitlog),最好和SSTable文件目录分不同磁盘saved_caches_directory:数据缓存目录
(默认:$CASSANDRA_HOME/data/saved_caches)这个目录是table key和row缓存存放的地方
commit log文件
commitlog_sync:commitlog同步方式
2.1. periodic:周期同步commitlog,每一次有数据更新都将操作commitlog。
2.2. batch :批量同步commitlogcommitlog_sync_period_in_ms
周期记录commitlog时,刷新commitlog文件的时间间隔。这个选项只有在commitlog_sync= periodic时才能设置。commitlog_sync_batch_window_in_ms
批量记录commitlog时,批量操作缓存的时间间隔。这个选项只有在commitlog_sync= batch时才能设置。commitlog_segment_size_in_mb: 32
数据文件访问
- disk_access_mode:Cassandra访问SSTable文件中的Data文件和Index文件时是否使用虚拟内存映射的形式。
- auto 自动选择合适的文件访问形式,如果是64位系统,则为mmap形式,否则为standard形式。
- mmap 访问SSTable文件中的Data文件和Index文件时,都采用虚拟内存映射的形式。
- mmap_index_only 访问SSTable文件中的Index文件时采用虚拟内存映射的形式。
- standard 访问SSTable文件中的Data文件和Index文件时,都不采用虚拟内存映射的形式。使用虚拟内存映射的形式访问文件能够加快对文件的读写速度,但是这是以消耗而外的内存作为代价的。所以要根据实际内存大小与文件大小来选择合适的文件访问方式。
并发
concurrent_reads
(默认: 32)并发读取的线程数,这个选项设置得越大,Cassandra在进行读取操作时可以使用的线程数就越多。推荐的配置为:CPU的个数*2。concurrent_writes
(默认: 32)并发写入的线程数,这个选项设置得越大,Cassandra在进行写入操作时可以使用的线程数就越多。concurrent_counter_writes
(默认: 32)注计数器在自增之前写当前读的值,然后写回调。推荐值是(16x处理器数量)concurrent_batchlog_writes
(默认: 32)并发批量写日志的限制,类似于concurrent_writesconcurrent_materialized_view_writes
(默认: 32) 比并发读或者并发写更少的并发物化视图的写,因为物化视图写中包含了一个读取。
地址端口通信
storage_port
: 服务器与服务器通信端口listen_address
: 服务器与服务器通信地址(默认:localhost),也可以设置listen_interface
,不需要同时设置rpc_address
: 服务器对外通信地址(默认使用主机名)rpc_port
: 服务器对外通信端口rpc_keepalive
: rpc连接是否一直保持。rpc_timeout_in_ms
: rpc超时限制rpc_min_threads
: 16rpc_max_threads
: 2048thrift_framed_transport_size_in_mb
:使用Thrift Frame每次传递的数据大小。如果该选项为0,则禁用Thrift Frame。thrift_max_message_length_in_mb
:使用Thrift传递的数据最大值。
数据压缩
compaction_throughput_mb_per_sec
(默认: 16) compaction指定的总吞吐量的阀值。你插入速度越快,越需要在规定时间内更快的压缩速度。推荐的值是16到32的写吞吐量(单位:Mb/s)。
设为0,表示禁用compaction throttling。compaction_large_partition_warning_threshold_mb
(默认: 100) 在压缩分区大于设定值时记录警告。snapshot_before_compaction
:在执行数据压缩操作前
是否对需要压缩的SSTable文件做数据快照(snapshot),默认:false。in_memory_compaction_limit_in_mb
:在Cassandra执行数据压缩时
如果某一个key对应的数据的大小超过了in_memory_compaction_limit_in_mb的限制,将采用延后压缩的机制进行压缩,避免使用过多的内存。column_index_size_in_kb
:SSTable数据文件对应索引的数据大小间隔。如果这个值越小,在Column索引中找到相应的值速度就越快,但是会消耗更多的内存与磁盘空间。index_interval
SSTable文件中的Index文件对应内存索引的数据大小间隔。如果这个值越小,在内存索引中找到相应的值速度就越快,但是会消耗更多的内存。
memtable设置
memtable_heap_space_in_mb
(默认: 1/4 堆大小)
设置在堆内存里分配的memtables的大小。Cassandra使用这个和memtable_offheap_space_in_mb的值总和来决定何时自动刷新memtables。memtable_offheap_space_in_mb
(默认: 1/4堆大小)
设置在堆外内存里分配的memtables大小。Cassandra使用这个和memtable_heap_space_in_mb的值总和来决定何时自动刷新memtablememtable_flush_writers
memtable中的数据写入到磁盘成为SSTable文件的并发数, 这个选项的默认配置为data_file_directories中指定的目录的个数。sliced_buffer_size_in_kb
:进行范围读取操作时,读取SSTable文件使用的缓存大小。
策略相关
commit_failure_policy
:(默认: stop)提交磁盘故障策略- die:关闭gossip和Thrift,然后杀掉JVM进程,这样节点就可以被替换。
- stop:关闭gossip和Thrift,使节点实际上死亡了,但是可以使用JMX检查。
- stop_commit:关闭commit log,让写聚集,但继续提供读服务(就像Cassandra 2.0.5之前的版本)。
- ignore:忽略致命错误,并让批失败。
disk_optimization_strategy
:(默认: ssd)优化磁盘读取策略可以设置成固态硬盘或者旋转的。disk_failure_policy
:(默认: stop)设置Cassandra如何响应磁盘故障。建议设置成stop或者best_effort。- die:关闭gossip和Thrift,然后对于任何系统错误或者仅仅是SSTable错误,都杀掉JVM进程,这样节点就可以被替换。
- stop_paranoid:关闭gossip和Thrift,即使仅仅是SSTable错误。
- stop:关闭gossip和Thrift,让节点实际上死亡了,但是可以使用JVX检查。
- best_effort:停止使用故障磁盘,然后基于剩余可用的SSTables来响应请求。这意味着你会在一致性级别为1的基础上看到过时的数据。
- ignore:忽略致命错误,并允许请求失败;所有文件系统错误都会被记录,但是忽略。在Cassandra 1.2版本之前是这种情况
endpoint_snitch:网络选择策略,选项:
4.1. SimpleSnitch(默认)
用于单数据中心部署或者公共云中的单个区域。不识别数据中心或者机架信息。它视策略顺序为接近,当忽略读修复时可以提高缓存局部性。
4.2. GossipingPropertyFileSnitch
建议生产使用。本地节点机架和数据中心定义在cassandra-rackdc.properties文件里,通过八卦协议传播到其他节点。
为了便于从PropertyFileSnitch移植,它也使用cassandra-topology.properties,如果存在的话。
4.3. PropertyFileSnitch
决定于机架和数据中心的距离,这是明确的在cassandratopology.properties文件里配置的。
4.4. 更多参考:http://blog.csdn.net/qq_32523587/article/details/53982900dynamic_snitch:是否启用动态的节点选择策略,相关的其他选项为:
2.1. dynamic_snitch_update_interval_in_ms:
2.2. dynamic_snitch_reset_interval_in_ms:
2.3. dynamic_snitch_badness_threshold:request_scheduler:资源调度分配策略 ,选项:
3.1. org.apache.cassandra.scheduler.NoScheduler,所有的请求分配的计算资源都是均等的(默认)。
3.2. org.apache.cassandra.scheduler.RoundRobinScheduler,对不同的Keyspace分配不同的计算资源(多租户的情况下适合)。