アットウェアの福社長 北野です。
さて、Couchbaseのクラスタが作れたところで、次はCouchbaseを使ってデータを出し入れしてみます。
Couchbaseは、汎用分散型メモリキャッシュシステムであるmemcached互換でもあります。ですので、memcachedのI/Fでのアクセスもできます。
ここでは、memcachedのI/Fを使って、Couchbaseを操作してみたいと思います。
Couchbaseへの接続
memcachedはTCP11211番ポートを利用します。
そこで、Couchbaseのサーバへの11211へアクセスしてみます。
$ telnet <Couchbase ServerのIPアドレス> 11211
今回は、Couchbaseのインストールされているサーバから接続してみます。
ので、localhostの11211ポートにtelnetを使って接続してみます。
[root@ip-10-150-159-183 ~]# telnet localhost 11211 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'.
はいこれで接続できました。
Couchbaseへデータを入れよう
接続は以上で終わりですが、続いて実際のデータを入れてみましょう。memcachedでのデータ格納するコマンドはsetを使います。
set <key名> <flags> <データの有効期間(秒)> <データのサイズ> <value値>
例えば、「japan」というキーに「tokyo」という5バイトのデータを無期限で入れる場合は、
set japan 0 0 5 tokyo STORED
STOREDが出れば、データの書き込みが成功したということです。
Couchbaseのデータを読み込もう
さて、データを格納できたので、ちゃんとデータが格納できたか確認してみましょう。
Memcachedでのデータ読み込むコマンドはgetを使います。
get <key名>
先ほどの「japan」というキーに設定した値を読み込んでみます。
get japan VALUE japan 0 5 tokyo END
ちゃんと正常に読み込めました。
ちなみに、存在しないキーを読み込んでみましょう。
get aheahe END
VALUEが返ってきません。正常です。
データの有効期限を試してみよう
さて、書き込む際にデータの有効期限を設定することもできます。例えば10秒に設定してみます。
set france 0 10 5 paris STORED
すぐにgetしてみましょう。
get france VALUE france 0 5 paris END
ちゃんと読み書きが出来ました。10秒以内なので当然です。
しばらく待ってみて、もう一度試してみます。
get france END
はい、データが無くなっています。10秒の有効期限がちゃんと効いていますね。
クラスタリングの機能を確認
さて、今は3台のCouchbase Serverのクラスタ構成が組まれています。今は、ip-10-150-159-183というサーバへtelnetして読み書きしていました。他の2台のサーバへtelnetして先ほどのデータの読み込みができるかどうか確認してみましょう。
2台目:10.150.130.232 サーバに接続し、key名=japanの値をgetします。
# telnet 10.150.130.232 11211 Trying 10.150.130.232... Connected to ip-10-150-130-232.ap-northeast-1.compute.internal (10.150.130.232). Escape character is '^]'. get japan VALUE japan 0 5 tokyo END
正常に読み込めました。同じそうさを3台目でも行い、同様にkey名=japanの値が読み込めました。
これによって、データ層が分散されていることがわかります。
つまり、どのサーバにアクセスしても同じ値が返ってくるということです。クライアント(データを欲すもの)は、クラスタが組まれているサーバのどのサーバにアクセスしても良いのです。これによって、アクセスが分散され性能劣化を低く抑えられることができます。
フェイルオーバー
さて、続いて一台サーバを切ってみましょう。今回のサーバの一台のCouchbase Serverを強制的に止めてみます。
# /etc/init.d/couchbase-server stop Stopping couchbase-server [ OK ]
はい、CouchbaseServerの管理画面を確認してみましょう。
左メニューMANAGE→ServerNodeをクリックします。一台のサーバがグレイアウトになり、サーバダウンしていることがわかります。
さて、この状態で、生きているサーバに先ほどのjapanの値を引いてみましょう。
get japan VALUE japan 0 5 tokyo END
ちゃんとデータが返ってきました。さて、Couchbaseを落としたサーバを切り離します。該当サーバのFailOverを実行することで、このサーバをクラスタから切り離します。
切り離した状態でもデータjapanを読み込みましょう。
get japan VALUE japan 0 5 tokyo END
はい、ちゃんと読めました。FailOverしただけではデータの分散の偏りがまだ修正されていないので、Rebalanceを実行し、データの分散度を整えることをお勧めします。以下、Rebalance後2台に等分分散された状態。
さて、ここで、もう一台落としてみましょう。そう1台だけにしてみます。
同じく/etc/init.d/couchbase-serverのstopを実行して落とします。最後の一台の生き残りにtelnetし、japanを引いてみます。
get japan VALUE japan 0 5 tokyo END
ちゃんとデータが引けました。ちゃんとデータの分散読み込み、クラスタ内でのデータの保全性が確認できました。Couchbaseは可用性にもすぐれたNoSQLデータベースということが言えます。
今回は、memcachedのI/Fを、コマンドを一つ一つ実行しながら確認してみました。memcachedのコマンドはいろんなところで公開されていますので、試してみるのも良いでしょう。
参考)http://l-w-i.net/t/memcached/command_001.txt
今回のおさらい
さて、今回の内容からCouchbaseの特長をまとめてみたいと思います。
・ Simple
memcachedのI/F互換。非常にシンプルで分かり易い。
参考)http://l-w-i.net/t/memcached/command_001.txt
・ Fast
プログラムスピードでの読み書きをしたわけではないが、RAMの読み書きなので速そう
・ Elastic
サーバがクラスタの許す限り落ちてもデータの保全ができている
さぁーて、次回は
そうですね。クライアントプログラムをAPIを利用して書いて、いろいろ試してみたいと思います。
デモもします
お声掛けして頂ければ、Couchbase Serverの製品説明/デモンストレーションを行います。お気軽にお問い合わせください。




