Articles of mongodb

在tcp模式下使用haproxy来代理mongo服务器导致mongo客户端在25%的时间内失败

我正在尝试在mongo服务器前面的tcp模式下使用haproxy。 在haproxy机器上,我有一个mongo客户端来testing。 从haproxy机器直接连接到mongo服务器时,它工作100% 当我使用haproxy从haproxy机器连接到mongo服务器时,大约有25%的时间无法协商正确的mongo连接。 Mongo客户端说recv():消息len 1347703880是太大了。 最大是48000000 这与mongo客户端或服务器似乎并不是问题,因为连接直接工作100%的时间。 场景中的服务器: 10.5.198.10 haproxy and mongo client for testing 10.5.20.20 mongo server running port 17010 版本信息/ HA代理机器和mongo客户端 OS: Debian Jessie SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux bluebrick@ip-10-5-198-10:~$ mongo –version MongoDB shell version: 2.4.10 root@ip-10-5-198-10:~/tests/pmongo# haproxy -vv HA-Proxy version 1.6.3 2015/12/25 Copyright 2000-2015 Willy Tarreau <[email protected]> Build options : […]

如何连接此Windows故障转移群集和MongoDB副本集? (里面的图)

如您所见,我的两个Windows Server故障转移群集(WSFC)节点每个都有三个networking接口,将它们连接到三个不同的networking: 公共networking 由WSFC节点组成的专用networking 由WSFC节点组成的专用networking和带有WSFC Quorum Witness File Share的机器 我计划的networkingconfiguration是否合理? 我有“正确的”数量的网卡和networking吗? 我在想第二个NIC /networking可能是不必要的。 我的两个MongoDB副本集节点也有三个networking接口 – 非常类似于以前的情况: 公共networking 由主要和辅助MongoDB副本集节点组成的专用networking 由主,副和仲裁者MongoDB副本集节点组成的专用networking 这个networkingconfiguration是否有意义? 我有“正确的”数量的网卡和networking吗? 我在想第二个NIC /networking可能是不必要的。 这是我正在考虑的更简单的版本: 更新:

对于MongoDB的副本集安装,rest = true是必须的吗?

我看到在互联网上有很多tutoirlbuild议添加rest参数 mongod –rest –replSet myset 如果我不使用它们,有没有副作用?

如何在Linux上调整mongoDB的系统设置?

试图在这里挤出很多的问题 – 请耐心等待。 尽pipeMongoDB手册页提供了一些关于系统设置的有用build议,如ulimit( http://docs.mongodb.org/manual/reference/ulimit/ )和其他生产因素( http://docs.mongodb.org/manual/pipe理/生产笔记/ ),他们似乎神秘沉默的东西,如虚拟内存和交换设置。 最接近的提示是“…操作系统的虚拟内存子系统pipe理MongoDB的内存…”( http://docs.mongodb.org/manual/faq/fundamentals/#does-mongodb-require-很多公羊 )。 运行同样的工作 – 在单个集合中的大约10,000,000个logging中的高写入和高读取 – 在我的4处理器,4GB RAM macbook和具有64GB RAM的8核ubuntu机箱上,我看到了在Linux盒子上显着的WORSE读取性能出厂设置,并可以听到磁盘不断旋转,表明高I / O和大概交换。 是的,盒子上还有其他的东西,但是有足够的可用RAM,磁盘空间等等。 此外,我没有看到有证据表明Mongo正在扩大,以利用所有可用的RAM,因为它被吹捧。 Linux机器的默认设置如下:vm.swappiness = 60 vm.dirty_background_ratio = 10 vm.dirty_ratio = 20 vm.dirty_expire_centisecs = 3000 vm.dirty_writeback_centisecs = 500 我对一些其他types的数据库(Oracle,MYSQL等)的文档和博客进行了一些猜测,并进行了实验,并进行了如下调整。 vm.swappiness = 10 vm.dirty_background_ratio = 5 vm.dirty_ratio = 5 vm.dirty_writeback_centisecs = 250 vm.dirty_expire_centisecs = 500 我看到一些读取时间有了明显的改善。 […]

MongoDB copyDatabase在dbOwner中失败

我有一个远程mongo数据库,我已经设置了一个特定的数据库和一个dbOwner权限的用户。 我可以用这个用户信息访问这个数据库,但我不能使用copyDatabase复制这个数据。 我读过查找访问权限是必需的,但不是所有者访问权限的一部分? 在文档( http://docs.mongodb.org/manual/reference/built-in-roles/ )中特别提到,拥有者拥有所有的pipe理员权限,pipe理员拥有发现权。 但是,当试图调用这个函数,我越来越 “errmsg”:“exception:nextSafe():{$ err:\”未经授权查询db1.system.users \“, 作为参考,这里是getUser返回的内容: db.getUser( 'MU1') {“_id”:“db1.mu1”,“user”:“mu1”,“db”:“db1”,“roles”:[{“role”:“dbOwner”,“db”:“db1”}] } 这怎么可能发生在db1的拥有者身上? 谢谢!

keepalived:第二个VRRP_Script似乎永远不会运行

我试图在3个mongodb盒子上实现keepalived,这个想法是,如果某个盒子上的mongod出现故障,或者由于某种原因我们需要将主节点移动到另一个系统,我们的应用程序就不需要重新configuration。 keepalived.conf非常简单,有两个VRRP_scripts,一个用来检查mongod是否正在运行,另一个是用来执行一个bash脚本,用来检查本地mongod实例是否是主节点。 keepalived.conf !Configuration File for keepalived # Global definitions global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtprelay.penton.com smtp_connect_timeout 30 } # Check to see if mongod is running vrrp_script chk_mongod { script "killall -0 mongod" # verify the pid exists interval 2 # check every 2 seconds # weight 2 # add […]

如何获得MongoDB服务器本地时间?

我使用身份validation运行MongoDB。 我想要一个非root客户端来获得服务器时间。 我认为最简单的就是使用serverStatus 。 但是默认的readWrite用户没有这样的权限。 我真的迷失在mongo安全模式中。 我尝试添加一个像这样的serverStatusangular色: db.createRole( { role: "serverStatus", privileges: [ { resource: { db: "admin", collection: ""}, actions: [ "serverStatus" ] } ], roles: [], writeConcern: { w: "majority" , wtimeout: 5000 } } ) 然后添加到用户: db.grantRolesToUser( "myuser", [ { role: "serverStatus", db: "admin" } ] ) 但试图得到serverStatus我得到: > db.serverStatus() { "ok" […]

当我拥有涉及的所有证书的所有权时,如何解密sslencryption的mongo线协议以进行检查?

我有一个标准的MongoDB SSL环境 ,使用RSA密钥将mongo有线协议用SSL / TLSencryption。 我有在MongoDB服务器和客户端通过tcpdump进行通信的数据包捕获。 我拥有涉及encryption的证书的所有权。 我抓住了握手的机会,DHE / ECDHE / PFS不在场。 如何解密现有数据包捕获中的信息来检查数据包的mongo-wire协议部分的内容?

MongoDB WiredTiger存储不使用两个CPU核心

如WiredTiger存储引擎描述中所述,由于文档级locking,它提供了更好的并发能力。 从这个职位 : WiredTiger采用现代化的多CPU架构进行扩展。 使用各种编程技术,如危险指针,无锁algorithm,快速锁存和消息传递,WiredTiger每个CPU核心执行更多的工作比替代引擎。 出于某种原因,我的用例似乎并没有从中受益。 我有一个数据库与许多并发写入(主要是更新),这种负载似乎无法克服每秒2000更新的限制。 这里是mongostat 10输出: insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time 3 780 1936 141 42 3|0 0.3 1.0 0 717.0M 289.0M 0|0 1|0 433k 6m 141 17:16:32 磁盘吞吐量不饱和, iostat -x 10输出: avg-cpu: %user %nice %system %iowait %steal […]

在特定的PHP版本上安装MongoDB扩展

我有一个Debiannetworking服务器,我在其上安装了ApacheConfig3的Apache / Mysql / PHP5。我手动安装了额外的PHP版本(PHP 7.0.5),以便在PHP 5上有一个网站,在PHP 7上有一个网站,一切正常。 (我使用下面的教程安装PHP 7: https : //www.howtoforge.com/tutorial/how-to-install-php-7-on-debian/ ) 现在我想安装新的MongoDB驱动程序(PHP 7友好),所以它适用于我的PHP 7网站(我得到了遗留的驱动程序在PHP 5上工作)。 为此,我使用pecl install mongodb并将extension=mongodb.so添加到PHP 7 ini文件中。 安装是好的,但是当我检查PHP 7的扩展状态,它告诉我扩展没有加载。 原因似乎是安装在PHP 5版本的MongoDB驱动程序,而不是PHP 7。 我怎么能告诉MongoDB驱动程序安装在PHP 7版本与PECL(或者也许另一种方式来安装它)?