tsi*_*ins 5 zope plone buildout
我想使用ZRS在两个服务器(zopeserver-1和zopeserver-2)之间复制数据,zopeserver-1上的ZEO是主服务器,并且复制到zopeserver-2上的辅助ZEO.每个服务器都有两个Zope客户端,都指向zopeserver-1上的主ZEO.
在尝试使用ZRS使我们的现有配置工作时遇到blob问题后,我在两台服务器上创建了vanilla Plone 4.3.2实例,以验证我遇到了同样的问题.buildout.cfg的非vanilla部分是:
eggs =
...
zc.zrs
[zeoserver]
<= zeoserver_base
recipe = plone.recipe.zeoserver[zrs]
zeo-address = 8100
replicate-to = 5000
[client1]
<= client_base
recipe = plone.recipe.zope2instance
zeo-address = zopeserver-1:${zeoserver:zeo-address}
http-address = 8081
[client2]
<= client_base
recipe = plone.recipe.zope2instance
zeo-address = zopeserver-1:${zeoserver:zeo-address}
http-address = 8082
Run Code Online (Sandbox Code Playgroud)
eggs =
...
zc.zrs
[zeoserver]
<= zeoserver_base
recipe = plone.recipe.zeoserver[zrs]
replicate-from = zopeserver-1:5000
keep-alive-delay = 60
zeo-address = 8100
read-only = on
[client1]
<= client_base
recipe = plone.recipe.zope2instance
zeo-address = zopeserver-1:${zeoserver:zeo-address}
http-address = 8081
[client2]
<= client_base
recipe = plone.recipe.zope2instance
zeo-address = zopeserver-1:${zeoserver:zeo-address}
http-address = 8082
Run Code Online (Sandbox Code Playgroud)
buildout中的"Picked Versions"是:
[versions]
Twisted = 13.2.0
zc.zrs = 2.4.4
Run Code Online (Sandbox Code Playgroud)
当我尝试使用辅助服务器上的Zope客户端创建Plone File对象时.我收到的追溯是:
Traceback (innermost last):
Module ZPublisher.Publish, line 146, in publish
Module Zope2.App.startup, line 301, in commit
Module transaction._manager, line 89, in commit
Module transaction._transaction, line 329, in commit
Module transaction._transaction, line 446, in _commitResources
Module ZODB.Connection, line 781, in tpc_vote
Module ZEO.ClientStorage, line 1098, in tpc_vote
Module ZEO.ClientStorage, line 929, in _check_serials
IOError: [Errno 2] No such file or directory: '/usr/local/plone/zeocluster/var/blobstorage/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0xea/0x006ObqSw.tmp-'
Run Code Online (Sandbox Code Playgroud)
因为此0x006ObqSw.tmp-文件是在辅助服务器上的blobstorage上创建的,而不是在主服务器上创建的.
当主服务器上的Zope客户端创建Blob时,看起来blob会正确复制到辅助ZEO,但是由于主服务器上的ZEO无法找到,因此无法使用辅助服务器上的Zope客户端创建文件该.tmp文件.
如果我添加shared-blob = off下[client 1]和[client 2]上中学,我收到错误:
ValueError: Directory layout `zeocache` selected for blob directory /usr/local/plone/zeocluster/var/blobstorage/, but marker found for layout `bushy`
Run Code Online (Sandbox Code Playgroud)
删除内容/usr/local/plone/zeocluster/var/blobstorage以允许它创建zeocache布局允许文件创建,但这通过ZEO流式传输所有blob.我的理解是,这会降低性能,并且不会复制主要版本blobstorage,这会使复制目的失败一半.
我在这个问题中看到了这个注释:
Plone使用Plone 4.3.1上的plone.recipe.zeoserver切换到ZRS
关于将Zope客户端设置为只读以及辅助ZEO服务器,但不幸的是,这阻止我们使用PloneFormGen的Save Data适配器,我们在公共站点中广泛使用它.
根据这一经验,我对这个问题的看法是:
blobstorage从辅助服务器上的主服务器进行NFS安装,并将辅助ZEO写入blobstorage-replicated可以重命名以进行故障转移的并行文件夹.blobstorage文件夹,但将辅助Zope客户端指向一个单独的blobstorage-zeocache文件夹shared-blob = off我错过了一个非常简单的ZRS概念或配置吗?这完全有可能!
辅助服务器必须是只读的,并且写入仅发生在主服务器上。ZRS 不进行 MASTER-MASTER 复制。
也许您可以将传入主服务器 zeoclient 的 POST 请求路由,因为它们可能会写入数据库。
查看https://pypi.python.org/pypi/wildcard.readonly以处理读时写入问题。
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |