Ubuntu で EC2 〜 Apache Cassandra On AWS EC2 の事前準備として〜

  • ここを参考に AWS EC2 上で Apache Cassandra 1.0.5 を動かすために、前提として必要だったので以下にメモ。
  • ローカル ubuntu から ubuntu 公式 AMI をつかって EC2 でインスタンスを起動するところまで。
  • ここを見ればほぼすんなり行くはず。
ローカルの環境
  • ubuntu 11.10 (64bit)
  • $ java -version
    java version "1.6.0_23"
  • もちろん AWS のアカウントは事前に取っておく
EC2 API Tools をインストール
  • X.509 証明書を作っておいてローカルにダウンロードしておく。
    いつもどこから行くのか忘れる・・・
    このタブ
  • ec2-api-tools インストール
    $ sudo apt-get install ec2-api-tools
    
  • 環境変数
    • 東京リージョンを使うのでその指定と
    • さっき落とした X.509 証明書のパス
    $ vi ~/.bashrc
    
    export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com # <- これ Asia Pacific (Tokyo)
    export EC2_PRIVATE_KEY=/path/to/aws/pk/pk-pekepekepeke.pem # X.509 証明書の
    export EC2_CERT=/path/to/aws/cert/cert-pekepekepeke.pem # X.509 証明書の
    
    $ source ~/.bashrc
    
  • 適当に ec2-xxxx を叩いて動くか確認
    $ ec2-describe-images -o self -o amazon
    
Official Ubuntu Cloud Guest AMI でインスタンス起動
  • 普段使っている公開鍵をインポートしておく
  • $ ec2-import-keypair {KEY_NAME} --public-key-file ~/.ssh/id_rsa.pub
    
  • インスタンス走らせる(ここから好きなの選んで)
  • $ ec2-run-instances ami-7c90277d -g "default" --instance-type m1.large --region ap-northeast-1 --key {KEY_NAME}
    
  • describe して running になるのを待つ
  • $ ec2-describe-instances
    
  • 行ってみる(describe したときの Public DNS をコピっておいて)
  • $ ssh ubuntu@{PUBLIC_DNS}
    
  • とりあえず無事入れたらおっk。一旦、terminate しておく。
  • $ ec2-terminate-instances {INSTANCE}
    

Apache Cassandra On AWS EC2

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

■ 確認
  • SEED インスタンスにログイン
  • $ 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};
    

Apache Cassandra 1.0.5 インストール〜設定〜起動(シングルノード)

■ 環境
  • ubuntu 11.10
  • java version "1.6.0_23"(1.6の最低でもu19が必要でu21以上がベターらしい)
■ インストール
  • CASSANDRA_HOME作成
  • $ mkdir -p apache/cassandra
    $ cd apache/cassandra
    
    以下、このディレクトリで作業します
    $ pwd
    /home/ktakeda47/apache/cassandra
    
  • apache-cassandra-1.0.5-bin.tar.gzをダウンロード
  • $ wget http://www.meisei-u.ac.jp/mirror/apache/dist//cassandra/1.0.5/apache-cassandra-1.0.5-bin.tar.gz
    
  • 解凍
  • $ tar xvzf apache-cassandra-1.0.5-bin.tar.gz
    $ mv apache-cassandra-1.0.5/ 1.0.5
    
■ 設定
  • CASSANDRA_HOME/binにパスを通す
  • $ vi ~/.bashrc
    
    こんなかんじ
    export CASSANDRA_HOME=/home/ktakeda47/apache/cassandra/1.0.5
    export PATH=$PATH:$CASSANDRA_HOME/bin
    
    $ source ~/.bashrc
    
  • data_file_directories, commitlog_directory, saved_caches_directoryディレクトリ作成
  • $ mkdir data
    $ mkdir commitlog
    $ mkdir saved_caches
    
  • 設定ファイルのdata_file_directories, commitlog_directory, saved_caches_directoryをmkdirしたディレクトリへ
  • (それぞれ63行目、66行目、69行目付近)
    $ vi 1.0.5/conf/cassandra.yaml
    
  • ログディレクトリ作成
  • $ mkdir log
    
  • log4j.propertiesのログディレクトリをmkdirしたディレクトリへ
  • (35行目付近)
    $ vi 1.0.5/conf/log4j-server.properties
    
■ 起動
  • error, fatalが出なければ成功
  • $ cassandra -f
    
■ cassandra_cliからアクセス
  • 起動までつつがなく行っていれば、あとはcassandra-cliで遊べます
  • $ cassandra-cli