クラスタセットアップガイド

はじめに

Apolloクラスタのセットアップについて説明します.

前提

  • Apolloがインストール済みであること
  • Cassandraがインストール済みであること
    • このドキュメントではApollo Storageの実装としてCassandraを使用することを想定しています

想定するクラスタ構成

ApolloのAPIを実行するプロセス(以降ではApolloプロセスと呼びます)は,任意のノード上で稼働することが出来ます. ここでは説明を簡潔にするために,Apolloプロセスは,Cassandraクラスタを構成するいずれかのノード上で稼働するものとします. 以降では1ノードクラスタ複数ノードクラスタの各クラスタ構成のセットアップ方法について説明します.

1ノードクラスタのセットアップ

以下の構成例におけるセットアップ方法を説明します.
  • ノード0
    • IPアドレス: 10.0.0.10
    • 稼働プロセス: Apolloプロセス, Cassandraプロセス

Apolloの設定ファイルの編集

/etc/apollo/conf/storage.yamlを編集し,Apollo Storage APIを経由してアクセスするCassandraノードのIPアドレスを設定します.
endpoints:
    - 10.0.0.10

Cassandraクラスタの設定

Cassandraクラスタの設定手順はDataStaxのドキュメントに基づいています.

Seedノードの決定

1ノードのみなのでseedノードは10.0.0.10とします.

ファイアウォールの設定

以下のポートについてファイアウォールでブロックしないように設定します.
  • Cassandra inter-node ports
    • 7000
    • 7001
    • 7199
  • Cassandra client ports
    • 9042
    • 9160
Cassandraで使用される各ポートの詳細についてはDataStaxのドキュメントをご参照ください.

Cassandraの停止

もし既にCassandraが稼働している場合は一旦停止させます.
$ sudo service cassandra stop

cassandra.yamlの設定

/etc/cassandra/conf/cassandra.yamlを設定します. 設定例(抜粋)
cluster_name: 'Test Cluster' // default
num_tokens: 256 // default
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
         - seeds: "10.0.0.10"
listen_address: 10.0.0.10
rpc_address: 10.0.0.10
endpoint_snitch: GossipingPropertyFileSnitch
commitlog_sync: batch
commitlog_sync_batch_window_in_ms: 2
cassandra.yamlの詳細についてはDataStaxのドキュメント等をご参照ください.

Cassandraの起動

Cassandraプロセスを起動します.
$ sudo service cassandra start

クラスタ構成の確認

最後にクラスタが正しく構成されていることを確認します.
$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.0.10   18.61 MB   256          100.0%            dea11add-1692-44a3-97bc-68f70f2785f9  rack1

複数ノードクラスタのセットアップ

以下の構成例におけるセットアップ方法を説明します.
  • ノード0
    • IPアドレス: 10.0.0.10 (Seed)
    • 稼働プロセス: Apolloプロセス, Cassandraプロセス
  • ノード1
    • IPアドレス: 10.0.0.20
    • 稼働プロセス: Apolloプロセス, Cassandraプロセス
  • ノード2
    • IPアドレス: 10.0.0.30
    • 稼働プロセス: Apolloプロセス, Cassandraプロセス

Apolloの設定ファイルの編集

各ノードにおいて/etc/apollo/conf/storage.yamlを編集し,Apollo Storage APIを経由してアクセスするCassandraノードのIPアドレスを設定します. 以下の例では3ノードへラウンドロビンでアクセスするように設定しています.
endpoints:
    - 10.0.1.10
    - 10.0.1.20
    - 10.0.1.30

Cassandraクラスタの設定

Cassandraクラスタの設定手順はDataStaxのドキュメントに基づいています.

Seedノードの決定

seedノードを決めます(全てのノードをseedノードにしてはいけません). ここではIPアドレスが10.0.0.10のノードをseedノードとします.
node0: 10.0.0.10 (seed)
node1: 10.0.0.20
node2: 10.0.0.30

ファイアウォールの設定

各ノードにおいて,ファイアウォールで以下のポートをブロックしないように設定します.
  • Cassandra inter-node ports
    • 7000
    • 7001
    • 7199
  • Cassandra client ports
    • 9042
    • 9160
Cassandraで使用される各ポートの詳細についてはDataStaxのドキュメントをご参照ください.

Cassandraの停止

各ノードにおいて,Cassandraが稼働している場合は一旦停止させます.
$ sudo service cassandra stop

cassandra.yamlの設定

各ノードにおいて/etc/cassandra/conf/cassandra.yamlを設定します. 設定例(抜粋)
cluster_name: 'Test Cluster' // default
num_tokens: 256 // default
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
         - seeds: "10.0.0.10"
listen_address: <各ノード自身のIPアドレス> # i.e. 10.0.0.10
rpc_address: <各ノード自身のIPアドレス> # i.e. 10.0.0.10
endpoint_snitch: GossipingPropertyFileSnitch
commitlog_sync: batch
commitlog_sync_batch_window_in_ms: 2
cassandra.yamlの詳細についてはDataStaxのドキュメント等をご参照ください.

Cassandraの起動

各ノードにおいてCassandraプロセスを起動します.
$ sudo service cassandra start

クラスタ構成の確認

いずれかのノードにおいて以下のコマンドを実行し,クラスタが正しく構成されていることを確認します.
$ nodetool status
Datacenter: datacenter1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.0.10  103.26 KB  256          100.0%            8cb0b05d-f55d-4792-8512-cdbabeabe0b1  rack1
UN  10.0.0.20  101.91 KB  256          100.0%            5775d3d3-e4be-4e80-9113-85920426ca98  rack1
UN  10.0.0.30  102.11 KB  256          100.0%            8fb8b86d-67fa-4de7-b9e6-13fd04b6ab92  rack1
Share on FacebookTweet about this on TwitterShare on LinkedInEmail to someone