Ubuntu14.04でCassandraを使用してマルチノードクラスターデータベースを実行する方法
序章
Apache Cassandra は、拡張性の高いオープンソースデータベースシステムであり、マルチノードセットアップで優れたパフォーマンスを実現します。
以前、シングルノードのCassandraクラスターを実行する方法について説明しました。 このチュートリアルでは、Cassandraをインストールして使用し、Ubuntu14.04でマルチノードクラスターを実行する方法を学習します。
前提条件
マルチノードのCassandraクラスターを構築しようとしているため、クラスターに含めるサーバーの数を決定し、各サーバーを構成する必要があります。 仕様が同じまたは類似していることをお勧めしますが、必須ではありません。
このチュートリアルを完了するには、次のものが必要です。
-
この初期セットアップガイドを使用して構成された少なくとも2台のUbuntu14.04サーバー。
-
各サーバーは、このIPTablesガイドを使用してファイアウォールで保護する必要があります。
-
各サーバーには、このCassandraインストールガイドに従ってCassandraをインストールする必要があります。
ステップ1—デフォルトデータの削除
Cassandraクラスター内のサーバーは、ノードと呼ばれます。 現在、各サーバーにあるのは、単一ノードのCassandraクラスターです。 このステップでは、マルチノードのCassandraクラスターとして機能するようにノードを設定します。
このステップと後続のステップのすべてのコマンドは、クラスター内の各ノードで繰り返す必要があるため、クラスター内のノードと同じ数の端末を開いていることを確認してください。
各ノードで実行する最初のコマンドは、Cassandraデーモンを停止します。
- sudo service cassandra stop
それが完了したら、デフォルトのデータセットを削除します。
- 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
またはお好みのテキストエディタを使用して編集するために設定ファイルを開きます。
- sudo nano /etc/cassandra/cassandra.yaml
ファイルで次のディレクティブを検索し、クラスターに一致するように以下のように変更します。 your_server_ip
を現在作業しているサーバーのIPアドレスに置き換えます。 - seeds:
リストはすべてのサーバーで同じである必要があり、コンマで区切られた各サーバーのIPアドレスが含まれます。
. . .
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
ディレクティブを追加します。
auto_bootstrap: false
ファイルの変更が終了したら、保存して閉じます。 クラスタに含めるすべてのサーバーに対してこの手順を繰り返します。
ステップ3—ファイアウォールの構成
この時点で、クラスターは構成されていますが、ノードは通信していません。 このステップでは、Cassandraトラフィックを許可するようにファイアウォールを構成します。
まず、それぞれでCassandraデーモンを再起動します。
- sudo service cassandra start
クラスタのステータスを確認すると、他のノードとまだ通信できないため、ローカルノードのみが表示されていることがわかります。
- 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のルールファイルを開きます。
- 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.111
と222.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を再起動します。
- sudo service iptables-persistent restart
ステップ4—クラスターのステータスを確認する
これで、ノードをマルチノードクラスターにするために必要なすべての手順が完了しました。 ステータスを確認することで、すべてが通信していることを確認できます。
- 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アドレスを指定できることに注意してください。
- 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ターミナルを終了できます。
- exit
結論
おめでとう! これで、Ubuntu14.04で実行されているマルチノードのCassandraクラスターができました。 Cassandraの詳細については、プロジェクトのWebサイトを参照してください。 クラスタのトラブルシューティングが必要な場合、手がかりを探す最初の場所は、/var/log/cassandra
ディレクトリにあるログファイルです。