Memcachedの概要
イベント処理
libeventは、LinuxのepollやBSD系OSのkqueueなどのイベント処理機能を统一されたインタフェースでカプセル化したライブラリです。サーバへの接続数が増加しても、O(1)のパフォーマンスを発揮できます。memcachedはこのlibeventライブラリを使用しており、Linux、BSD、SolarisなどのOSで高性能を維持します。
ストレージ方式
パフォーマンスを向上させるため、memcachedでは保存されたデータがすべて内置のメモリストレージに格納されます。データはメモリのみに存在するため、memcachedやOSを再起動するとすべてのデータが失われます。また、指定した容量に達すると、LRU(Least Recently Used)アルゴリズムに基づいて使用されていないキャッシュが自動的に削除されます。memcachedはキャッシュ 목적으로設計されたサーバであるため、データの永続性については重点的に考慮されていません。
分散通信
memcachedは「分散型」キャッシュサーバですが、サーバサイドには分散機能がありません。各memcachedインスタンスは情報を共有するために互いに通信しません。那么,怎样进行分布式呢?这完全取决于客户端的实现!
Magent+Memcachedによるクラスター実装
動作構成
Agent1はデータを192.168.7.102:11211と192.168.7.103:11211に分割して保存し、192.168.7.104:11211に完全なバックアップを保持します。
Agent2も同様にデータを分割して保存し、バックアップサーバにデータを保持します。
動作原理
書き込み時に同時に2つのMemcachedにデータを書き込むことで冗長性を確保します。必要に応じて設定は調整できますが、冗長性の観点から2つのAgentを使用することが推奨されます。
構成例
- Magent(プロキシサーバ): 192.168.7.100:12000、192.168.7.101:12000
- Memcached主サーバ: 192.168.7.102:11211、192.168.7.103:11211
- Memcachedバックアップサーバ: 192.168.7.104:11211
インストールと設定
1. Memcachedのインストール
192.168.7.102、192.168.7.103、192.168.7.104にMemcachedをインストールし、ポート11211で起動します。
yum -y install memcached
/usr/bin/memcached -d -u root -l 192.168.7.102 -m 1024 -p 11211
/usr/bin/memcached -d -u root -l 192.168.7.103 -m 1024 -p 11211
/usr/bin/memcached -d -u root -l 192.168.7.104 -m 1024 -p 11211
# 主要な起動パラメータ
# -p <num> TCPポート番号(デフォルト: 11211)
# -U <num> UDPリスンポート(デフォルト: 11211)
# -l <ip_addr> バインドアドレス
# -d daemonモードで実行
# -u <username> 実行ユーザ
# -m <num> 最大メモリ使用量(MB、デフォルト: 64MB)
# -P <file> PIDファイル出力先
2. Magentのインストール
192.168.7.100と192.168.7.101にMagentをインストールします。
cd /usr/local/
mkdir ./magent
cd ./magent
wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz
tar xzvf ./magent-0.6.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp ./magent /usr/bin/magent
# Magentコマンドラインパラメータ
# -h ヘルプ表示
# -u uid
# -g gid
# -p port リスンポート(デフォルト: 11211)
# -s ip:port MemcachedサーバのIPとポート
# -b ip:port バックアップMemcachedサーバのIPとポート
# -l ip ローカルバインドIP(デフォルト: 0.0.0.0)
# -n number 最大接続数(デフォルト: 4096)
# -D バックグラウンド実行しない
# -k ketamaキー配置アルゴリズム使用
# -f file Unixソケットパス
# -i number 1Memcachedサーバあたりの最大持続接続数(デフォルト: 20)
# -v 詳細出力
3. Magentの起動
magent -u root -n 51200 -l 192.168.7.100 -p 12000 -s 192.168.7.102:11211 -s 192.168.7.103:11211 -b 192.168.7.104:11211
magent -u root -n 51200 -l 192.168.7.101 -p 12000 -s 192.168.7.102:11211 -s 192.168.7.103:11211 -b 192.168.7.104:11211
4. テスト
Pythonを使用してシンプルなテストを実行します。python-memcachedモジュールが必要です。
#/usr/bin/env python
#-*- coding:utf-8 -*-
import memcache
mc = memcache.Client(['192.168.7.100:12000'], debug=True)
mc.set('sample_key_1', 'value_1', 60)
mc.set('sample_key_2', 'value_2', 60)
mc.set('sample_key_3', 'value_3', 60)
mc.set('sample_key_4', 'value_4', 60)
mc.set('sample_key_5', 'value_5', 60)
print("設定完了")
5. 動作確認
telnetを使用して直接値を取得できます。
telnet 192.168.7.102 11211
get sample_key_1
または、MemAdmin管理ツールを使用して確認することも可能です。
MemAdminのインストール
MemAdminはPHPとJQueryで開発されたMemcachedの管理・モニタリングツールです。
主要機能:
- サーバパラメータモニタリング(STATS、SETTINGS、ITEMS、SLABS、SIZESのリアルタイム更新)
- サーバパフォーマンスモニタリング(GET、DELETE、INCR、DECR、CASなどの操作成功率)
- データ走査による保存内容の監視
- 条件付き查询(条件を満たすKEY/VALUEの検索)
- 配列、JSONなどのシリアライズデータの表示
- Tokyo Tyrantなどmemcachedプロトコル互換サービスへの対応
- サーバ接続池とマルチサーバ管理
インストール手順
yum -y install httpd
yum -y install php-pecl-memcache
vim /etc/httpd/conf/httpd.conf
# 420行目付近: DirectoryIndexにindex.phpを追加
DirectoryIndex index.html index.html.var index.php
git clone https://github.com/junstor/memadmin
/etc/init.d/httpd start
Webブラウザでアクセス: http://192.168.7.101/memadmin
デフォルトパスワードはconfig.phpで設定できます。