Apache Cassandra を CentOS 7 にインストールする
概要
Apache Cassandra は分散型のオープンソース NoSQL データベースで、大規模データの分散保存、可用性の高さ、単一障害点の排除を目的としています。本チュートリアルは CentOS 7 上での Cassandra 3.11 系のインストールを想定しています。Cassandra クラスターに対する対話型シェルは cqlsh、管理用のツールは nodetool です。
重要な用語(1行定義)
- Cassandra: 分散型 NoSQL データベース。スケーラブルで高可用性。
- CQL: Cassandra Query Language、Cassandra 用の SQLライクなクエリ言語。
- nodetool: Cassandra ノードのステータス確認・管理ツール。
- cqlsh: CQL を入力してクラスタに対話的に問い合わせるシェル。
前提条件
- CentOS 7 が稼働していること(root 権限または sudo 利用)
- ネットワークから Oracle のダウンロードや Apache リポジトリにアクセスできること
- 最低限 Java 8 が必要(本手順では jdk1.8.0_131 を例示)
ステップ 1 — Java をインストール
まずパッケージとリポジトリを最新に更新することを推奨します。
yum -y update
更新後、Oracle Java(この例では JDK 8u131)をダウンロードしてインストールします。RPM を取得するコマンド例:
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"
wget が未インストールなら以下で追加できます。
yum -y install wget
ダウンロードした RPM をローカルインストールします。
yum -y localinstall jdk-8u131-linux-x64.rpm
Java のバージョン確認:
java -version
例として以下のような出力が得られます。
[root@liptan-pc ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
JAVA_HOME 環境変数が設定されているか確認します。
echo $JAVA_HOME
空の場合は手動で設定します。ホームディレクトリの .bash_profile をエディタで編集します(ここでは nano を例示)。
nano ~/.bash_profile
ファイル末尾に次の行を追加します(パスはインストールした JDK に合わせて変更してください)。
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
設定を反映します。
source ~/.bash_profile
もう一度確認します。
[root@liptan-pc ~]# echo $JAVA_HOME
/usr/java/jdk1.8.0_131/
重要: システムに既に OpenJDK がインストールされている場合、Cassandra は OpenJDK でも動作しますが、運用ポリシーに合わせて Java 実装を選択してください。
ステップ 2 — Cassandra のインストール
Apache Cassandra の公式リポジトリを追加します。リポジトリファイルを作成します。
nano /etc/yum.repos.d/cassandra.repo
以下の内容をファイルに追加します。
[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS
リポジトリを追加したら Cassandra をインストールします。
yum -y install cassandra
インストール後、systemd デーモンを再読込し、Cassandra を起動します。
systemctl daemon-reload
systemctl start cassandra
ブート時に自動起動するように有効化します。
systemctl enable cassandra
ノードのステータスを確認します。
nodetool status
Cassandra が稼働していれば次に示すような出力が得られます(例)。
[root@ip-172-31-7-136 ~]# 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 136.29 KiB 256 100.0% b3d26649-9e10-4bee-9b3c-8e81c4394b2e rack1
起動できない場合の基本的なトラブルシューティング
nodetool 実行時に次のようなエラーが出る場合があります。
nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.
この場合、JMX のホスト名設定が原因であることが多いです。設定ファイルを編集します。
nano /etc/cassandra/default.conf/cassandra-env.sh
ファイル内で次の行を探します。
# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname="
コメントを外して
JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"
保存して終了後、Cassandra を再起動します。
systemctl restart cassandra
再度 nodetool status を実行して確認してください。
cqlsh を使った接続確認
Cassandra には CQL を実行する対話型シェル cqlsh が付属します。
cqlsh
接続に成功すると次のような表示になります。
[root@liptan-pc ~]# cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
追加の運用メモとセキュリティ
- デフォルトのポート: CQL ネイティブポート 9042、JMX 7199、内部通信 7000/7001。ファイアウォール設定を必要に応じて調整してください。
- SELinux が有効な環境ではアクセス制御により動作しない場合があります。まずはログ(/var/log/messages や systemd ジャーナル)を確認してください。
- 本番環境ではノード間通信要求に応じたネットワーク設計、スナップショットやバックアップ方針を定めてください。
役割別チェックリスト
システム管理者
- Java(JDK)をインストールして環境変数を設定する
- Cassandra をインストールし、systemd ユニットを有効化する
- ファイアウォールと SELinux の設定を確認する
データベース管理者
- nodetool でノード状態とトークン分布を確認する
- 定期スナップショットとバックアップの運用を設計する
- クラスタトポロジー(データセンター、ラック)を計画する
アプリケーション開発者
- CQL でスキーマ設計(パーティションキー/クラスタリングキー)を学ぶ
- cqlsh で基本クエリ(SELECT/INSERT/UPDATE/DELETE)を実行して検証する
トラブルシュートの意思決定フロー
flowchart TD
A[サービスが起動しない] --> B{systemctl status cassandra}
B -->|inactive/failed| C[ジャーナル確認: journalctl -u cassandra]
C --> D{ログにエラーあり}
D -->|JMX 接続拒否| E[編集: /etc/cassandra/default.conf/cassandra-env.sh に JVM_OPTS を設定]
D -->|ポート/権限問題| F[ファイアウォールと SELinux を確認]
B -->|running| G[nodetool status 実行]
G -->|接続拒否| E
G -->|正常| H[cqlsh でクエリ実行]
事実ボックス(キー情報)
- 対象 Cassandra 系列: 3.11 系(リポジトリ名に基づく)
- Java 要件: Java 8 以上(本手順では JDK 1.8.0_131 を使用した例)
- 主要ポート: 9042 (CQL), 7199 (JMX), 7000/7001 (ノード間)
よくある失敗例と代替アプローチ
- 失敗例: nodetool が 127.0.0.1:7199 に接続できない → cassandra-env.sh の JMX ホスト設定を修正で解決することが多い。
- 代替: Oracle JDK の代わりに OpenJDK を使う(ほとんどの環境で互換性あり)。
- スケールアップが必要な場合: 単一ノードから複数ノードクラスタへ移行する際は、seed ノード設定、トークンの分配、ネットワークのレイテンシを考慮する。
受け入れ基準(Критерии приёмки)
- systemctl start cassandra がエラーなく完了すること。
- nodetool status でノードが UN(Up/Normal)として表示されること。
- cqlsh でクラスタに接続し簡単な SELECT/INSERT が実行できること。
まとめ
CentOS 7 上での Apache Cassandra インストールは、主に Java の準備、公式リポジトリの追加、パッケージインストール、サービス起動の順に進めます。JMX 関連の接続拒否は設定ファイル(cassandra-env.sh)の JVM_OPTS を見直すことで解決するケースが多いです。本番利用時はバックアップ、ネットワーク設計、運用監視を事前に設計してください。
要点
- Java を正しくインストールして JAVA_HOME を設定すること
- リポジトリを追加して yum で cassandra をインストールすること
- 起動後は nodetool と cqlsh で接続確認を行うこと
参考リンク
- Cassandra 公式配布 (リポジトリ参照): https://www.apache.org/dist/cassandra/