Cassandra--配置文件讲解

  本篇博客主要讲Cassandra的配置文件,主要是说的cassandra.yaml里面的一些配置项。这里会把主要的都列出来,以供参考,后续有新的东西也会持续补充更新。

Cassandra配置文件

  1. 在0.7版本之前,cassandra的配置文件是conf/storage-conf.xml文件。0.7之后是conf/cassandra.yaml文件
  2. 可以通过-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

集群相关

  1. cluster_name
    集群名称:同一集群该值相同,默认:Test Cluster

  2. initial_token(Token值,表示了一致性哈希环中的位置)
    默认为空,系统自动生成。为空还表示使用virtual nodes,删除了节点之后它会自动均衡数据,不要你手动处理。

  3. auto_bootstrap   
    第一次启动的时候,是否在加入Cassandra集群时从其他服务器获取属于本服务器的数据。如果当前Cassandra服务器不在seed配置选项中,并且是第一次启动,将从Cassandra集群中其他服务器获取属于本服务器的数据。  

种子地址

  • seed_provider
    通过该参数设置种子地址,以用来发现子节点
    • class_name (默认: org.apache.cassandra.locator.SimpleSeedProvider),可以自定义
    • seeds (默认: 127.0.0.1)
      gossip用来引导新节点加入集群中去,多数据中心的集群,最好每个数据中心都包含一个种子节点(容错,推荐超过一个种子节点)。
      否则,gossip在引导一个新节点时不得不和另外一个数据中心通信了。不推荐把每个节点都当成种子节点(大概每个数据中心三个种子节点)。

权限相关

  1. authenticator 用户授权,选项:
    1.1. AllowAllAuthenticator:(默认值)不需要密码,具备所有的权限
    1.2. SimpleAuthenticator:需要账号密码(用户/密码在passwd.properties文件中定义)

  2. authority 校验权限
    验证该用户是否具备操作某一个Column Family的权限,这是安全认证的第一步。Cassandra中定义了一系列验证用户权限的策略,可以选择的项为:   
    2.1. AllowAllAuthority:(默认值),用户具备所有的权限
    2.2. SimpleAuthority:需要校验(用户/权限在access.properties文件中定义)

  3. role_manager: CassandraRoleManager

  4. roles_validity_in_ms: 2000
  5. permissions_validity_in_ms: 2000
  6. credentials_validity_in_ms: 2000

数据分区策略

  • partitioner:数据分区的策略(集群中所有节点该配置相同)   
    1. org.apache.cassandra.dht.RandomPartitioner   
    2. org.apache.cassandra.dht.ByteOrderedPartitioner   
    3. org.apache.cassandra.dht.OrderPreservingPartitioner   
    4. org.apache.cassandra.dht.CollatingOrderPreservingPartitioner  

数据目录

  1. data_file_directories:SSTable数据文件存储位置
    (默认:$CASSANDRA_HOME/data/data)下面示例多个的写法

    1
    2
    3
    4
    data_file_directories:
    - /data1/cassandra/data
    - /data2/cassandra/data
    - /data3/cassandra/data
  2. commitlog_directory:日志文件目录
    (默认:$CASSANDRA_HOME/data/commitlog),最好和SSTable文件目录分不同磁盘 

  3. saved_caches_directory:数据缓存目录
    (默认:$CASSANDRA_HOME/data/saved_caches)这个目录是table key和row缓存存放的地方

commit log文件

  1. commitlog_sync:commitlog同步方式
    2.1. periodic:周期同步commitlog,每一次有数据更新都将操作commitlog。   
    2.2. batch :批量同步commitlog

  2. commitlog_sync_period_in_ms   
    周期记录commitlog时,刷新commitlog文件的时间间隔。这个选项只有在commitlog_sync= periodic时才能设置。   

  3. commitlog_sync_batch_window_in_ms   
    批量记录commitlog时,批量操作缓存的时间间隔。这个选项只有在commitlog_sync= batch时才能设置。   

  4. commitlog_segment_size_in_mb: 32

数据文件访问

  • disk_access_mode:Cassandra访问SSTable文件中的Data文件和Index文件时是否使用虚拟内存映射的形式。
    1. auto   自动选择合适的文件访问形式,如果是64位系统,则为mmap形式,否则为standard形式。   
    2. mmap   访问SSTable文件中的Data文件和Index文件时,都采用虚拟内存映射的形式。   
    3. mmap_index_only   访问SSTable文件中的Index文件时采用虚拟内存映射的形式。   
    4. standard   访问SSTable文件中的Data文件和Index文件时,都不采用虚拟内存映射的形式。使用虚拟内存映射的形式访问文件能够加快对文件的读写速度,但是这是以消耗而外的内存作为代价的。所以要根据实际内存大小与文件大小来选择合适的文件访问方式。   

并发

  1. concurrent_reads   
    (默认: 32)并发读取的线程数,这个选项设置得越大,Cassandra在进行读取操作时可以使用的线程数就越多。推荐的配置为:CPU的个数*2。   

  2. concurrent_writes   
    (默认: 32)并发写入的线程数,这个选项设置得越大,Cassandra在进行写入操作时可以使用的线程数就越多。   

  3. concurrent_counter_writes
    (默认: 32)注计数器在自增之前写当前读的值,然后写回调。推荐值是(16x处理器数量)

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

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

地址端口通信

  1. storage_port: 服务器与服务器通信端口  

  2. listen_address: 服务器与服务器通信地址(默认:localhost),也可以设置listen_interface,不需要同时设置

  3. rpc_address: 服务器对外通信地址(默认使用主机名) 

  4. rpc_port: 服务器对外通信端口   

  5. rpc_keepalive: rpc连接是否一直保持。  

  6. rpc_timeout_in_ms: rpc超时限制

  7. rpc_min_threads: 16
  8. rpc_max_threads: 2048

  9. thrift_framed_transport_size_in_mb :使用Thrift Frame每次传递的数据大小。如果该选项为0,则禁用Thrift Frame。   

  10. thrift_max_message_length_in_mb :使用Thrift传递的数据最大值。   

数据压缩

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

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

  3. snapshot_before_compaction:在执行数据压缩操作前
    是否对需要压缩的SSTable文件做数据快照(snapshot),默认:false。     

  4. in_memory_compaction_limit_in_mb:在Cassandra执行数据压缩时
    如果某一个key对应的数据的大小超过了in_memory_compaction_limit_in_mb的限制,将采用延后压缩的机制进行压缩,避免使用过多的内存。   

  5. column_index_size_in_kb:SSTable数据文件对应索引的数据大小间隔。如果这个值越小,在Column索引中找到相应的值速度就越快,但是会消耗更多的内存与磁盘空间。

  6. index_interval   
    SSTable文件中的Index文件对应内存索引的数据大小间隔。如果这个值越小,在内存索引中找到相应的值速度就越快,但是会消耗更多的内存。   

memtable设置

  1. memtable_heap_space_in_mb
    (默认: 1/4 堆大小)
    设置在堆内存里分配的memtables的大小。Cassandra使用这个和memtable_offheap_space_in_mb的值总和来决定何时自动刷新memtables。
  2. memtable_offheap_space_in_mb
    (默认: 1/4堆大小)
    设置在堆外内存里分配的memtables大小。Cassandra使用这个和memtable_heap_space_in_mb的值总和来决定何时自动刷新memtable

  3. memtable_flush_writers   
    memtable中的数据写入到磁盘成为SSTable文件的并发数, 这个选项的默认配置为data_file_directories中指定的目录的个数。    

  4. sliced_buffer_size_in_kb:进行范围读取操作时,读取SSTable文件使用的缓存大小。

策略相关

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

    • die:关闭gossip和Thrift,然后杀掉JVM进程,这样节点就可以被替换。
    • stop:关闭gossip和Thrift,使节点实际上死亡了,但是可以使用JMX检查。
    • stop_commit:关闭commit log,让写聚集,但继续提供读服务(就像Cassandra 2.0.5之前的版本)。
    • ignore:忽略致命错误,并让批失败。
  2. disk_optimization_strategy:(默认: ssd)优化磁盘读取策略可以设置成固态硬盘或者旋转的。

  3. 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版本之前是这种情况
  4. 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/53982900

  5. dynamic_snitch:是否启用动态的节点选择策略,相关的其他选项为:
    2.1. dynamic_snitch_update_interval_in_ms:
    2.2. dynamic_snitch_reset_interval_in_ms:
    2.3. dynamic_snitch_badness_threshold:

  6. request_scheduler:资源调度分配策略 ,选项:   
    3.1. org.apache.cassandra.scheduler.NoScheduler,所有的请求分配的计算资源都是均等的(默认)。   
    3.2. org.apache.cassandra.scheduler.RoundRobinScheduler,对不同的Keyspace分配不同的计算资源(多租户的情况下适合)。   

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器