如何解决 ConfigurationException: 在 Centos7 上配置多节点 Cassandra 集群时缺少必需的指令 CommitLogSync?

030*_*030 0 cassandra centos7

目标:在Centos7上配置多节点Cassandra集群


方法

本文档用于配置多节点 Cassandra 集群。

[user@cassandra01 ~]$ cat /etc/cassandra/conf/cassandra.yaml
cluster_name: 'MyCassandraCluster'
num_tokens: 256
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "<ipaddress_cassandra01>,<ipaddress_cassandra02>"
listen_address:
rpc_address: 0.0.0.0
endpoint_snitch: GossipingPropertyFileSnitch
Run Code Online (Sandbox Code Playgroud)

问题

当第一个 Cassandra 节点通过发出以下命令启动时:

sudo systemctl start cassandra
Run Code Online (Sandbox Code Playgroud)

该节点似乎没有启动,并且/var/log/cassandra/cassandra.log指示:

 INFO 12:56:38,057 Loading settings from file:/etc/cassandra/default.conf/cassandra.yaml
 INFO 12:56:40,073 Data files directories: null
 INFO 12:56:40,089 Commit log directory: null
ERROR 12:56:40,097 Fatal configuration error
org.apache.cassandra.exceptions.ConfigurationException: Missing required directive CommitLogSync
        at org.apache.cassandra.config.DatabaseDescriptor.applyConfig(DatabaseDescriptor.java:148)
        at org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:112)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:213)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:554)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:643)
Missing required directive CommitLogSync
Fatal configuration error; unable to start. See log for stacktrace.
Run Code Online (Sandbox Code Playgroud)

尝试解决问题

根据错误消息,似乎存在配置问题或某些目录不存在。

1)Missing required directive CommitLogSync

根据此文档,有一个默认值commitlog_sync,即:

commitlog_sync (默认:periodic ) Cassandra 用于确认以毫秒为单位的写入的方法:

    periodic : Used with commitlog_sync_period_in_ms (Default: 10000 - 10 seconds ) to control how often the commit log is
Run Code Online (Sandbox Code Playgroud)

同步到磁盘。定期同步会立即得到确认。batch :与 commitlog_sync_batch_window_in_ms 一起使用(默认:禁用 **)来控制 Cassandra 在执行同步之前等待其他写入的时间。使用此方法时,直到 fsync 到磁盘后才会确认写入。

2)Data files directories: null

data_file_directories (默认值: /var/lib/cassandra/data )存储表数据 (SSTables) 的目录位置。

发出ls /var/lib/cassandra/data返回 a0并指示该目录存在。

3)Commit log directory: null

commitlog_directory (默认: /var/lib/cassandra/commitlog )存储提交日志的目录。为了获得最佳写入性能,建议提交日志位于与数据文件目录不同的磁盘分区(最好是单独的物理设备)上。

确认该/var/lib/cassandra/commitlog目录也存在。


问题

造成此问题的原因是什么以及如何解决?

030*_*030 5

尽管文档表明有默认设置,但软件本身要求这些设置在 cassandra.yaml 中定义。在 中定义以下内容/etc/cassandra/conf/cassandra.yaml

data_file_directories:
  - /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches
Run Code Online (Sandbox Code Playgroud)

并重新启动 cassandra 解决了该问题。