目的:在 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 解决了该问题。