当我第一次使用 apt-get 安装 MongoDB 2.2.3 时,按照 10gen 安装指南中的说明,它会在服务器启动时自动启动。
但是,按照 /var/log/mongodb/mongodb.log 中的说明进行操作后:
Tue Apr 30 11:35:28.643 [initandlisten] ** WARNING: You are running on a NUMA machine.
Tue Apr 30 11:35:28.643 [initandlisten] ** We suggest launching mongod like this to avoid performance problems:
Tue Apr 30 11:35:28.643 [initandlisten] ** numactl --interleave=all mongod [other options]
Tue Apr 30 11:35:28.643 [initandlisten]
Tue Apr 30 11:35:28.643 [initandlisten] ** WARNING: /proc/sys/vm/zone_reclaim_mode is 1
Tue Apr 30 11:35:28.643 [initandlisten] ** We suggest setting it to 0
Tue Apr 30 11:35:28.643 [initandlisten] ** http://www.kernel.org/doc/Documentation/sysctl/vm.txt
Tue Apr 30 11:35:28.643 [initandlisten]
Run Code Online (Sandbox Code Playgroud)
它不再自动启动。
所以现在我必须输入:
echo 0 > /proc/sys/vm/zone_reclaim_mode && numactl --interleave=all /usr/bin/mongod --config /etc/mongodb.conf &
Run Code Online (Sandbox Code Playgroud)
每次在终端中手动启动它。
但是,我怀疑以这种方式启动它也会导致service mongodb stop/restart失败。它会抛出一个stop: Unknown instance:错误。
有没有适当的方法来解决这个问题?
如果您手动启动,Upstart 无法停止或重新启动您的服务。您需要更新 mongodb 的 upstart 脚本,使其以您需要的选项开始,然后以service mongodb start.
首先,由于 zone_reclaim_mode 设置是系统范围的而不是特定于 mongodb 的,因此您可以添加以下行:
vm.zone_reclaim_mode = 0
Run Code Online (Sandbox Code Playgroud)
to /etc/sysctl.conf,它在启动时配置系统变量。
接下来,您需要更新 upstart 用于启动 mongodb 的脚本/etc/init/mongodb.conf,以便它用numactl命令包装普通命令。所以这一行:
if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf; fi
Run Code Online (Sandbox Code Playgroud)
变成:
if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec /usr/bin/numactl -- --interleave=all /usr/bin/mongod --config /etc/mongodb.conf; fi
Run Code Online (Sandbox Code Playgroud)
您还提到 upstart 不会在启动时自动启动您的服务;如果在进行上述更改后仍然发生这种情况,请附上/var/log/mongodb/mongodb.log失败启动的完整摘录。
| 归档时间: |
|
| 查看次数: |
14932 次 |
| 最近记录: |