2013年2月19日火曜日

ElastiCacheのクラスタ情報を取得してみた(Auto Discovery)

スズキです。

ElastiCacheを作成すると、"Configuration Endpoint"というものが利用でき、
"Auto Discovery"で利用するElastiCacheのクラスタ情報を取得することができます。


情報は下記のように"config get cluster"で取得することができます。
# telnet test.xxxxxx.cfg.apne1.cache.amazonaws.com 11211
Trying xxx.xxx.xxx.xxx...
Connected to test.xxxxxx.cfg.apne1.cache.amazonaws.com.
Escape character is '^]'.
config get cluster
CONFIG cluster 0 191
2
test.xxxxxx.0001.apne1.cache.amazonaws.com|10.156.25.174|11211 test.xxxxxx.0002.apne1.cache.amazonaws.com|10.158.181.191|11211

END
quit
Connection closed by foreign host.

上記の情報からノードやポートの情報を切り出すシェルスクリプトを作ってみました。
#!/bin/sh
CONFIG_NODE=test.xxxxxx.cfg.apne1.cache.amazonaws.com
CONFIG_PORT=11211
LINE=`echo config get cluster | nc $CONFIG_NODE $CONFIG_PORT | head -3 | tail -1`
COUNT=`echo $LINE | tr -dc ' ' | wc -c`
COUNT=`expr $COUNT + 1`
for INDEX in `seq 1 $COUNT`; do
    NODE=`echo $LINE | cut -d ' ' -f $INDEX`
    HOST=`echo $NODE | cut -d '|' -f 1`
    PORT=`echo $NODE | cut -d '|' -f 3`
    echo $HOST $PORT
done
※下記でインストールした"netcat(nc)"を利用しています。
# yum -y install nc
...

実行すると下記のようにノード情報を切り出すことができます。
# ./test.sh 
test.xxxxxx.0001.apne1.cache.amazonaws.com 11211
test.xxxxxx.0002.apne1.cache.amazonaws.com 11211

ElastiCacheのノードを追加して、もう一回実行すると、ちゃんと増えています。
# ./test.sh 
test.xxxxxx.0001.apne1.cache.amazonaws.com 11211
test.xxxxxx.0002.apne1.cache.amazonaws.com 11211
test.xxxxxx.0003.apne1.cache.amazonaws.com 11211

シェルスクリプトは深い...
--------
http://www.suz-lab.com

0 コメント: