Mongodb集群设置

Mongodb集群设置

我已按照说明安装了 Mongodb。设置完成后,我可以看到所有服务都已公开,但当我从 mongo shell 运行 sh.status() 命令时,仍然收到消息:此数据库未启用分片...。此外,当我从 shell 连接到 mongos 时,我没有收到“mongos>”提示符,而只收到“>”提示符。我不知道如何解决这个问题。

我有 5 个节点。我使用节点 1 作为我的 mongos,节点 2 作为我的配置服务器(运行 3 个实例)。节点 3、4 和 5 的配置如下:节点 3:shard1/0、shard2/1、shard3/2。节点 4:shard2/0、shard3/1、shard1/2 和节点 5 shard3/0、shard1/1、shard2/1。

可能是什么问题呢

答案1

我在 mongodb charm 的 hooks.py 脚本中发现了一个错误。在第 1053 行,我们看到对 enable_configuresvr 函数的调用:

enable_configsvr(config_data['config_server_port'])

但是enable_configuresvr的函数参数列表不匹配:

def enable_configsvr(config_data, wait_for=default_wait_for,
                 max_tries=default_max_tries):

config_data['config_server_port'] 不应该是传递的参数;config_data 应该是。

同样的问题出现在第 1069 行,enable_mongos 传递的是 config_data['mongos_port'] 而不是 config_data。

我将尝试运行一些测试来确认这些是唯一的错误。

除了填写错误报告外,还有其他人遇到过这个问题吗?似乎这个问题应该比我和康拉德更普遍 :P

答案2

康拉德,我还没有针对上面评论的修正进行测试,但它也可能解决您最近提到的日志文件问题。

Juju 仍然非常有价值。我希望我的 bug 捕获能够解决我们遇到的问题,并允许我们正确部署分片 mongo 集群。使用 Juju,我们将能够非常轻松地进行水平扩展。

我还使用 Juju 部署了我们的自定义 php charm(安装 php、挂接到 Apache 以设置 vhost,并将我们的 php 文件放在正确的目录中),我希望它与每个 mongos 实例共存。当我们的生产 php 文件发生更改时,我们将能够使用 juj update-charm 命令更新 charm 以及运行 charm 的所有节点。

我还没有遇到过任何开源的、足够成熟的、像 Juju 一样无需干预的东西。在决定使用 Maas 和 Juju 之前,我已经测试过 foreman 和 puppet。

答案3

我有更多的时间进行调查和运行一些测试。我看不出这段代码是如何流传多年的。我们是不是漏掉了什么?不仅有我已经发布过的错误参数值,而且似乎还有逻辑错误。

我认为 congifsvr 和 mongos 单元未假设其身份的原因是因为 enable_configsvr 和 enable_mongos 从未被实际调用!它们都位于 if 块中,该块要求已经存在正在运行的 configsvr 和 mongos(分别)。两者都不是,但代码中没有其他地方实际实例化 configsvr 和 mongos。

当 if 语句永远不满足时,enable_configsvr 如何执行?(hooks.py 第 1050 行)

if configsvr_pid is not None:
    configsvr_port = re.search('--port (\w+)', configsvr_cmd_line).group(2)
    disable_configsvr(configsvr_port)
    enable_configsvr(config_data['config_server_port'])
else:
    open_port(config_data['config_server_port'])

同样的逻辑适用于第 1066 行的 enable_mongos:

    if mongos_pid is not None:
    mongos_port = re.search('--port (\w+)', mongos_cmd_line).group(1)
    disable_mongos(mongos_port)
    enable_mongos(config_data['mongos_port'])
else:
    open_port(config_data['mongos_port'])

我确实在这里发布了错误报告:https://bugs.launchpad.net/charms/+source/mongodb/+bug/1460876

有人使用 charm 成功部署过分片 mongo 集群吗?

相关内容