序章

Apache Cassandra は、拡張性の高いオープンソースデータベースシステムであり、マルチノードセットアップで優れたパフォーマンスを実現します。

以前、シングルノードのCassandraクラスターを実行する方法について説明しました。 このチュートリアルでは、Cassandraをインストールして使用し、Ubuntu14.04でマルチノードクラスターを実行する方法を学習します。

前提条件

マルチノードのCassandraクラスターを構築しようとしているため、クラスターに含めるサーバーの数を決定し、各サーバーを構成する必要があります。 仕様が同じまたは類似していることをお勧めしますが、必須ではありません。

このチュートリアルを完了するには、次のものが必要です。

ステップ1—デフォルトデータの削除

Cassandraクラスター内のサーバーは、ノードと呼ばれます。 現在、各サーバーにあるのは、単一ノードのCassandraクラスターです。 このステップでは、マルチノードのCassandraクラスターとして機能するようにノードを設定します。

このステップと後続のステップのすべてのコマンドは、クラスター内の各ノードで繰り返す必要があるため、クラスター内のノードと同じ数の端末を開いていることを確認してください。

各ノードで実行する最初のコマンドは、Cassandraデーモンを停止します。

  1. sudo service cassandra stop

それが完了したら、デフォルトのデータセットを削除します。

  1. sudo rm -rf /var/lib/cassandra/data/system/*

ステップ2—クラスターの構成

Cassandraの設定ファイルは/etc/cassandraディレクトリにあります。 その構成ファイルcassandra.yamlには多くのディレクティブが含まれており、非常によくコメントされています。 このステップでは、そのファイルを変更してクラスターをセットアップします。

マルチノードのCassandraクラスターをセットアップするには、次のディレクティブのみを変更する必要があります。

  • cluster_name:これはクラスターの名前です。

  • -seeds:これは、クラスター内の各ノードのIPアドレスのコンマ区切りのリストです。

  • listen_address:これは、クラスター内の他のノードがこのノードに接続するために使用するIPアドレスです。 デフォルトはlocalhostであり、ノードのIPアドレスに変更する必要があります。

  • rpc_address:これはリモートプロシージャコールのIPアドレスです。 デフォルトはlocalhostです。 サーバーのホスト名が適切に構成されている場合は、これをそのままにします。 それ以外の場合は、サーバーのIPアドレスまたはループバックアドレス(127.0.0.1)に変更します。

  • endpoint_snitch:スニッチの名前。これは、Cassandraにネットワークがどのように見えるかを伝えるものです。 これはデフォルトでSimpleSnitchに設定され、1つのデータセンターのネットワークに使用されます。 この例では、 GossipingPropertyFileSnitch に変更します。これは、本番環境のセットアップに適しています。

  • auto_bootstrap:このディレクティブは構成ファイルにないため、falseに追加して設定する必要があります。 これにより、新しいノードが適切なデータを自動的に使用するようになります。 既存のクラスターにノードを追加する場合はオプションですが、新しいクラスター、つまりデータのないクラスターを初期化する場合は必須です。

nanoまたはお好みのテキストエディタを使用して編集するために設定ファイルを開きます。

  1. sudo nano /etc/cassandra/cassandra.yaml

ファイルで次のディレクティブを検索し、クラスターに一致するように以下のように変更します。 your_server_ipを現在作業しているサーバーのIPアドレスに置き換えます。 - seeds:リストはすべてのサーバーで同じである必要があり、コンマで区切られた各サーバーのIPアドレスが含まれます。

/etc/cassandra/cassandra.yaml
. . .

cluster_name: 'CassandraDOCluster'

. . .

seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
         - seeds: "your_server_ip,your_server_ip_2,...your_server_ip_n"

. . .

listen_address: your_server_ip

. . .

rpc_address: your_server_ip

. . .

endpoint_snitch: GossipingPropertyFileSnitch

. . .

ファイルの最後に、次の行を貼り付けてauto_bootstrapディレクティブを追加します。

/etc/cassandra/cassandra.yaml
auto_bootstrap: false

ファイルの変更が終了したら、保存して閉じます。 クラスタに含めるすべてのサーバーに対してこの手順を繰り返します。

ステップ3—ファイアウォールの構成

この時点で、クラスターは構成されていますが、ノードは通信していません。 このステップでは、Cassandraトラフィックを許可するようにファイアウォールを構成します。

まず、それぞれでCassandraデーモンを再起動します。

  1. sudo service cassandra start

クラスタのステータスを確認すると、他のノードとまだ通信できないため、ローカルノードのみが表示されていることがわかります。

  1. sudo nodetool status
出力
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns    Host ID                               Rack
UN  192.168.1.4  147.48 KB  256          ?       f50799ee-8589-4eb8-a0c8-241cd254e424  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

通信を許可するには、ノードごとに次のネットワークポートを開く必要があります。

  • 7000、これはコマンドとデータのTCPポートです。

  • 9042、これはネイティブトランスポートサーバーのTCPポートです。 Cassandraコマンドラインユーティリティであるcqlshは、このポートを介してクラスターに接続します。

ファイアウォールルールを変更するには、IPv4のルールファイルを開きます。

  1. sudo nano /etc/iptables/rules.v4

INPUTチェーン内の次の行をコピーして貼り付けます。これにより、前述のポートでのトラフィックが許可されます。 ファイアウォールチュートリアルのrules.v4ファイルを使用している場合は、# Reject anything that's fallen through to this pointコメントの直前に次の行を挿入できます。

-sで指定されたIPアドレスは、クラスター内の別のノードのIPアドレスである必要があります。 IPアドレスが111.111.111.111222.222.222.222の2つのノードがある場合、111.111.111.111マシンのルールはIPアドレス222.222.222.222を使用する必要があります。

新しいファイアウォールルール
-A INPUT -p tcp -s your_other_server_ip -m multiport --dports 7000,9042 -m state --state NEW,ESTABLISHED -j ACCEPT

ルールを追加したら、ファイルを保存して閉じ、IPTablesを再起動します。

  1. sudo service iptables-persistent restart

ステップ4—クラスターのステータスを確認する

これで、ノードをマルチノードクラスターにするために必要なすべての手順が完了しました。 ステータスを確認することで、すべてが通信していることを確認できます。

  1. sudo nodetool status
出力
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns    Host ID                               Rack
UN  192.168.1.4  147.48 KB  256          ?       f50799ee-8589-4eb8-a0c8-241cd254e424  rack1
UN  192.168.1.6  139.04 KB  256          ?       54b16af1-ad0a-4288-b34e-cacab39caeec  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

構成したすべてのノードが表示されれば、マルチノードのCassandraクラスターが正常にセットアップされています。

また、Cassandraコマンドラインクライアントであるcqlshを使用してクラスターに接続できるかどうかを確認することもできます。 このコマンドでは、クラスター内の任意のノードのIPアドレスを指定できることに注意してください。

  1. cqlsh your_server_ip 9042

あなたはそれが接続するのを見るでしょう:

出力
Connected to My DO Cluster at 192.168.1.6:9042.
[cqlsh 5.0.1 | Cassandra 2.2.3 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>

次に、CQLターミナルを終了できます。

  1. exit

結論

おめでとう! これで、Ubuntu14.04で実行されているマルチノードのCassandraクラスターができました。 Cassandraの詳細については、プロジェクトのWebサイトを参照してください。 クラスタのトラブルシューティングが必要な場合、手がかりを探す最初の場所は、/var/log/cassandraディレクトリにあるログファイルです。