かぴぶろぐ

またかぴったかと思った・・・(´A`;)

PythonでMemcached(複数node)

カテゴリ[ etc ]

PythonでMemcachedを使ってみた。
因みに複数node構成。

前提条件

  • memcached node1 192.168.1.1:11211
  • memcached node2 192.168.1.2:11211
  • python2.5*

memcachedのインストール

2台のサーバそれぞれインストール。

# yum install memcached

memcached起動

2台のサーバそれぞれ起動しておく。

# /etc/init.d/memcached start

python用memcachedモジュール

# easy_install python-memcached

テスト

node1 192.168.1.1でpython実行

In [1]: import memcache

In [2]: mc = memcache.Client(['127.0.0.1:11211','192.168.1.2:11211'])

In [5]: mc.flush_all()

In [6]: mc.set("kapi1", "cache data")
Out[6]: True

In [7]: mc.get("kapi1")
Out[7]: "cache data"

In [8]: mc = memcache.Client(['127.0.0.1:11211','192.168.1.2:11211'])

In [9]: mc.get("kapi1")
Out[9]: "cache data"

#192.168.1.1のmemcachedにアクセス
In [10]: my_mc = memcache.Client(['127.0.0.1:11211'])

#192.168.1.1のmemcachedには入っていない
In [11]: my_mc.get("kapi1")


#192.168.1.2のmemcachedにアクセス
In [12]: c_mc = memcache.Client(['192.168.1.2:11211'])


#192.168.1.1のmemcachedにデータが存在する。
In [13]: c_mc.get("kapi1")
Out[13]: "cache data"

#メインのmemcacheclientからはどちらにデータがあるか気にせずアクセスできる。
In [14]: mc.get("kapi1")
Out[14]: "cache data"

#MemoryをFlashする。
In [15]: mc.flush_all()

#192.168.1.1のmemcachedにデータが消えている
In [16]: c_mc.get("kapi1")

In [17]:

以下pythonからアクセス中にtelnetで実行していた結果。

node2 192.168.1.1のtelnet

telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
#[1]の時の状態
get kapi1
END
#[7]の時の状態
get kapi1
END
#[11]の時の状態
get kapi1
END

node2 192.168.1.2のtelnet

telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
#[1]の時の状態
get kapi1
END
#[7]の時の状態
get 1000
VALUE kapi1 0 10
cache data
END
#[16]の時の状態
get kapi1
END

複数node時の挙動

なんかバランサされてるのかと思われるが、微妙にそうでもなく、
一方にset()されると、ずっと同じnodeにset()するような動き。

node停止時の挙動

どちらかのnodeのmemcachedを止めると、もう片方のnodeにset()しだす。
この辺りは、ちゃんと切り替わるようだが、何度か試した内、set()の結果がFalseになって
nodeを見失う(それか、接続出来ないnodeにset()しようとしてる?)動きをした。
しかし、数秒後には接続できるnodeにset()し始めたので、set()の結果Falseを返すなら、
しばらくリトライする必要がありそう。

最初から2台構成のみのmemcached環境ならこんなのもあり

http://lab.klab.org/wiki/Repcached

参考URL

http://kapi.jp/kapi_blog/267

2010年04月14日

関連カテゴリ etc

この記事のコメント

この記事にコメントする