CentOS 8 に Apache Cassandra をインストールして設定する

目的と対象読者
このガイドは、CentOS 8 上で単一ノードまたはテスト用クラスターとして Apache Cassandra を素早く導入したいシステム管理者、SRE、開発者向けです。既に root 権限を持ち、基本的なシェル操作に慣れていることを想定します。Cassandra は高可用性・スケーラビリティを重視する分散 NoSQL データベースで、データ損失を許容できないワークロードに向きます。
主要な用語(1行定義)
- Cassandra: 分散型NoSQLデータベース。高可用性、スケーラビリティに強みがあります。
- CQL: Cassandra Query Language。データ操作用のクエリ言語。
- nodetool: Cassandra ノードの状態確認や操作に使う管理ツール。
要件
- CentOS 8 を実行するサーバ(最小 2 GB RAM を推奨)。
- root アカウントまたは sudo 権限。
- ネットワークアクセス(DataStax RPM リポジトリにアクセスできること)。
重要: 本手順はテスト/開発用の最短セットアップです。本番運用では複数ノードの配置、適切なバックアップ、監視、セキュリティ対策が必須です。
準備 — システムを最新にする
まずパッケージを最新化します。
dnf update
更新後、必要に応じてサーバを再起動してください。
Java と Python のインストール
Cassandra は OpenJDK 8 と Python2 を前提とするバージョンが多いです。必要パッケージをインストールします。
dnf install java-1.8.0-openjdk-devel python2
Java バージョンを確認します。
java -version
期待される例:
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
Apache Cassandra のインストール(DataStax リポジトリ経由)
CentOS 8 標準リポジトリに Cassandra が無い場合、DataStax のコミュニティ RPM リポジトリを追加します。
- リポジトリファイルを作成します。
nano /etc/yum.repos.d/cassandra.repo
内容を以下のように保存します。
[cassandra]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0
- Cassandra パッケージをインストールします。
dnf install dsc20
インストールが完了したら次のセクションへ進みます。
systemd サービスユニットファイルの作成
多くのパッケージは自動でサービスファイルを作成しません。手動で systemd ユニットを作成してサービス管理を容易にします。
nano /etc/systemd/system/cassandra.service
以下を保存します。
[Unit]
Description=Apache Cassandra
After=network.target
[Service]
PIDFile=/var/run/cassandra/cassandra.pid
User=cassandra
Group=cassandra
ExecStart=/usr/sbin/cassandra -f -p /var/run/cassandra/cassandra.pid
Restart=always
[Install]
WantedBy=multi-user.target
ファイル保存後、systemd をリロードしてサービスを起動・有効化します。
systemctl daemon-reload
systemctl start cassandra
systemctl enable cassandra
サービスの状態確認:
systemctl status cassandra
期待されるログ例(起動中の断片):
? cassandra.service - Apache
Loaded: loaded (/etc/systemd/system/cassandra.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2019-12-07 01:25:26 EST; 1min 51s ago
Main PID: 1888 (java)
Tasks: 53 (limit: 25044)
Memory: 272.7M
CGroup: /system.slice/cassandra.service
??1888 java -ea -javaagent:/usr/share/cassandra/lib/jamm-0.2.5.jar -XX:+CMSClassUnloadingEnabled -XX:+UseThreadPriorities -XX:Threa>
Dec 07 01:25:29 centos8 cassandra[1888]: INFO 01:25:29,054 Writing Memtable-local@1642973315(10104/101040 serialized/live bytes, 259 ops)
Dec 07 01:25:29 centos8 cassandra[1888]: INFO 01:25:29,118 Completed flushing /var/lib/cassandra/data/system/local/system-local-jb-4-Data.db >
動作確認 — nodetool と cqlsh
ノードの状態を確認します。
nodetool status
期待される出力例:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 127.0.0.1 46.11 KB 256 100.0% 2a680007-8c30-4bde-9a3f-9fa212b96d11 rack1
CQL シェルを使って接続テスト:
cqlsh
期待される出力例:
Connected to Test Cluster at localhost:9160.
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh>
クラスタ名の変更手順
デフォルトのクラスタ名 “Test Cluster” を変更する手順です。
- cqlsh に入ります。
cqlsh
- システムテーブルを更新してクラスタ名を変更します。
cqlsh> UPDATE system.local SET cluster_name = 'HowtoForge Cluster' WHERE KEY = 'local';
- cqlsh を終了します。
cqlsh> exit;
- Cassandra の設定ファイルにも反映します。
nano /etc/cassandra/default.conf/cassandra.yaml
ファイル内の行を変更:
cluster_name: 'HowtoForge Cluster'
- システムキャッシュをクリアしてサービスを再起動します。
nodetool flush system
systemctl restart cassandra
再度 cqlsh で接続するとクラスタ名が更新されています。
Connected to HowtoForge Cluster at localhost:9160.
トラブルシューティングとよくある失敗例
- 起動が遅い/起動しない: /var/log/cassandra/system.log や journalctl -u cassandra を確認。Java のヒープや ulimit、ファイルディスクリプタ制限が原因のことが多いです。
- ポートがバインドできない: 9042(CQL)や 9160(Thrift)が既に使われていないか確認します。
- nodetool が接続できない: 環境変数や JAVA_HOME が正しく設定されているか、Cassandra が期待するユーザー(cassandra)で実行されているか確認してください。
- パッケージ未検出: DataStax リポジトリの URL に到達できるか、プロキシ設定やファイアウォールを確認してください。
代替アプローチと注意点
- オフィシャル Apache Cassandra RPM を利用する方法:DataStax パッケージの代わりに公式リポジトリやソースからビルドする選択肢があります。パッケージ名やパスが異なるため起動スクリプトを調整する必要があります。
- コンテナ化: Docker / Kubernetes 上で Cassandra を展開する場合は永続ストレージや StatefulSet 設定を検討してください。
- 管理サービス: マネージドな Cassandra サービス(クラウドベンダー提供)を使えば運用負荷を減らせます。
セキュリティと運用上のベストプラクティス
- ネットワーク: Cassandra の管理ポート(JMX など)を外部に開放しないでください。必要に応じてファイアウォールや VPN を用いてアクセス制御を行います。
- 認証と暗号化: 本番では CQL 認証(PasswordAuthenticator)とトランスポート暗号化(SSL/TLS)を有効にしてください。
- ユーザー管理: Cassandra のデータディレクトリやサービスは専用ユーザー(cassandra)で実行し、root 直下で実行しないでください。
- バックアップ: nodetool snapshot や外部バックアップを定期的に取得し、復旧手順をドキュメント化します。
ロール別チェックリスト
- システム管理者:
- Java と Python2 がインストールされている
- DataStax リポジトリが設定されている
- systemd ユニットが正しく配置され、有効化されている
- SRE/運用:
- nodetool status でノードが UP になっている
- 監視(CPU/メモリ/I/O)とログ収集を設定
- 定期バックアップと復旧テストを実施
- 開発者:
- cqlsh でテーブル作成・クエリが実行できる
- 一貫性レベル(CONSISTENCY)要件を明確化
ミニ手順(SOP) — 新しいノードの追加(概要)
- 既存ノードの設定(seeds)を確認。
- 新サーバに Java をインストール。
- Cassandra をインストールし、cassandra.yaml の seeds と listen_address を設定。
- systemctl start cassandra を実行し、nodetool status で JOIN を確認。
1行用語集
- SSTable: Cassandra のディスク上の永続ストレージファイル。
- Memtable: メモリ上の書き込みキャッシュ、一定条件で SSTable にフラッシュされる。
テストケース(基本受入基準)
- nodetool status が少なくとも 1 ノードを UP として報告すること。
- cqlsh でキースペース作成・読み書きができること。
- systemctl status cassandra が active (running) を返すこと。
注意: これらは最小要件です。本番導入前にスケーリングや可観測性、耐障害性の検証を必ず行ってください。
結論
CentOS 8 上で Cassandra を動かす基本手順は、Java と Python2 の導入、DataStax リポジトリからのパッケージインストール、systemd ユニット作成、CQL による基本設定という流れです。本ガイドはシングルノード/テスト環境向けの最短手順を示しています。運用環境では複数ノードのクラスタ設計、セキュリティ設定、バックアップ運用、監視の整備が必須です。
まとめ: インストール → サービス登録 → 起動確認 → CQL で設定 → 本番前の追加検証。
ご質問があれば、使用ケース(本番か開発か、ノード数、期待するスループット)を教えてください。より具体的なアドバイスを差し上げます。