まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

Couchbase サーバーのデータをバックアップ&リストアする手順を紹介します。なお、以下で紹介する手順はバケットタイプが Couchbase のバケットに対してのみ可能な手順です。

まずバックアップを実行します。バックアップコマンドは /opt/couchbase/bin/cbbackup です:
# /opt/couchbase/bin/cbbackup http://couchbase.test.com:8091 /tmp/default_backup -u Administrator -p password -b default

上記例では couchbase.test.com という Couchbase サーバーのバケット default に対して、管理者名 Administrator 、管理者パスワード password でバックアップを実行し、その結果を /tmp/default_backup/ 以下に出力しています。

実行後、/tmp/default_backup/ 以下にはバックアップ結果のダンプファイルができています。ダンプファイルはクラスタ毎に作成されるので、クラスタ数と同じ数のダンプファイルが出力されているはずです:
/tmp/default_backup/bucket-default/node-couchbase.test.com%3A8091/data-0000.cbb

次にリストアを実行します。リストアコマンドは /opt/couchbase/bin/cbrestore です:
# /opt/couchbase/bin/cbrestore http://Administrator:password@couchbase.test.com:8091 --bucket-source=default --bucket-destination=test

このコマンドでは "default" というバケットから取得したバックアップダンプを(同じく) "test" というバケットに対してリストアする、という処理を指示しています。


Couchbase サーバーの特長の1つに「memcached互換」があります。

(ディスクではなく)メモリを一時キャッシュとして利用する memcached サーバーは比較的遅いリレーショナルデータベースのフロントエンドプロセッサーとして配置することで、部分的/仮想的に高速なデータベースサーバーを実現できます。ただし、あくまでメモリ上にのみ存在させて、ディスクへの読み書きを最小限に減らすことで高速化を実現しているため、そのままサーバーを落とすと中身が無くなり、再度メモリ上に展開して初めて再度利用することができるようになります。

Couchbase はこの memcached と互換性があります。memcached そのもののようにディスクへの退避のないデータストアとして利用することもできますし、データを非同期にディスクへ退避させつつメモリ中心のアクセスで高速化をはかる、という利用方法も選択できます(バケット単位で種類を指定します)。ちなみにデフォルト設定では後者になります。 ただいずれのモードでも単に memcached の挙動を真似ているというだけでなく、互換性があります。

具体的には、memcached は 11211 番ポートに TCP/IP で接続してデータを読み書きすることができますが、全く同じ TCP/IP リクエストで Couchbase サーバーのデータも読み書きできます。

実際に試してみましょう。Couchbase サーバーの環境構築についてはこちらを参照して、予め Couchbase サーバーが稼働している状態を用意しておきます:
CentOS に CouchBase サーバーを導入する

また、この手順では telnet を利用するので、telnet クライアントを用意しておきます。CentOS であれば以下のコマンドでインストールできます:
# yum install telnet

では実際に telnet で Couchbase サーバーに接続します。以下のコマンドの "couchbase.test.com" 部分を Couchbase サーバーのホスト名か IP アドレスに変更して実行してください:
# telnet couchbase.test.com 11211
Trying couchbase.test.com...
Connected to couchbase.test.com (127.0.0.1).
Escape character is '^]'.

上記のように "Escape character is '^]'. " と表示されれば接続できています。あっさり。

試しにこのプロトコルでデータを作成してみます。以下の様なコマンドを実行して、"my-third-document" という ID で、値が "My name is Couchbase." というドキュメントを作成してみます:
set my-third-document 0 0 21 My name is Couchbase.(改行)

memcached では set コマンドでデータを作成します。最初のパラメータは ID、2番目のパラメータは flag ですがここでは0を指定します。3番目のパラメータはデータの有効期限を秒単位で指定しますが、ゼロを指定すると無制限(ずっと残るデータ)になります。4番目のパラメータはデータサイズ、そして最後に実際のデータを入力します。

memcached(Couchbase)内のデータを参照するには get コマンドで ID を指定します:
get my-third-document(改行)
VALUE my-third-document 0 21
My name is Couchbase.
END

"My name is Couchbase." という入力した値が正しく取得できました。Couchbase サーバーに対して、memcached のプロトコルで値の読み書きができることが確認できました。

というわけで、Couchbase は memcached と同じように使えることが分かりました。memcached 用のライブラリの多くがそのまま Couchbase に対しても使えることになるので、これは便利な互換性といえます。

ちなみに、Couchbase サーバーへの telnet 接続を終了するには CTRL + ] を押して、プロンプトで quit を入力です:
(CTRL + ] を入力)
telnet> quit (telnetプロンプトで quit と入力)
# (元のシェルに戻る)







Couchbase サーバーに PHP SDK を使って PHP のプログラムからアクセスする環境の準備手順と、そのサンプルを紹介します。環境は CentOS 6.4 です。

まず Couchbase サーバーが用意できていない場合はサーバーを導入します。導入手順はこちらを参照してください:
CentOS に CouchBase サーバーを導入する


次に Couchbase Server 用の PHP のクライアントライブラリをインストールしますが、ここではいくつかの手順が必要になります。

まずは PHP をインストールします。後で pecl を使うので php-pear も含めてインストールします:
# yum install php php-mbstring php-devel php-pear

また、後で使うので openssl-devel モジュールもこのタイミングでインストールしておきます:
# yum install openssl-devel

次に libcouchbase.so という、Couchbase サーバー用の共用モジュールを導入します:
# wget -O /etc/yum.repos.d/couchbase.repo http://packages.couchbase.com/rpm/couchbase-centos62-x86_64.repo
# yum check-update
# yum install libcouchbase2-libevent libcouchbase-devel

ここまでの作業ができていると Couchbase サーバーの PHP SDK が導入できるようになります:
# pecl install couchbase

最後に PHP の拡張モジュールとして couchbase.so を指定します:
# vi /etc/php.d/json.ini
  :
  :
extension=json.so
extension=couchbase.so ←この行を追加

これで Couchbase 用の PHP SDK が使える状態になりました。以下の様なコードを記述することで PHP から Couchbase サーバーにアクセスすることができます("couchbase.test.com"部分は Couchbase サーバーのホスト名かIPアドレスを指定します):
<?php
$cb = new Couchbase( "couchbase.test.com:8091", "", "", "default" );
$cb->set( "my-second-document", "ハロー、CouchBase." );
var_dump( $cb->get( "my-second-document" ) );
?>

この例では Couchbase オブジェクトを作成し、"my-second-document" という ID のドキュメントを "ハロー、Couchbase" というプレーンテキストで作成し、そのデータを var_dump 関数で表示する、というだけのシンプルな内容です。この PHP プログラムが正しく実行されると以下の様な出力結果になります:
# php test.php
string(22) "ハロー、CouchBase."

Couchbase PHP SDK の公式なドキュメントはこちらを参照ください:
http://docs.couchbase.com/couchbase-sdk-php-1.1/




 

このページのトップヘ