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

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

目的:在 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

问题

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

sudo systemctl start cassandra

该节点似乎没有启动,并/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.

尝试解决问题

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

1)Missing required directive CommitLogSync

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

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

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

同步到磁盘。定期同步会立即确认。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返回0并表明该目录存在。

3)Commit log directory: null

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

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


问题

是什么原因导致了这个问题以及如何解决它?

答案1

虽然文档表明有默认设置,但软件本身要求在 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

重新启动 Cassandra 解决了该问题。

相关内容