AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 904037
Accepted
four43
four43
Asked: 2018-03-23 06:26:34 +0800 CST2018-03-23 06:26:34 +0800 CST 2018-03-23 06:26:34 +0800 CST

为什么 MongoDB 不会自动重启?

  • 772

似乎 MongoDB 3.6 不会自动配置为在崩溃时重新启动。查看与 Ubuntu 16.04LTS 的最新 .deb 包捆绑在一起的 systemd 服务,它似乎没有配置重新启动:

$ sudo systemctl cat mongod
# /lib/systemd/system/mongod.service
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false

# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target

发送 SIGKILL 和 SIGSEGV 都会杀死进程并且不会重新启动。我不确定这些是否被 systemd “捕获”,而不仅仅是重新启动。

所以有几个问题:这对于像数据库这样的高可用性服务至关重要吗?它确实看起来像。MongoDB 是否有任何理由不对其进行开箱即用的配置?

ubuntu
  • 3 3 个回答
  • 4171 Views

3 个回答

  • Voted
  1. Best Answer
    Stennie
    2018-03-29T19:51:03+08:002018-03-29T19:51:03+08:00

    意外关闭绝对是强烈建议管理员干预的情况,尽管您始终可以更改部署的服务默认值。

    如果进程关闭的原因mongod是在没有人工干预的情况下无法修复的不变量(例如,磁盘空间不足或数据文件损坏),则自动重新启动将无济于事,并且可能会使情况变得更糟。一般来说,mongod不应关闭可恢复的错误。MongoDB Server Exception Architecture区分每个操作的致命错误和对整个进程致命的错误。进程致命错误是指继续可能导致可怕结果的情况,例如数据丢失或磁盘上的数据损坏。用户或 O/S 发起的终止进程的信号(例如Linux 上的Out-of-Memory aka OOM Killermongod )也将导致关闭。

    评论中提到的一个示例错误是索引构建在使用旧版本 MongoDB 的某些辅助节点上出现了段错误。使用自动服务重新启动,这种情况可能会导致一个无限循环,其中辅助节点可能会崩溃、重新启动、恢复索引构建、遇到相同的条件并重新启动......只是为了恢复注定失败的索引构建。虽然此重启循环正在进行中,但辅助节点的间歇性可用性可能会影响使用辅助读取首选项或副本集其他成员的客户端(例如,反复寻找上游 oplog 以恢复同步)。

    作为系统管理员,我更愿意查看 MongoDB 日志并尝试了解进程关闭的原因,以便解决根本原因。理想情况下,部署将具有足够的容错能力以应对成员不可用的情况,以便有时间调查和补救这种情况。

    根据问题和部署的性质(独立、副本集或分片集群),我可能还想在尝试任何自动或手动恢复之前备份数据文件。例如,在不正常关机后重新启动时,mongod会有一个初始恢复阶段,该阶段将应用未完成的日志条目并运行存储引擎检查,如dbPath. 对于独立服务器,谨慎的做法是在任何恢复/修复尝试之前获取未修改数据文件的副本。通过副本集部署,数据已经复制到副本集的另一个成员上,因此如果标准恢复不成功,我将重新同步该成员,而不是尝试任何修复。

    • 6
  2. Tux_DEV_NULL
    2018-03-23T06:36:48+08:002018-03-23T06:36:48+08:00

    如果您使用的是 systemd,那么Restart=always在该[Service]部分下应该允许服务在崩溃后重新启动。

    • 3
  3. Jason Floyd
    2018-03-24T08:07:43+08:002018-03-24T08:07:43+08:00

    如果您真的关心高可用性,您将运行一个副本集,并且可以处理 1 个或更多节点故障。

    在生产环境中亲自管理大型、分片的 mongodb 部署 5 年之后,我更喜欢实例而不是自动重启,因为我想在它回到副本集中轮换之前调查任何问题。

    https://docs.mongodb.com/manual/core/replica-set-high-availability/

    • 2

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve