2004/09/15 作成
ZEO は、Zope の 2.7 からは Zopeの標準配布物に組み込まれた(それ以前のバージョンでは、別途配布されていました)負荷分散の仕組みです。
Zopeを、
の2つの要素に分割し、複数のZEOクライアントでリクエストを受け、中央のZEOサーバーで ZODBのトランザクションを集中的に処理できるものです。
以下の例では、Zope は /opt/Zope-2.7 にインストールされていることを前提とします。
ZEO サーバーのインスタンスを /var/zeo に作る場合は、
まず、最初に普通に Zope のインスタンスを作り、Zopeを起動し、ちゃんと動作する のを確認したあと、var/Data.fs をとっておきます。
次に
| $ /opt/Zope-2.7/bin/mkzeoinstance.py /var/zeo 8100 |
2番目のパラメータは、listen するポート番号で、省略すると 9999が指定されたものとみなされます。
この状態で、あらかじめ作って置いた Data.fs を /var/zeo/var にコピーします。
あとで、設定を変更したい場合は、/var/zeo/etc/zeo.conf の内容を変更すれば良いようです。
ZEOクライアントの インスタンスを /var/zeoclient 作る場合、まずは普通に Zopeのインスタンスを作ります。
つまり
| $ /opt/Zope-2.7/bin/mkzopeinstance.py |
次に、 /var/zeoclient/etc/zope.conf の <zodb_db main>~</zodb_db>ディレクティブの部分を以下のように変更します。
|
<zodb_db main> <zeoclient> server localhost:8100 storage 1 var $INSTANCE/var </zeoclient> mount-point / </zodb_db> |
ZEOを使って、複数の ZEOクライアントが接続できるようになるということは、Zope を起動しながら、デバッグのための接続もできるようになるということです。
| $ /var/zeoclient/bin/zope_ctl debug |
で、コンソールからデバッグを行うことができます。ZEOを使用していない場合は、Zope の起動中には ZODBを開けないので、エラーになりますが、ZEOクライアントの場合は、それが可能になります。
ZODBの中身を変更して、それを反映したいような場合は、最後に
| >>> get_transaction().commit() >>> app._p_jar.close() |
を実行します。
デバッグに使う場合と同様に、cronで定期的に ZODBに対して処理をするというようなこともできます。
ZEOサーバーや、(すべての)ZEOクライアントで、同じバージョンのプロダクトを入れる必要があります。
また、FSCounter のアクセス数のデータ(ファイルとして保存)や、セッションの値(メモリに保存)など、ZODBに保存されていないデータは、複数の ZEOクライアント間で 同じデータが参照されずに、うまく動作しない場合があります。 その場合、クッキーの値を見て振り分ける負荷分散装置を使ったり、ZEOクライアント間でファイルが同じパスとして参照できるようになど工夫してやる必要があります。