标签: mongodb

了解 MongoDB 日志中的 IXSCAN 和 COLLSCAN

我正在尝试通过一些 Mongo 日志进行 grep 以尝试找到我需要优化的缓慢操作。慢查询日志记录是默认的,记录操作超过 100 毫秒。

我认为可以肯定地说,一般来说,搜索 COLLSCANS 会显示需要注意的查询。不太清楚的是,如果 IXSCANS 是我应该搜索的细节。

考虑此处的 MongoDB 文档:

https://docs.mongodb.com/manual/reference/explain-results/#collection-scan-vs-index-use

我的理解是这是一种二元情况,查询是 COLLSCAN 或 IXSCAN。因此,如果我对 IXSCAN 进行 grep,我将查看所有不是 COLLSCANS 的慢查询。这是真的?

database-administration database-performance mongodb

7
推荐指数
1
解决办法
6723
查看次数

如何连接到代理后面的 MongoDB 副本集?

我在云服务上有一个 MongoDB 副本集。出于安全原因,副本集可用于云的内部网络。

我遵循了该云服务的指南,并在代理服务器上为副本集的每个成员设置了一个代理:

0.0.0.0:27017 -> member1-private-ip:27107
0.0.0.0:27018 -> member2-private-ip:27107
0.0.0.0:27019 -> member3-private-ip:27017
...
Run Code Online (Sandbox Code Playgroud)

我能够以独立模式从公共网络连接到副本集的每个成员:

mongoUri = new MongoClientURI("mongodb://usr:pwd@proxy-server-public-ip:27017/db")  ;
client = MongoClient(mongoUri);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试以副本集模式连接它时:

mongoUri = new MongoClientURI("mongodb://usr:pwd@proxy-server-public-ip:27017,proxy-server-public-ip:27018,proxy-server-public-ip:27019/db?replicaSet=replcaSetName");
client = MongoClient(mongoUri);
Run Code Online (Sandbox Code Playgroud)

我会因连接错误而失败,因为复制集告诉驱动程序使用每个成员的内部地址(无法从公共网络访问)。

ps:我可以在代理服务器上以副本集模式连接到副本集。

如何连接到代理服务器后面的副本集?


更新:我在连接时使用代理服务器的公共地址。

mongodb

7
推荐指数
2
解决办法
1万
查看次数

由于管道损坏而无法进行 rsync

我正在尝试通过在两台服务器上停止 Mongo 然后运行以下命令来在生产服务器和开发环境之间镜像大型 Mongo 数据库:

rsync --archive --delete --recursive --verbose --compress --rsh "ssh -t -o StrictHostKeyChecking=no -i key.pem" remoteuser@remotehost:/var/lib/mongodb/ /var/lib/mongodb
Run Code Online (Sandbox Code Playgroud)

它运行良好几分钟,但随后因错误而停止:

receiving incremental file list
./
collection-228--5129329295041693519.wt
inflate returned -3 (0 bytes)
rsync error: error in rsync protocol data stream (code 12) at token.c(557) [receiver=3.1.1]
rsync: [generator] write error: Broken pipe (32)
rsync error: error in socket IO (code 10) at io.c(820) [generator=3.1.1]
Run Code Online (Sandbox Code Playgroud)

谷歌搜索错误表明这是某种网络连接问题,但我能够很好地连接到两台服务器。

如果我重新运行该命令,它会在完全相同的文件处失败并显示相同的错误消息。是什么原因导致此错误以及如何修复它?

rsync mongodb

7
推荐指数
1
解决办法
2万
查看次数

AWS 上的 MongoDB 灾难准备

我正在寻找有关 AWS 托管环境中 MongoDB 灾难恢复的最佳实践建议。

我们的设置在这一点上是相当标准的,3 个服务器的副本集(1 个主服务器、1 个辅助服务器和 1 个仲裁器),主服务器和辅助服务器上的 mongo 卷是 EBS 支持的。所有这些都在一个区域中,分布在多个可用区中。最终我们需要跨越区域,但这是改天的讨论。

我在 Mongo 文档中看到的备份建议谈到了 EBS 快照(这很容易实现自动化)。然而,如果灾难来袭,它们不会让我们回到失败的时代。

  • 我是否需要记录 oplog 并结合使用它们来在故障后恢复?
  • 我是否应该在副本集中启动另一个实例,专门用于备份和快照,而不是拍摄主要和次要快照?如果是这样,我们又回到了 oplog 问题,不是吗?
  • 我是否应该对每个副本卷进行快照并完全依赖副本集来覆盖故障和最后一个快照之间的时间?

我正在寻找可用的最强大的策略。高达第二次数据保护和故障后系统恢复速度的优先级高于价格。我们可以稍后优化价格。

在此先感谢您的所有建议...

backup snapshot amazon-web-services mongodb replica-set

6
推荐指数
1
解决办法
1124
查看次数

Mongo 分片 - 配置服务器和 Mongo 身份验证

我需要以很快就会分片的数据库,并且对我最好的做法是什么在启用身份验证不清mongosconfig服务器。

我想用密码保护一切。

  1. 每个配置服务器都应该auth启用吗?
  2. 如果是这样,那么每个用户都设置相同的用户?仅用于管理数据库?或者是否需要为配置数据库创建一个?
  3. 我猜你不需要在 mongos 上创建任何用户,因为它应该从配置和分片本身继承,这是正确的吗?
  4. 添加新分片时,是否需要为新分片上的每个分片数据库设置相同的用户?

谢谢!

security authentication sharding mongodb

6
推荐指数
1
解决办法
4107
查看次数

如何启动具有身份验证支持的 Mongo 守护进程

我想使用 Mongo init 脚本启动具有 auth 支持的 MongoDB 守护进程:

sudo /etc/init.d/mongod start
Run Code Online (Sandbox Code Playgroud)

我还将 db 用户添加到数据库中以进行身份​​验证。我正在处理两个文件:(/etc/init.d/mongod用于初始化)和/etc/mongod.conf(用于配置)。

#mongod.conf:
dbpath=/var/lib/mongodb
logappend=true
port = 27017 
auth = true
Run Code Online (Sandbox Code Playgroud)

非守护进程方法使用以下--auth标志正确启动进程:

mongod --auth
Run Code Online (Sandbox Code Playgroud)

fork 可以工作,但这不使用 init 脚本:

mongod --fork --auth --logpath /var/log/mongod.log
Run Code Online (Sandbox Code Playgroud)

阅读所有文档和相关帖子,似乎没有人有一个可行的解决方案来获得身份验证支持

service mongod start
Run Code Online (Sandbox Code Playgroud)

链接:

更新:我重新安装的Debian /蒙戈,并能使用service mongod startauth = true在的conf文件。我可能在初始安装/配置期间破坏了某些东西。

daemon authentication mongodb

6
推荐指数
1
解决办法
2万
查看次数

mongod:符号查找错误:mongod:未定义符号:_ZN5boost6detail13once_epoch_cvE

我的 mongodb 安装有问题:当我运行 sudo mongod 时,我得到 mongod: symbol lookup error: mongod: undefined symbol: _ZN5boost6detail13once_epoch_cvE

uname -a
Linux xyz 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686 GNU/Linux

which mongod
/usr/bin/mongod

ldd /usr/bin/mongod
    linux-gate.so.1 =>  (0xb76e7000)
    libpcrecpp.so.0 => /usr/lib/i386-linux-gnu/libpcrecpp.so.0 (0xb76b9000)
    libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb767b000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb758e000)
    libboost_system.so.1.49.0 => /usr/lib/libboost_system.so.1.49.0 (0xb758a000)
    libboost_thread.so.1.49.0 => /usr/lib/libboost_thread.so.1.49.0 (0xb7565000)
    libboost_filesystem.so.1.49.0 => /usr/lib/libboost_filesystem.so.1.49.0 (0xb7546000)
    libboost_program_options.so.1.49.0 => /usr/lib/libboost_program_options.so.1.49.0 (0xb74de000)
    libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb74b7000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb749a000)
    libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb7481000)
    libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb731d000)
    /lib/ld-linux.so.2 (0xb76e8000)
    librt.so.1 …
Run Code Online (Sandbox Code Playgroud)

debian libboost mongodb

6
推荐指数
1
解决办法
1871
查看次数

Mongodb 安装在 Ubuntu 14.04 docker 容器中失败

我正在尝试使用 Dockerfile 中官方 mongodb 指南中的以下步骤在 docker 容器中的 ubuntu 14.04 上安装 mongodb:

RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
RUN apt-get update && apt-get -q -y install \
    nodejs\
    npm \
    git \
    mongodb-org
Run Code Online (Sandbox Code Playgroud)

这些命令在我的主机 ubuntu 系统上正确安装 mongodb,但不在 docker 中。在我的 docker 镜像中, /etc/init.d/mongod 不存在。运行“docker build”时打印以下错误:

invoke-rc.d: unknown initscript, /etc/init.d/mongod not found.
invoke-rc.d: policy-rc.d denied execution of start.
Run Code Online (Sandbox Code Playgroud)

mongodb docker ubuntu-14.04

6
推荐指数
1
解决办法
4124
查看次数

为什么MongoDB不会自动重启?

如果 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
Run Code Online (Sandbox Code Playgroud)

发送 SIGKILL 和 SIGSEGV 都会终止进程并且不会重新启动。我不确定这些是否被 …

ubuntu mongodb systemd

6
推荐指数
1
解决办法
3459
查看次数

生产中 NVMe 上的 MongoDB

我正在设置我的数据库生产环境,我有一些问题。服务器有两个NVMe磁盘,但不能在硬件RAID控制器中使用。我需要带 NVMe 的 RAID 吗?

在生产中将它们用作JBOD就足够了吗?还是应该使用软件 RAID 1/0(这是 MongoDB 建议的 RAID)?否则,我必须卸下 NVMe 驱动器并订购要在 RAID 硬件控制器中使用的 SATA 接口。

raid mongodb nvme

6
推荐指数
1
解决办法
545
查看次数