编辑:没有错。 我是一个白痴。 以下设置是正确的。 我在窗口上设置了一个mongodb(3.4)的实例,像这样configuration: net: port: 27017 ssl: mode: preferSSL PEMKeyFile: C:\…\mongodb.pem CAFile: C:\…\mongodb.ca allowConnectionsWithoutCertificates: true 证书是为特定域和通配符子域颁发的CA签名证书。 然后,我可以使用具有以下连接string的简单C#程序从本地机器连接到数据库: mongodb://user:password@hostname?ssl=true 它工作正常。 客户端没有使用证书。 我已经摆弄了参数,它真的好像使用SSL连接: 如果我切换到mode:requireSSL并在连接string中设置ssl=false ,我无法连接,这是预期的 如果我连接到未包含在证书中的域,则The remote certificate is invalid according to the validation procedure.得到The remote certificate is invalid according to the validation procedure. ,这也是预料之中的 我在mongo日志中看到的唯一错误/警告是no SSL certificate provided by peer – 这是预期的; 客户端没有使用证书,这就是为什么我configuration了allowConnectionsWithoutCertificates: true 但是 […]
我正在寻找一种方法来configuration两个不同数据中心的MongoDB服务器,它们保持主动 – 主动configuration。 站点A是客户访问的正常生产环境,所有写入都在此处发送,但所有数据写入也都复制到站点B(备份)。 此外,站点B也应该能够接受任何写入并将其复制到站点A.在DR情况下,站点A不在,站点B将具有完整的数据集并立即切换(仅最有可能的DNS),并且没有什么需要通过应用程序来改变。 我已经做了相当多的search,我还没有find解决办法。 我发现的最接近的是分片群集,但是这需要设置多个分片,每个分片具有副本集合和纵横交错,其中每个副本集合都位于站点A和B之间。这也意味着正常写入在主数据中心位于其他数据中心的主Mongo实例被分割为遍历networking,速度相当慢。
我有一个生产MongoDB 2.4在日志中给这个错误: SocketException handling request, closing client connection: 9001 socket exception [SEND_ERROR] server [127.0.0.1:37934] 客户端的日志报告连接超时。 mongod –version reports v2.4.10(我在Debian jessie上,MongoDB是从jessie仓库安装的), net.ipv4.tcp_keepalive_time sysctl被设置为300,这是由于在Mongo日志中SocketException的推荐。 此外,当重新启动MongoDB和应用程序后直接触发数据库查询时,错误仍然存在,这对我来说,这是不是SERVER-5632(在上面的问题中提到)。 /proc/pid/limits报告除堆栈大小,核心文件大小,进程,locking的内存,挂起的信号,msgqueue大小,好的和实时的优先级以及打开的文件之外的所有内容都是无限的。 这最后一个特别是软限制1024和硬限制4096,这不是什么MongoDB文档推荐,但不应该是一个问题无论如何,因为ls /proc/pid/fd | wc -l ls /proc/pid/fd | wc -l只报告29个开放的fds。 free -g报告3 GB的可用内存,+/-缓冲区和caching。 重新启动整个服务器在短时间内似乎有所帮助,但是它又一次变得糟糕。 以下是日志中的一个片段: Wed Mar 1 20:14:17.466 [conn1] authenticate db: pumpio { authenticate: 1, user: "pump.io", nonce: "7ac439ffd4c01a6d", key: […]
我想知道是否有任何禁忌在同一台服务器上安assembly置实例和分片实例。 比如我们有两个分别有3个副本的分片(6个服务器),每个分支也有一个configuration服务器实例,用于相同的configuration副本。 谢谢。
我正在AWS EC2 m4.large实例上运行MongoDB(v3.4 Community Edition)。 我根据这个MongoDB教程安装它。 我没有修改任何MongoDBconfiguration。 我没有configuration任何副本集或碎片。 我有一个Jersey API,它使用org.mongodb.morphia(v1.3.2)Java Driver与MongoDB进行交互。 我已经使用SoapUI创build了一个负载testing,其中我调用了100个API,然后为MongoDB创build了100个写操作(每个写操作创build一个集合中的一个文档)。 我跑了24小时的testing。 最后,我看到我的networking服务器试图与Mongo服务器通信,但连接超时,主机CPU运行在100%。 我得出结论,MongoDB服务器窒息。 然后我尝试了这个基准testing ,仍然使用m4.large上的数据库。 在923.133秒内创build了50,000,000条logging,即每秒54,113条插入。 那快500多倍! 如果MongoDBperformance的如此出色,那么为什么在通过JAVA驱动程序时每秒插入100次呢? Java驱动程序很慢? 我的Java驱动程序使用错了吗? 我的EC2实例大小是否太低? 它会有助于添加复制(RAID和副本集)? 我是MongoDB主机新手,非常感谢您的帮助。 更新: 负载testingconfiguration: 客户端:SoapUI(v5.3),Web服务器:Tomcat 8,Java:v1.8,MongoDB:v3.4。 我在AWS Mumbai地区运行我所有的服务器。 我在相同的EC2实例(m4.large)上托pipeWeb Sever和MongoDB服务器,并且在Windows计算机上运行客户端(t2.micro)。 经过进一步调查,我认为瓶颈在我的代码中。 我使用Mongostat实用程序来查看mongodb的行为。 我发现,在一开始有两个连接。 一旦我开始我的负载testing,连接就跳转到102(连接数不会超过102,即使在每秒1000个请求的情况下,MongoDB也会在很长一段时间后closures它们)。 负载是每秒100个请求。 这是显示这种行为的gif。 我发现了一些类似的问题,但答案没有透露太多。 我已经考虑到了这些build议。 这里有一些样品, https://stackoverflow.com/questions/21580147/mongo-connection-leak-with-morphia https://stackoverflow.com/questions/31469656/spring-data-mongodb-not-closing-mongodb-connections Java代码: 创build连接:我使用MongoDBbuild议的应用程序使用一个连接。 实现单例模式。 public class DatabaseConnection { private static volatile MongoClient […]
我正在运行RESTHeart以实现对MongoDB实例的REST API访问,并且我需要拒绝会导致在MongoDB中执行任何服务器端Javascript的请求。 我不能彻底禁用此function( https://docs.mongodb.com/manual/core/server-side-javascript/#disable-server-side-execution-of-javascript ),因为我需要在别处,但我会就像阻止访问RESTHeart的用户使用它一样。 这是可能的,通过configuration更改? MongoDB用户访问控制? 我没有看到明显的select。
我login到一个次要的&使用pipe理员; db.shutdownServer(),然后我用“sudo shutdown”closures整个服务器。 在主服务器上运行rs.status()。 对于离线的辅助,我看到: "health" : 1, "state" : 2, "stateStr" : "SECONDARY", 我也看到lastHeartbeat更新,但lastHeartbeatRecv不更新。 如果会员脱机,我希望健康/状态字段会更改,但不会。 如何监控我的副本集成员以查看他们是否处于脱机状态?
我在Azure中运行小型Kubernetes集群,因此可以使用Azure提供的摘要(如存储等)。 在它上面,我有一个在其中包含一个pod和几个容器的文件中定义的Deployment对象:一个应用程序容器,mongodb容器和其他一些容器。 应用程序从其映像中运行,其中也包括所有的二进制文件,因此只需要有mongo数据库(在secon cntainer中)可访问。 MongoDB将数据存储在持久卷上。 现在让我们想象我需要更改应用程序容器的图像。 我更改了部署定义文件,并执行kubectl apply -f deplyment.yml ,我可以看到Kubernetes尝试实施更改。 但问题是,它试图运行新的pod而不是旧的pod,并优雅地将负载路由到它上面,但是新的pod不能运行,因为卷被安装在旧的pod中,并且在旧的容器closures之前无法挂载。 所以这是问题。 我无法理解如何不中断地进行这样的升级。 应用程序无法进行负载平衡,因此无法运行多个副本并逐一升级。 而且我也担心,如果我删除了部署(将尝试有效地删除所有连接到的部分),那么卷也可能被删除。 有什么好方法吗?
我想在Azure虚拟机上的Windows Server平台上托pipe一个R-shiny应用程序,这个R-Shiny应用程序将从MongoDB中检索数据。 至今: 我不能安装R-Shiny服务器,因为它不支持Windows平台 这是一个外部云。 所以,我不能运行应用程序,并通过“ip_address:port_number”来访问它。 (或者我可以吗?) 所以,我想知道是否有其他方法可以让我在Azure上使用MongoDB托pipe我的Shiny应用程序。 我也会考虑到安全。 我最终不希望其他人能够访问我的仪表板,但我自己或我允许的其他人。 任何build议将不胜感激。
我正在阅读Mongo文档的日志文件旋转,但它不起作用。 它只是把每一个东西都写到一个文件中,而不是在日文件中分割。 任何人都知道我在做什么错了? https://docs.mongodb.com/manual/reference/configuration-options/#systemLog.logRotate 这是我的MongoDB.conf systemLog: destination: file path: C:/Program Files/MongoDB/Server/3.4/bin/MongoDB.log logAppend: true logRotate: rename timeStampFormat: iso8601-local storage: dbPath: C:/Program Files/MongoDB/Server/3.4/bin/data journal: enabled: true