Azure上的MongoDB: replSet不能获取local.system.replset配置

本文关键字:local system replset 配置 获取 不能 上的 MongoDB replSet Azure | 更新日期: 2023-09-27 18:07:45

我正在使用MongoDB工作者角色项目在Azure上使用MongoDB。我有两个独立的云服务,其中一个一切都很好,但在另一个,MongoDB工作者角色被困在Busy (Waiting for role to start... Calling OnRoleStart状态。

我连接到一个MongoDB工作角色,访问MongoDB日志文件,发现以下错误:

[rsStart] replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)

有关于如何正常修复此问题的线程,但不是Windows Azure。我没有为MongoDB工作者角色配置任何东西(除了Azure存储连接字符串),它在另一个服务中工作,所以我不知道为什么它不适合这个服务。任何想法?

Azure上的MongoDB: replSet不能获取local.system.replset配置

前一段时间,我试图在Azure中托管RavenDB作为Worker Role,并且也有很多问题。

今天,我认为最好在目标平台上运行数据库的"建议"方式,即根据本"在Windows上安装MongoDB"指南的Windows服务。这样,您就不必处理azure特有的问题。要实现这一点,您可以:

  1. 使用Azure cmdlet和CsPack.exe一起创建MondoDB包。
  2. 类似于我在GitHub上发布的Azure上的RavenDB主从读取的解决方案。
  3. 在Azure上注册虚拟机(测试版),启动机器并在那里手动安装MongoDB。

但是我想托管数据库时最重要的问题是:你打算在哪里存储实际的数据库?

  • Azure的CloudDrive是存储在云存储中的VHD,具有最差的IO性能。我想说,这不足以正常使用数据库。
  • 临时存储,云服务本地磁盘空间,具有完美的IO,但一旦虚拟机被删除,您将丢失所有数据。这意味着你通常想要持续或至少定期备份到云存储,可能是通过CloudDrive。
  • Azure VM附加磁盘-比CloudDrive有更好的IO,但仍然不如Ephemeral storage。

对于您的问题的实际排除。我建议用try-catch包装OnRoleStart,将其写入日志,启用RDP到盒子,然后连接并查看实际问题。另一个选择是使用IntelliTrace,但你需要VS Ultimate。另外,不要忘记,如果你的应用程序需要对磁盘进行写操作,Azure需要使用本地资源。