2011年7月24日日曜日

Rackspace:Cloud Load BalancersをRubyからさわってみる

こんばんわ。
本日からアナログ放送が終了して、家でテレビが見れなくなってしまいました。
しかし、珍しく一ヶ月以内に更新が出来きたので今日は気分が良いです。

前回のブログでは珍しくAWSでしたが、今回は再びRackspaceネタ。
以前書いた、Cloud Load BalancersではCloud Serversと同様にPythonとRubyのインターフェースが提供されています。
Cloud Serversの時と同様にREADMEを参考に少しだけ使ってみました。
※ほとんどまんまですw

インストールはgemのソースとしてGithubが登録されていればとても簡単です。
$ sudo gem sources -a http://gems.github.com
$ sudo gem install cloudlb
Fetching: typhoeus-0.2.4.gem (100%)
Building native extensions.  This could take a while...
Fetching: cloudlb-0.0.1.gem (100%)
Successfully installed typhoeus-0.2.4
Successfully installed cloudlb-0.0.1
2 gems installed
Installing ri documentation for typhoeus-0.2.4...
Installing ri documentation for cloudlb-0.0.1...
Installing RDoc documentation for typhoeus-0.2.4...
Installing RDoc documentation for cloudlb-0.0.1...

動作確認した環境はMac OS X (not Lion)にインストールされたRuby 1.8.7です。
irbを使用して作業は行い、テスト用に起動したサーバのIPアドレスは以下の通りです。
  • 50.57.116.195
  • 50.57.116.80
さて、それでは確認してみます。
$ irb
# cloudlbを読み込みます
> require 'rubygems'
> require 'cloudlb'

# Rackspaceへの認証とリージョンの選択をします
> lb = CloudLB::Connection.new(:username => "okochang", :api_key => "*****************", :region => :ord)

# LBに追加するWebサーバ用にハッシュの配列を作成します
> node01 = [{ :address => "50.57.116.195", :port => "80", :condition => "ENABLED" }]

# LBを作成して先ほど作成したノードを作ります
> newlb = lb.create_load_balancer( :name => "newlb", :protocol => "HTTP", :nodes => node01, :algoristhm => "LEAST_CONNECTIONS", :virtual_ip_type => "PUBLIC" )

# LBのリストを参照して確認を行います(きちんとIPv6用のアドレスも割り当てられてるのも分かります)
> lb.list_load_balancers
=> [{:status=>"ACTIVE", :created=>{:time=>"2011-07-24T12:47:23Z"}, :port=>80, :virtualIps=>[{:type=>"PUBLIC", :address=>"184.106.100.221", :ipVersion=>"IPV4", :id=>168}, {:type=>"PUBLIC", :address=>"2001:4801:7901:0000:d4dc:6dbb:0000:0001", :ipVersion=>"IPV6", :id=>9000572}], :protocol=>"HTTP", :name=>"newlb", :id=>13924, :algorithm=>"RANDOM", :updated=>{:time=>"2011-07-24T12:48:12Z"}}]

# 先ほど出力されたIDを指定して、LBを選択します
> balancer = lb.get_load_balancer(13924)

# LBのバランシングアルゴリズムを変更します
> balancer.algorithm="ROUND_ROBIN"
=> "ROUND_ROBIN"

# 新しいWebサーバをLBのノードとして追加します
> node02 = balancer.create_node(:address => "50.57.116.80", :port => "80")

# テストが終わったのでLBを削除します
> balancer.destroy!
=> true
CloudServers同様に、API経由でもなかなか簡単に操作出来るのですね。
RackspaceのGithubのリポジトリを眺めていると、どうやら先日ベータリリースされたCloud DNSのPythonインターフェースは既に存在してるみたい。
Ruby版がリリースされるのが楽しみです。