目标:在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 用于确认以毫秒为单位的写入的方法:
Run Code Online (Sandbox Code Playgroud)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
返回 a0
并指示该目录存在。
3)Commit log directory: null
:
commitlog_directory (默认: /var/lib/cassandra/commitlog )存储提交日志的目录。为了获得最佳写入性能,建议提交日志位于与数据文件目录不同的磁盘分区(最好是单独的物理设备)上。
确认该/var/lib/cassandra/commitlog
目录也存在。
问题
造成此问题的原因是什么以及如何解决?
尽管文档表明有默认设置,但软件本身要求这些设置在 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 解决了该问题。
归档时间: |
|
查看次数: |
6110 次 |
最近记录: |