【问题标题】:Couchdb 3.1.0 cluster - database failed to load after restarting one nodeCouchdb 3.1.0 集群 - 重启一个节点后无法加载数据库
【发布时间】:2020-09-25 09:43:49
【问题描述】:

情况如下:在由两个节点组成的 couchdb 集群上,每个节点都是服务器(ip1 和 ip2)上的一个 couchdb docker 实例。我不得不重新启动一台服务器并重新启动 docker,然后我的两个 couchdb 实例都为每个数据库显示:“此数据库无法加载。”

我可以连接 Futon 并查看完整的数据库列表,但仅此而已。在使用 Futon 进行“验证 Couchdb 安装”时,我有几个错误(只有“创建数据库”是绿色检查)

容器的 docker 日志给了我这个错误:

"internal_server_error : No DB shards could be opened"

我尝试通过将 .couch 和 shards/ 文件复制到 couchdb 的本地实例来在本地恢复数据库,但出现了同样的问题。

如何检索数据?

PS:我用erl检查了我的两个节点之间的连接,没有问题。看起来 docker 在重启时弄乱了一些 couchdb 配置文件。

【问题讨论】:

    标签: docker couchdb


    【解决方案1】:

    元数据和克隆节点

    各个数据库有metadata 指示其分片存储在哪些节点上,这是基于cluster options 创建的,因此单独复制数据库文件实际上不会将数据库移动或镜像到新节点上。 (如果元数据设置正确,则分片会由沙发本身复制,所以copying the files is only done to speed up the process。)

    副本数

    2 节点集群通常没有意义。与文件系统 RAID 一样,您可以条带化以获得最大性能和一半的可靠性,或者您可以创建镜像,但除非单个节点状态具有完美的一致性检测,否则无法自动确定两个节点中的哪一个不正确,同时决定 3 个节点中的哪一个不正确很容易自动执行。因此,大多数集群是 3 个或更多节点,每个分片在任意 3 个节点上都有 3 个副本。

    【讨论】:

      【解决方案2】:

      好吧,以防万一有人犯同样的错误:

      如果你有一个 2 节点集群,couchdb@ip1 和 couchdb@ip2,并从 couchdb@ip1 创建集群:

      1) 如果节点 couchdb@ip2 停止,则集群设置混乱(couchdb@ip1 将不再工作),重新启动时节点似乎无法正确连接,数据库将出现但不会可用。

      2) 另一方面,停止和启动 couchdb@ip1 不会造成任何问题

      情况1的解决方案是用2个新的couchdb实例(couchdb@ip1和couchdb@ip2)重新创建集群,然后将数据库复制到一个couchdb实例上,所有数据库都会恢复!

      如果有人可以详细解释为什么会发生这种情况?这也意味着这个集群配置是绝对不可靠的(如果 couchdb@ip2 关闭了,那么什么都不起作用),我猜它与 3 节点集群不一样?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多