repcachedをインストールして、memcachedをレプリケーションしてみる

投稿者: | 2014/03/26

複数台の構成の場合、WEBサーバ、データベースサーバ、キャッシュサーバと、役割別にサーバを建てることが一般的です。
役割を簡単に説明すると、下記の通りになります。

  • WEBサーバ(Apache, nginxなど)
    • ブラウザからアクセスしたときにページ表示させます
  • データベースサーバ(MySQLなど)
    • データベース
  • キャッシュサーバ(memcachedなど)
    • セッションやデータを格納するのに使います
    • キャッシュサーバにセッションを格納し、複数WEBサーバから参照できることによってユーザのセッションを維持することができます

しかし、サーバ購入や運用のコスト面などの理由により、1台のサーバに複数の役割を持たせることもあります。例えば、下記の図のように1台(サーバA)にWEBサーバとデータベースとCacheを同居させて、もう一台(サーバB)にはWEBサーバを建てて、DBとCacheを2台で共有して使う構成です。

サーバ構成図1

管理するサーバが2台で済むので楽ですが、サーバAがダウンした場合、データベースとキャッシュが使えなくなるため、システム(Webサービス)全体がダウンしてしまいます。
そのため、データベースの場合は、お互いが同期を取れる(レプリケーション)ようにすることが多いです。キャッシュもレプリケーションによってデータを同期を取れるようにできれば冗長化が図れます(下記の図を参照)。

サーバ構成図1

そこで、memcachedをレプリケーションできる「repcached」を紹介し、インストール・設定できるようにします。

repcachedとは

repcachedはKLabが開発したmemcachedにレプリケーション機能をつけたものです。
レプリケーション機能がついただけで基本的な機能や使い方はmemcachedと同様です。基本的にレプリケーションできるのは2台までです。3台レプリケーションできたという記事もありましたが未検証です。

repcachedのインストール

レプリケーションなので、2台(上記図のサーバA、サーバB)にインストール・設定します。

OS、バージョンなど

  • CentOS 6.4
  • repcached 2.2.1
  • memcached 1.2.8 (repcachedと一緒にインストールされます)

必要なパッケージのインストール

ダウンロード・コンパイル

ここで、

memcached.c:697:30: error: ‘IOV_MAX’ undeclared (first use in this function)

というコンパイルエラーが出たので、memcached.c を修正します。

もう一度makeする。

インストールできたかの確認

-x, -Xオプション以外はmemcachedと同じです。

設定

ポートを空ける

memcachedのポート番号はデフォルトで11211だが、レプリケーションするために必要なポート番号がデフォルトで11212なので、レプリケーション対象に対して11212を開けておく必要があります。

例えば、上記図のサーバAのIPアドレスが10.0.0.1, サーバBのIPアドレスが10.0.0.2の場合にiptablesを下記のように設定します。

サーバA

サーバB

memcachedユーザ追加

repcached(memcached)を動かすmemcachedユーザを追加します。

-M オプションでユーザ追加時に、ホームディレクトリ(/home/memcached)が作成されません。
-s オプションでユーザのログインシェルを指定しています。memcachedユーザはログインする必要が無いので、/sbin/nologin を指定しています。

起動スクリプト

こちらのサイトから拝借しました。

設定ファイル

基本的にはmemcachedと同様で、REPHOSTが追加されただけです。

自動起動設定

起動

-x オプションでレプリケーション先サーバのIPアドレスが設定されていることを確認します。

レプリケーションされたかの確認

2台ともrepcachedをインストールしていることが前提になります。

サーバAにSSHログインして、localhostにポート11211(memcached)でtelnet接続します。

データを格納します。

サーバBも同様にSSHログインして、localhostにポート11211(memcached)でtelnet接続し、先ほどのデータが格納されたか確認します。

先ほどのデータが表示されれば、レプリケーションされていることになります。
もし、表示されなければどこかで設定が間違っている可能性があります。
ポートの開け忘れがよくあるのでiptablesの設定を確認してください。

最後に

repcachedをインストールして、データをレプリケーションしてみました。
memcachedにセッションを格納することで、ユーザのログイン状態を保持することができます。
今後、PHPでセッションをmemcachedに格納する設定も紹介できればと思います。

参考URL

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*