「Apache Cassandraに別サーバーのプログラムから接続したい」
「Apache Cassandraに外部からのアクセスを許可させたい」
このような場合には、この記事の内容が参考になります。
この記事では、Apache Cassandraへの外部接続を許可する方法を解説しています。
本記事の内容
- Apache Cassandraはデフォルトでは外部接続できない
- 設定ファイル(cassandra.yaml)の変更
- ポート9042の開放
それでは、上記に沿って解説していきます。
Apache Cassandraはデフォルトでは外部接続できない
Apache Cassandraのインストールは、次の記事でまとめています。
デフォルトでは、Apache Cassandraはローカルホストからのアクセスしか許可していません。
そのため、外部からのアクセスを許可するように変更する必要があります。
その際、該当するポートを開けておく必要があります。
大きく分けると、次の作業が外部接続を許可するには必要となります。
- 設定ファイル(cassandra.yaml)の変更
- ポート9042の開放
作業をしていく前に、サーバーのIPアドレスを確認します。
もちろん、サーバーとはApache Cassandraをインストールしたサーバーです。
IPアドレスの調べ方は、次の記事で説明しています。
サーバーIPは、「192.168.33.108」でした。
このIPアドレスを設定ファイルの変更時に利用します。
下記でそれぞれの作業を説明していきます。
設定ファイル(cassandra.yaml)の変更
設定ファイルを変更する前のクラスタ状況は、以下。
$ 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 69.08 KiB 16 100.0% f13e6503-8606-413d-a20a-98f8bc780692 rack1
Address部分が「127.0.0.1」です。
これは、ローカルでしかApache Cassandraを認識できないことを表しています。
外部接続を許可するには、設定変更が必要です。
その作業を行います。
変更するファイルのパスは、次のパスとなります。
Ubuntuにaptでインストールしていればの話ですけどね。
/etc/cassandra/cassandra.yaml
このファイルの中の項目を全部で3か所を変更します。
以下の項目です。
- seeds
- listen_address
- rpc_address
複数台でクラスター構成を組む場合にも、これらの項目は関係してきます。
以下では、こららの項目部分の変更前と変更後をまとめて載せておきます。
修正前
seed_provider: # Addresses of hosts that are deemed contact points. # Cassandra nodes use this list of hosts to find each other and learn # the topology of the ring. You must change this if you are running # multiple nodes! - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: # seeds is actually a comma-delimited list of addresses. # Ex: "<ip1>,<ip2>,<ip3>" - seeds: "127.0.0.1:7000" ~ listen_address: localhost ~ rpc_address: localhost
修正後
seed_provider: # Addresses of hosts that are deemed contact points. # Cassandra nodes use this list of hosts to find each other and learn # the topology of the ring. You must change this if you are running # multiple nodes! - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: # seeds is actually a comma-delimited list of addresses. # Ex: "<ip1>,<ip2>,<ip3>" - seeds: "192.168.33.108" ~ listen_address: 192.168.33.108 ~ rpc_address: 192.168.33.108
すべてをサーバーのIPアドレスに置き換えました。
この変更を反映するために、Apache Cassandraを再起動します。
sudo systemctl restart cassandra
再起動後にクラスタの状況を確認してみましょう。
$ nodetool status Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 192.168.33.108 84.92 KiB 16 100.0% f13e6503-8606-413d-a20a-98f8bc780692 rack1
Address部分が変更されています。
以上、設定ファイル(cassandra.yaml)の変更を説明しました。
次は、ポート9042の開放を説明します。
ポート9042の開放
前提としてファイアウォールを利用しているとします。
ファイアウォールを利用していないなら、ここはスルーしても構いません。
設定ファイル(cassandra.yaml)に、次の項目が存在しています。
# For security reasons, you should not expose this port to the internet. Firewall it if needed. native_transport_port: 9042
この設定により、ポート9042でApache Cassandraに外部からアクセスすることになります。
変更する場合は、ここの値を変更します。
今回は、デフォルトのままポート9042を利用します。
この場合、ファイアウォールでポート9042を開放することになります。
$ sudo ufw allow 9042 ルールを追加しました ルールを追加しました (v6)
開放できているか確認。
$ sudo ufw status | grep '9042' 9042 ALLOW Anywhere 9042 (v6) ALLOW Anywhere (v6)
ポート9042が、開放されています。
以上、Apache Cassandraの外部接続許可を説明しました。