Apache Cassandraへの外部接続を許可する方法

Apache Cassandaへの外部接続を許可する方法 サーバー

「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の外部接続許可を説明しました。

タイトルとURLをコピーしました