Цель: для настройки многоузлового кластера Cassandra на Centos7
Метод
Эта документация используется для настройки многоузлового кластера 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 (По умолчанию: периодический) Метод, который 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 ждет других записей перед выполнением синхронизации. При использовании этого метода записи не подтверждаются до тех пор, пока не будут синхронизированы с диском.
2) Data files directories: null
:
каталог_файлов_данных (по умолчанию: / 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
каталог тоже существует.
Вопрос
Что вызывает эту проблему и как ее решить?
Хотя в документации указано, что существуют настройки по умолчанию, само программное обеспечение требует, чтобы они были определены в 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 решил проблему.