Azure上的MongoDB:replSet无法获取local.system.replset配置

时间:2013-04-07 08:33:28

标签: c# mongodb azure

我正在使用MongoDB worker role project在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存储连接字符串),它在另一个服务中工作,所以我不知道为什么它不适用于这个服务。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

前段时间我试图在Azure中托管RavenDB作为工作者角色,并且也有很多问题。

今天,我认为最好按照这个"Install MongoDB on Windows"指南在目标平台上运行数据库作为Windows服务的“建议”方式。这样您就不必处理特定于Azure的问题。为此,您可以:

  1. 使用Azure CmdLets和CsPack.exe为MondoDB创建包。
  2. 与我在GitHub上发布的RavenDB Master-Slave reads on Azure类似的解决方案。
  3. 在Azure上注册虚拟机(测试版),启动计算机并在那里手动安装MongoDB。
  4. 但我认为托管数据库时最重要的问题是:您打算在哪里存储实际的数据库?

    • Azure的CloudDrive是存储在云存储中的VHD,具有最差的IO性能。对于正常的数据库使用来说,这不足以说明。
    • 临时存储(Cloud Service本地磁盘空间)具有完美的IO,但删除VM后会丢失所有数据。这意味着您通常希望通过CloudDrive对云存储进行连续或至少定期备份。
    • Azure VM attached disk - 比CloudDrive有更好的IO,但仍然不如短暂存储。

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