【问题标题】:Problems with clustered Mongodb 4.x multi-document transactions集群 Mongodb 4.x 多文档事务的问题
【发布时间】:2020-07-06 08:04:25
【问题描述】:

在使用多文档事务时,我遇到了 MongoDB 集群的问题。

我有 5 个 mongodb 副本集服务器,分为三个数据中心。其中两个在第一个数据中心,两个在第二个数据中心,一个在第三个数据中心(仲裁器)。有一次,其中一个服务器是主服务器,第三个服务器是从属副本。 我使用 Spring Boot 在 java 中编写了一个应用程序,并在 mongo 中大量使用了多文档事务。

当所有数据库服务器都启动时,一切正常。但是当我想通过消除其中一个数据中心来测试高可用性时,我遇到了奇怪的问题。我的应用程序开始在每个事务上挂起(我需要等待大约一分钟,然后我从数据库中获得超时),但是在不使用事务时仍然可以正常工作:-(。

以下是我在应用程序中遇到的异常:

2020-07-06 16:58:51.748 ERROR 6 --- [0.0-5555-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mongodb.MongoTransactionException: Query failed with error code 251 and error message 'Encountered non-retryable error during query :: caused by :: Transaction 4 has been aborted.' on server mongos-dc2.fake.domain.com:27017; nested exception is com.mongodb.MongoQueryException: Query failed with error code 251 and error message 'Encountered non-retryable error during query :: caused by :: Transaction 4 has been aborted.' on server mongos-dc2.fake.domain.com27017] 

这可能是什么原因?你能告诉我我应该怎么做才能解决这个问题吗?

【问题讨论】:

  • 诊断究竟是什么“挂起”,在问题中添加细节。
  • 我猜你没有正确使用交易,但你的问题仍然没有包含足够的信息来回答。
  • 相信我,当您使用 spring boot 时,确实没有出错的余地。您只需声明 TransactionManager 并在某些方法上使用 @Transactional 注释即可。正如我所说,在本地单个数据库的本地开发过程中一切正常,当所有服务器都启动时,在目标服务器上也是如此。当我断开两个服务器时,问题就开始了。我希望有人有类似的问题,我认为没有理由投反对票
  • 我投了反对票,因为我不相信这个问题是可以回答的。如果真的没有犯错的余地,您就不会遇到这个问题,对吗?尽可能减少你的代码,一旦它完全适合一个屏幕页面,就将它添加到问题中。
  • 同时查看服务器日志。

标签: mongodb transactions high-availability acid


【解决方案1】:

我认为有罪的是mongo仲裁者。

https://docs.mongodb.com/manual/tutorial/add-replica-set-arbiter/

正如我所描述的,我的四个 mongo 服务器是普通副本(两个在第一个数据中心,两个在第二个数据中心),但最后一个(在第三个数据中心)是仲裁者,它的角色只是在以下情况下投票选举新的初选。 我将该节点类型从仲裁器更改为普通副本,一切都开始按预期工作:/ 那仍然没有回答我的问题,因为我不知道为什么应该工作的东西,官方的 mongo 功能,只是失败了。但这可能是 Mongo 团队的问题,而不是 stackoverflow 的主题。

尽管如此,我希望这会对某人有所帮助

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2021-10-29
    相关资源
    最近更新 更多