Apache Cassandra クラスタ環境を AWS EC2 上で
- 公式の wiki を参考に EC2 上でクラスタ環境を構築してみた。
- シングルノードを複数作るのとあまり変わらなかった。
- ローカルの ubuntu から EC2 を弄るための事前準備はこっちに。
※Step.Nは
公式の wiki にだいたい対応。
■ Step.1 EC2 セキュリティ・グループ「Talk To Cassandra Local Zone」の作成
$ ec2-create-group "Talk To Cassandra Local Zone" -d "Group for any machine that talks to Cassandra"
$ ec2-authorize "Talk To Cassandra Local Zone" -P tcp -p 22 -s 0.0.0.0/0
■ Step.2 あとで必要なので「Talk To Cassandra Local Zone」の {OwnerID} をメモっておく
$ ec2-describe-group "Talk To Cassandra Local Zone"
※12ケタぐらいの数字のやつ
■ Step.3 EC2 セキュリティ・グループ「Cassandra Nodes」の作成
$ ec2-create-group "Cassandra Nodes" -d "Group for any Cassandra machine"
$ ec2-authorize "Cassandra Nodes" -P tcp -p 22 -s 0.0.0.0/0
■ Step.4 あとで必要なので「Cassandra Nodes」の {OwnerID} をメモっておく
$ ec2-describe-group "Cassandra Nodes"
※12ケタぐらいの数字のやつ
■ Step.5 「Cassandra Nodes」間で以下の各ポートに接続可能なように開けておく
$ ec2-authorize "Cassandra Nodes" -P tcp -p 7000 -o "Cassandra Nodes" -u {OwnerID}
$ ec2-authorize "Cassandra Nodes" -P tcp -p 9160 -o "Cassandra Nodes" -u {OwnerID}
$ ec2-authorize "Cassandra Nodes" -P tcp -p 8080 -o "Cassandra Nodes" -u {OwnerID}
※ {OwnerID} は「Talk To Cassandra Local Zone」のほう
■ Step.6 「Talk To Cassandra Local Zone」も同様に以下の各ポートを開けておく
$ ec2-authorize "Cassandra Nodes" -P tcp -p 9160 -o "Talk To Cassandra Local Zone" -u {OwnerID}
$ ec2-authorize "Cassandra Nodes" -P tcp -p 8080 -o "Talk To Cassandra Local Zone" -u {OwnerID}
※ {OwnerID} は「Talk To Cassandra Local Zone」のほう
■ Step.7 キーペアを作成する
■ Step.8 〜 Step.10 SEED インスタンスを起動する
$ ec2-run-instances ami-7c90277d -g "Cassandra Nodes" --instance-type m1.large --region ap-northeast-1 --key {KEYPAIR_NAME}
※{KEYPAIR_NAME} は Step.7 で作ったもの
※「ami-7c90277d」という AMI は
ubuntu 公式のもの。
■ Step.11 describe してパブリック DNS (={SEED_PUBLIC_DNS})とプライベート IP (={SEED_PRIVATE_IP})をコピっておく
$ ec2-describe-instances
■ Step.12 SEED になる Cassandra をセットアップ
$ ssh ubuntu@{SEED_PUBLIC_DNS}
JDK のインストール
$ sudo apt-get update
$ sudo apt-get install openjdk-6-jdk
$ java -version
java version "1.6.0_23"
シングルノードのセットアップを完了する
SEED の Cassandra の設定
$ vi 1.0.5/conf/cassandra.yaml
以下のとおり編集する
- initial_token: 0
- seeds: "{SEED_PRIVATE_IP}"
- listen_address: {SEED_PRIVATE_IP}
- rpc_address: 0.0.0.0
- endpoint_snitch: org.apache.cassandra.locator.RackInferringSnitch
■ Step.13 NON SEED インスタンスを起動する
$ ec2-run-instances ami-7c90277d -g "Cassandra Nodes" --instance-type m1.large --region ap-northeast-1 --key {KEYPAIR_NAME}
describe してパブリック DNS (={NON_SEED_PUBLIC_DNS})とプライベートな IP (={NON_SEED_PRIVATE_IP})をコピっておく
$ ec2-describe-instances
■ Step.14 NON SEED の Cassandra をセットアップ
$ ssh ubuntu@{NON_SEED_PUBLIC_DNS}
JDK のインストール
$ sudo apt-get update
$ sudo apt-get install openjdk-6-jdk
$ java -version
java version "1.6.0_23"
シングルノードのセットアップを完了する
NON SEED の Cassandra の設定
$ vi 1.0.5/conf/cassandra.yaml
以下のとおり編集する
- initial_token: 12345678901234567890123456789012345678
- seeds: "{SEED_PRIVATE_IP}"
- listen_address: {NON_SEED_PRIVATE_IP}
- rpc_address: 0.0.0.0
- endpoint_snitch: org.apache.cassandra.locator.RackInferringSnitch
■ 確認
$ ssh ubuntu@{SEED_PUBLIC_DNS}
nodetool で確認する
$ nodetool -h localhost ring
Address DC Rack Status State Load Owns Token
12345678901234567890123456789012345678
{SEED_PRIVATE_IP} *** *** Up Normal 13.41 KB 92.74% 0
{NON_SEED_PRIVATE_IP} *** *** Up Normal 6.68 KB 7.26% 12345678901234567890123456789012345678
ここまでつつがなく行っていれば、あとはcassandra-cliで遊べます。(が、keyspaceを作成する際は以下のようにしないとデータを追加する際にエラーになりました。)
[default@unknown] create keyspace awstest1 with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy'
... and strategy_options = {replication_factor:2};