gpt4 book ai didi

plone - 在 Plone 4.3.2 上实现 Zope 复制服务 (ZRS) 时出现 Blobstorage 错误

转载 作者:行者123 更新时间:2023-12-04 21:16:43 25 4
gpt4 key购买 nike

我想使用 ZRS 在两台服务器(zopeserver-1 和 zopeserver-2)之间复制数据,其中 zopeserver-1 上的 ZEO 为主,并复制到 zopeserver-2 上的辅助 ZEO。每个服务器将有两个 Zope 客户端,都指向 zopeserver-1 上的主 ZEO。

在尝试使我们现有的配置与 ZRS 一起工作时遇到 blob 问题后,我在两台服务器上创建了 vanilla Plone 4.3.2 实例,以验证我是否遇到了同样的问题。 buildout.cfg 的非原版部分是:

基本的

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

中学
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

buildout 中的“精选版本”是:
[versions]
Twisted = 13.2.0
zc.zrs = 2.4.4

当我尝试使用辅助服务器上的 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-'

因为这个 0x006ObqSw.tmp-文件是在辅助服务器上的 blobstorage 上创建的,而不是在主服务器上创建的。

看起来当主服务器上的 Zope 客户端创建时,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`

删除 /usr/local/plone/zeocluster/var/blobstorage 的内容允许它创建一个 zeocache layout 允许创建文件,但这会通过 ZEO 流式传输所有 blob。我的理解是,这会降低性能,并且不会复制主要的 blobstorage ,这使复制的目的失败了一半。

我在这个问题中看到了注释:

Plone Switching to ZRS using plone.recipe.zeoserver on Plone 4.3.1

关于设置 Zope 客户 只读以及辅助 ZEO服务器 ,但不幸的是,这阻止了我们使用 PloneFormGen 的 Save Data 适配器,我们在公共(public)站点中广泛使用它。

基于这个经验,我对处理这个问题的想法是:
  • NFS 挂载 blobstorage从初级到次级,并让次级 ZEO 写入并行 blobstorage-replicated可以重命名以进行故障转移的文件夹。
  • 让辅助 ZEO 将 blob 复制到 blobstorage文件夹,但将辅助 Zope 客户端指向单独的 blobstorage-zeocache带有 shared-blob = off 的文件夹

  • 我是否缺少一个非常简单的 ZRS 概念或配置?这是完全可能的!

    最佳答案

    辅助服务器需要是只读的,并且写入只发生在主服务器上。 ZRS 不做 MASTER-MASTER 复制。

    也许您可以将进入主服务器 zeoclients 的 POST 请求路由到它们,因为它们可能会写入数据库。

    查看 https://pypi.python.org/pypi/wildcard.readonly用于处理读时写问题。

    关于plone - 在 Plone 4.3.2 上实现 Zope 复制服务 (ZRS) 时出现 Blobstorage 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21706750/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com