ラベル elasticache の投稿を表示しています。 すべての投稿を表示
ラベル elasticache の投稿を表示しています。 すべての投稿を表示

2013年3月26日火曜日

Elasticacheってなんじゃ?(memcache-topってなんじゃ?)

別にElasticache関係なく、memcacheの話題です。

memcacheをレプリケートしたり、クラスタ的に分散して使用していると、どのノードにどれだけキャッシュされているかわかりづらく、WEB UIで確認するほどの内容でもないので、簡単な状態チェックツールがあると便利です。

そこでmoongiftさんでも紹介されていたmemcache-topを使ってみました。


インストール


下のページのダウンロードリンクをコピーします。




コピーしたURLを、memcacheノードのあるセグメント内のホストでPATHの通った場所にダウンロードします。
ダウンロードされるのはバイナリ実行ファイルなので、実行権限を与えます。
# cd /usr/local/bin
# curl -OL https://memcache-top.googlecode.com/files/memcache-top-v0.6
# chmod 755 memcache-top-v0.6
# ln -s memcache-top-v0.6 memcache-top

実行時に
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .)
となる場合は、以下のようにライブラリをインストールします。
# yum install -y perl-Time-HiRes

実行


実行は、おもに以下のオプションを使用します。

  • --instances:memcacheノードのIPまたはホスト名をカンマ区切り、もしくは複数オプション
  • --port:ポート番号(デフォルト11211)
  • --sleep:モニタ間隔(デフォルト3秒)

他にもいくつかありますが、よくつかうのは上記3つです。

それでは以下のように実行します。
$ memcache-top --instances 10.32.11.171,10.32.11.172 --port 11210

memcache-top v0.6 (default port: 11210, color: on, refresh: 3 seconds)

INSTANCE  USAGE HIT % CONN TIME EVICT/s READ/s WRITE/s
10.32.11.171:11210 1.5% 93.8% 5 1.0ms 0.0 210 390
10.32.11.172:11210 1.5% 0.0% 5 0.8ms 0.0 221 11.3K

AVERAGE:  1.5% 46.9% 5 0.9ms 0.0 215 5967

TOTAL:  1.9MB/ 0.1GB  10 1.8ms 0.0 431 11.7K
(ctrl-c to quit.)


Elasticacheでも同じように結果の取得ができます。
./memcache-top-v0.6 --instances memorycraft.5horbl.0001.apne1.cache.amazonaws.com,memorycraft.5horbl.0002.apne1.cache.amazonaws.com,memorycraft.5horbl.0003.apne1.cache.amazonaws.com

memcache-top v0.6 (default port: 11211, color: on, refresh: 3 seconds)

INSTANCE  USAGE HIT % CONN TIME EVICT/s READ/s WRITE/s
memorycraft.5horbl.0001 0.0% 0.0% 5 2.0ms 0.0 2 367
memorycraft.5horbl.0002 0.0% 0.0% 5 1.8ms 0.0 2 367
memorycraft.5horbl.0003 0.0% 0.0% 5 1.8ms 0.0 2 367

AVERAGE:  0.0% 0.0% 5 1.9ms 0.0 2 367

TOTAL:  244B/ 3.5GB  15 5.6ms 0.0 6 1101
(ctrl-c to quit.)


簡単な状態のモニタリングをするにはとても便利です。
以上です。

2011年8月23日火曜日

Amazon ElastiCacheってなんじゃ?

Amazon ElastiCacheというあたらしいサービスがbeta公開されました。
これはいわゆるAmazonが提供するmemcacheサーバーで、サーバークラスタとして動作し、EC2のネットワーク上からアクセスが可能です。

今回は、簡単にElastiCacheを試してみます。

まず、ElastiCacheのページにアクセスし、右ペインにある"Sign Up Now"のボタンからElastiCacheの利用登録をします。




すると、AWSのコンソールで"ElastiCache"のタブが追加されるので、選択します。
左ペインを見ると、このサービスがまだUS-Eastでしか提供されていないことがわかります。
また、メニューツリーに、いくつか機能がならんでいるのがわかります。



まず、その中から"Cache Security Groups"を選択して、"Create Cache Security Groups"ボタンを押して、"Cache Security Group Name"を入力して登録します。
ここでは
  • Cache Security Group Name:myfirst-cache-sg
としました。



Cache Security GroupはEC2ネットワーク内からのキャッシュクラスタに対するアクセス許可をコントロールします。EC2のセキュリティグループはEC2ネットワーク外部からのアクセスに対して権限をあたえますが、ElastiCacheのキャッシュセキュリティグループは指定されたEC2のセキュリティグループに対してアクセスの権限を与えます。

新規に作成された"myfirst-cache-sg"を選択すると、下部ペインにそのキャッシュセキュリティグループ の情報が表示され、EC2のセキュリティグループに対してアクセス許可を与えることができます。


"EC2 Security Group to Link"に、EC2セキュリティグループ名、AWS Account Idには自分のアカウントIDをハイフンなしの12桁で入力します。
ここでは、あらかじめ同じus-eastで作成したEC2インスタンスが属するmyfirst-use-sgというセキュリティグループがあるので、以下のように入力しました。(AWS Account Idは伏せてあります。)
  • EC2 Security Group to Link:myfirst-use-sg
  • AWS Account Id:xxxxxxxxxxxx



次に左ペインで"Cache Cluster"を選択して、"Launch Cache Cluster"ボタンを押すと以下のような設定ウィンドウが表示されるので、ここにキャッシュクラスタの設定を入力していきます。
ここでは、Nameにクラスタ名、Node Typeにノードのキャッシュのメモリサイズ、Number of Nodesにクラスタのノード数を入力、preferrd Zoneで設置するゾーンを選択します。
ここでは、
  • Name :myfirst-cache
  • Node Type:cache.m1.small(1.3GB memory)
  • Number of Nodes:2
  • Preferred Zone:us-east-1a
で設定しました。


"Continue"ボタンを押すと、追加設定画面が表示されます。
ここで、先ほど作成したキャッシュセキュリティグループを選択します。また、"Cache Parameter Group"ではキャッシュエンジンの設定値をカスタムする場合、クラスタ上のすべてのキャッシュノードに対して共通で適用することができます。"Maintenance Window"は、もしAmazonがElastiCacheに対してバージョンアップやバッチなどの適用を行う場合に、そのタイミングを指定することができます。ここでたとえば火曜の夜中ならメンテナンスを行ってもよいという場合は、そのように設定できます。

ここでは、 キャッシュセキュリティグループの指定のみで、他の2項目はデフォルトのままで設定しました。


"Continue"を押し、確認画面で登録ボタンを押して完了すると、このようにクラスタが登録されているのがわかります。


また、クラスタ名をクリックすると、クラスタの詳細とノードの一覧を確認することが出来ます。



nodeタブのノード一覧では、各ノードのホスト名とポート番号が表示されており、ElastiCacheを使用するときはこのエンドポイントに対してアクセスすることになります。
また、それぞれのノードを選択すると、下部にそのノードのCloudWatchの各メトリクスへのリンク集が表示されます。


これで、ElastiCacheが立ち上がり、使用することが出来るようになりました。

それでは、実際にプログラムからアクセスしてみます。
us-east-1aにあるEC2インスタンスにログインします。
ここではキャッシュアクセスするプログラムはRubyを利用することにしますが、ElastiCacheはAPI経由ではなく、memcacheプロトコルでアクセスするため、いつものようにAWS Access Keyなどの認証は必要ありません。そのかわりとしてElastiCacheのCache Securithi GroupがEC2のSecurity Groupに対してアクセス許可をしているようです。

rubyはインストールしてあることが前提で、さらにmemcacheクライアントライブラリをインストールします。ここではmemcachedを利用しますが、別のクライアントライブラリでもかまいません。

# gem install memcached
Building native extensions.  This could take a while...
Successfully installed memcached-1.3
1 gem installed
Installing ri documentation for memcached-1.3...
Installing RDoc documentation for memcached-1.3...

ここでは簡易的にirbを使用してアクセスします。
ここで指定するホスト名は、ノード一覧に記載されていたendpointとportを指定します。
# irb
irb(main):001:0> require 'memcached'
=> true
irb(main):002:0> $cache = Memcached.new(["myfirst-cahce.umk9bw.0001.use1.cache.amazonaws.com:11211", "myfirst-cahce.umk9bw.0002.use1.cache.amazonaws.com:11211"])
=> (長いので割愛)
irb(main):003:0> value = 'hello'
=> "hello"
irb(main):004:0> $cache.set 'test-key', 'hello'                  
=> nil
irb(main):005:0> $cache.get 'test-key'    
=> "hello"
irb(main):006:0> 

ちゃんとsetとgetができていることが確認できました。
これで、memcacheのためだけにインスタンスやAMIを用意する必要がなくなるかもしれませんね。

今日はここまで。