我正在测试 MongoDB 的档案数据。我们有一个包含 160M 行的集合。MongoDB 实例在 12 Gb 物理内存盒上占用 76.2 Gb 虚拟内存;-) 交换为 null。
我读到虚拟内存 = 物理 + 交换。
我的情况有什么问题?这是 mongoDB 本身的问题吗?
谢谢
我正在阅读 MongoDB 安装说明,并注意到他们有一个私有存储库,说明告诉您添加。我想知道这是否真的需要,因为 MongoDB 也在 Ubuntu 存储库(Ubuntu 12.04)中。我在想,与 Ubuntu 相比,他们发布到自己的仓库可能更容易吗?但我真的不确定。只是想知道是否有人可以对此有所了解。
我们在 CentOS 6.3 上设置了一个MongoDB开发服务器,并且能够通过使用单独的配置文件和 rc 脚本来分离不同的项目。现在我们正在考虑设置 MongoDB 生产环境。
我读过不建议在生产中的同一台服务器上托管多个 MongoDB 实例。 这是否意味着每个项目都需要自己的生产 MongoDB 环境?
这些项目不是非常“大”,因此不需要很多资源,所以感觉就像我们通过为每个项目提供自己的主机来跳枪。也许我们只需要摆脱 RDBMS 的世界。
我们将监控我们的开发服务器以了解它的运行情况,但我正在寻找一些见解和一些您自己的个人经验来补充我所阅读的内容。
根据[1]的默认值是当执行时间> 100ms时收集配置文件数据
但问题之一是当大多数查询的执行时间 > 100 毫秒时,我们的系统开始过载,我不确定分析器是否使我们的系统更加繁忙。
我正在考虑禁用或设置一个较大的值,例如 2 秒。好像默认的 100ms 太小了?
[1] http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
我在使用 ZFSonlinux 的 MongoDB(我相信它是 mmapped DB)时遇到了巨大的性能问题。
我们的 Mongodb 几乎只写。在没有 ZFS 的副本上,磁盘完全忙于大约 5 秒的峰值,当应用程序每 30 秒写入一次数据库时,并且中间没有磁盘活动,因此我将其作为比较的基准行为。
在具有ZFS副本,盘完全是忙碌所有的时间,与副本有点吃力跟上与MongoDB的主。我在所有副本上都启用了 lz4 压缩,并且节省的空间很大,因此访问磁盘的数据应该少得多
所以在这些 ZFS 服务器上,我首先使用默认的 recordsize=128k。然后我在重新同步 Mongo 数据之前擦除了数据并设置了 recordsize=8k。然后我再次擦拭并尝试recordsize = 1k。我也试过 recordsize=8k 没有校验和
尽管如此,它并没有解决任何问题,磁盘始终保持 100% 忙碌。仅在记录大小= 8k 的一台服务器上,磁盘比任何非 ZFS 副本忙得多,但是在尝试不同的设置并再次尝试记录大小= 8k 后,磁盘为 100%,我看不到以前的良好行为,并且在任何其他副本上也看不到它。
此外,应该几乎只有写入,但看到在不同设置下的所有副本上,磁盘完全忙于 75% 的读取和仅 25% 的写入
(注意,我相信 MongoDB 是 mmapped DB。有人告诉我在 AIO 模式下尝试 MongoDB,但我没有找到如何设置它,并且在另一台运行 MySQL InnoDB 的服务器上,我意识到 ZFSonLinux 无论如何都不支持 AIO。)
我的服务器是 CentOS 6.5 内核 2.6.32-431.5.1.el6.x86_64。spl-0.6.2-1.el6.x86_64 zfs-0.6.2-1.el6.x86_64
#PROD 13:44:55 root@rum-mongo-backup-1:~: zfs list
NAME USED AVAIL REFER MOUNTPOINT
zfs 216G 1.56T …Run Code Online (Sandbox Code Playgroud) 我们正在使用 MongoDB 副本集来共享 Web 场中的会话和其他(可能敏感的)数据。
我们存储的所有数据都使用 TTL 索引在相对较短的时间段(例如一小时)后使文档过期,部分原因是出于安全原因。
但是,我突然想到,即使从 MongoDB 集合中删除数据,用于复制的 oplog 仍将包含所有创建(然后删除)的文档;然后可以轻松地从 oplog 中读取所有过期的数据。
根据分配给 oplog 的大小,其中的数据可能很旧。
我的问题是,这里的最佳实践是什么?除了大幅减少 oplog 的大小,我们还能做些什么来防止旧数据被访问?
我有一个 MongoDB 副本集,其辅助节点不会超过 STARTUP 状态。数据库很大,但他们现在应该已经转移到 STARTUP2。正确的端口是打开的,因为我可以从主连接到辅助连接,反之亦然。
我正在尝试在 MongoDB 3.04 版中创建副本集。我遵循本教程并在尝试使用主服务器添加节点时遇到下一个错误:
vacrep:PRIMARY> rs.add('server address here')
{
"ok" : 0,
"errmsg" : "Quorum check failed because not enough voting nodes responded;
required 2 but only the following 1 voting nodes responded: PRIMARYSERVER:27017;
the following nodes did not respond affirmatively: 'server address here':27017
failed with Missing credentials for authenticating as internal user",
"code" : 74
}
Run Code Online (Sandbox Code Playgroud)
这是到目前为止所做的:
我发现有关此错误的线程很少,但在其中任何一个中都找不到解决方案。我该如何解决这个问题?
我想从社区中获得关于为什么 MongoDB 的键/值会或不会是 etcd 或其他专门构建的键/值存储系统(consol、zookeeper 等)的合适替代品的一般想法。
我必须使用 X.509 证书启用内部身份验证来启动我自己的副本集,但我失败了。欢迎任何建议。
Debian 8.2 x64 上的 MongoDB 3.2 x64。
这是 MongoDB 大学课程“M310:MongoDB 安全性”中的一个问题。
一位导师:
您可以使用身份验证选项启动您的服务器成员,然后使用 rs.initiate,然后创建您的用户。
我有这个文件夹结构:
~
`-- shared
`-- certs
|-- ca.pem
|-- client.pem
`-- server.pem
Run Code Online (Sandbox Code Playgroud)
我创建了这个 bash 脚本来设置我的副本集:
#!/bin/bash
course="M310"
exercise="HW-1.3"
workingDir="$HOME/${course}-${exercise}"
dbDir="$workingDir/db"
logName="mongodb.log"
ports=(31130 31131 31132)
replSetName="rs1"
host=`hostname -f`
initiateStr="rs.initiate({
_id: '$replSetName',
version: 1,
members: [
{ _id: 0, host: '$host:${ports[0]}' },
{ _id: 1, host: '$host:${ports[1]}' },
{ _id: 2, host: '$host:${ports[2]}' }
]
})"
# create working folder
mkdir -p "$workingDir/"{r0,r1,r2}
# launch …Run Code Online (Sandbox Code Playgroud) mongodb ×10
replication ×2
apt ×1
centos ×1
consul ×1
etcd ×1
linux ×1
log-rotation ×1
logging ×1
replica-set ×1
security ×1
top ×1
ubuntu ×1
x509 ×1
zfs ×1
zfsonlinux ×1
zookeeper ×1