嗨,我已经为MongoDB配置了copySet。如果我运行命令:
sudo mongod --replSet "rs0"
Run Code Online (Sandbox Code Playgroud)
一切正常,三个副本正常工作,但是如果我运行命令:
sudo mongod --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)
它不起作用,外壳不显示任何内容,并且如果我检查运行mongod的进程未与副本集一起运行。
这是我的mongod.conf:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
# bindIp: 127.0.0.1
#processManagement:
#security:
#operationProfiling:
replication:
replSetName: "res0"
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
Run Code Online (Sandbox Code Playgroud)
这是日志文件:
2016-04-28T15:34:30.079+0000 I CONTROL …Run Code Online (Sandbox Code Playgroud) 当我停止副本集的节点并再次启动它们时,主节点进入"恢复"状态.
我创建了一个副本集,未经授权运行.为了使用授权,我添加了用户"db.createUser(...)",并在配置文件中启用了授权:
security:
authorization: "enabled"
Run Code Online (Sandbox Code Playgroud)
在停止副本集(甚至重新启动集群而不添加安全性参数)之前,rs.status()显示:
{
"set" : "REPLICASET",
"date" : ISODate("2016-09-08T09:57:50.335Z"),
"myState" : 1,
"term" : NumberLong(7),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "192.168.1.167:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 301,
"optime" : {
"ts" : Timestamp(1473328390, 2),
"t" : NumberLong(7)
},
"optimeDate" : ISODate("2016-09-08T09:53:10Z"),
"electionTime" : Timestamp(1473328390, 1),
"electionDate" : ISODate("2016-09-08T09:53:10Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.1.168:27017",
"health" …Run Code Online (Sandbox Code Playgroud) 今天早上,我将我更新的Meteor项目部署到Heroku上.
我正在升级1.1.0.3到1.4.1.1.
使用Meteor Buildpack Horse一切安装正确,但应用程序错误输出错误;
MongoError:种子列表不包含mongos代理,replicaset连接需要在URI或options对象中提供参数replicaSet,mongodb:// server:port/db?replicaSet = name
我MONGO_URL被mongodb://u:p@url1:port,url2:port/db改成了;
mongodb://u:p@url1:port,url2:port/db?replicaSet=set-name
如果我使用replicaSet参数出错,我会收到此错误;
MongoError:在replicaset中找不到主要内容
这似乎是明智的,因为replicaset不存在,但是当我把正确的值放入时,我再次得到原始错误,说种子列表不包含代理.
我的副本集名称中有一个破折号,我不知道这是否相关.
我尝试使用在Mongo客户端中抛出此错误的URL,它允许我连接到实例,所以我知道所有细节都是正确的.
我也试过转义replicaSet,所以?replicaSet=set\-name这给了我MongoError: no primary found in replicaset错误.
我和MongoDB提供商签了一张门票,但我怀疑这是Meteor/me的问题!
在MongoDB的副本集群集中,当我的主要忙于提供另一个请求时,如何确保为用户提供快速响应?
我是否需要使用负载均衡器,或者mongodb本身将查询路由到可用的辅助节点?
谢谢
设置:具有 5 个节点的副本集,版本 3.4.5。
尝试使用 rs.stepDown(60, 30) 切换 PRIMARY 但始终出现错误:
rs0:PRIMARY> rs.stepDown(60, 30)
{
"ok" : 0,
"errmsg" : "No electable secondaries caught up as of 2017-07-11T00:21:11.205+0000. Please use {force: true} to force node to step down.",
"code" : 50,
"codeName" : "ExceededTimeLimit"
}
Run Code Online (Sandbox Code Playgroud)
但是,在并行终端中运行的 rs.printSlaveReplicationInfo() 确认所有副本均已完全赶上:
rs0:PRIMARY> rs.printSlaveReplicationInfo()
source: X.X.X.X:27017
syncedTo: Tue Jul 11 2017 00:21:11 GMT+0000 (UTC)
0 secs (0 hrs) behind the primary
source: X.X.X.X:27017
syncedTo: Tue Jul 11 2017 00:21:11 GMT+0000 (UTC)
0 secs (0 hrs) …Run Code Online (Sandbox Code Playgroud) 使用最新的客户端库(pymongo 3.4、mongodb (nodejs) 2.2.27),我在通过复制连接到我的 mongodb 服务器时遇到问题。复制集配置包含服务器的内部 ip 或主机名。我收到以下错误:
pymongo.errors.ServerSelectionTimeoutError: mongodbdriver20151129-arbiter-1:27017: [Errno 8] nodename nor servname provided, or not known,mongodbdriver20151129-instance-1:27017: [Errno 8] nodename nor servname provided, or not known,mongodbdriver20151129-instance-2:27017: [Errno 8] nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)
或者
pymongo.errors.ServerSelectionTimeoutError: 10.0.0.5:27017: timed out,10.0.0.6:27017: timed out,10.0.0.4:27017: timed out
Run Code Online (Sandbox Code Playgroud)
我目前正在通过更改副本集配置来解决这个问题,以包含服务器的外部 ip,但我想这会减慢服务器间的通信速度。如何使用原始 rsconf 从外部位置连接到我的服务器?
[更新] 注意:我正在尝试连接到服务器的外部 IP,并且在使用 pymongo 2.8 或 mongodb (js) 2.1.4 时效果很好
[更新] 关注此聊天以获取更多详细信息/示例
我们需要释放一些 MongoDB 空间,并且我们确定了可以从集合中安全删除的超过 100Gb 的文档。
因此,我们将它们从具有以下设置的测试环境中删除:
完成后,我们发现磁盘上的空间仍然被使用,需要回收。我们找到了这篇文章,它对我们有帮助:运行完两者后
db.runCommand({repairDatabase: 1})
Run Code Online (Sandbox Code Playgroud)
和
db.runCommand({compact: collection-name })
Run Code Online (Sandbox Code Playgroud)
我们释放了 100Gb 以上。
然后我们继续生产,忘记了设置是不同的,因为我们有 1 个副本节点:
删除文档后,我们运行
db.runCommand({repairDatabase: 1})
Run Code Online (Sandbox Code Playgroud)
并收到OK消息(过了一会儿,10 分钟以上)。我们尝试跑步
db.runCommand({compact: collection-name })
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
不会在活动副本集主节点上运行紧凑型操作,因为这是一个缓慢的阻塞操作。用力:真实用力
所以我们跑
db.runCommand({compact: collection-name, force: true })
Run Code Online (Sandbox Code Playgroud)
并收到“确定”消息(几乎立即),但空间上的磁盘仍然被使用,它没有被释放。
我们寻找使用副本集运行repairDatabase和compact命令的解决方案,但建议的重点是避免停机,就好像这是唯一的问题一样。但是,我们可以安排停机时间,但我们的问题是命令无法按预期工作,因为空间实际上并未被回收。
我们做错了什么?
我有 2 个应用程序服务器,它们连接到一个副本集(主要、次要和仲裁者)。
我面临的问题是
[ 'MongoError: no primary found in replicaset',
' at ../server/node_modules/mongodb-core/lib/topologies/replset.js:524:28',
' at null.<anonymous> (../server/node_modules/mongodb-core/lib/topologies/replset.js:303:24)',
' at g (events.js:260:16)',
' at emitOne (events.js:77:13)',
' at emit (events.js:169:7)',
' at null.<anonymous> (../server/node_modules/mongodb-core/lib/topologies/server.js:326:21)',
' at emitOne (events.js:77:13)',
' at emit (events.js:169:7)',
' at null.<anonymous> (../server/node_modules/mongodb-core/lib/connection/pool.js:270:12)',
' at g (events.js:260:16)',
' at emitTwo (events.js:87:13)',
' at emit (events.js:172:7)',
' at Socket.<anonymous> (../server/node_modules/mongodb-core/lib/connection/connection.js:175:49)',
' at Socket.g (events.js:260:16)',
' at emitOne (events.js:77:13)',
' at Socket.emit (events.js:169:7)',
' at connectErrorNT (net.js:996:8)',
' at …Run Code Online (Sandbox Code Playgroud) 我们正在使用具有三个节点的 MongoDB 副本集。该数据库相当大 2+ 十亿条记录,在磁盘(WiredTiger MongoDB 引擎)上占用 700GB。大多数对文档执行插入(每天数百万次),然后读取和更新。
更换辅助成员上的磁盘后,数据文件夹为空,初始同步开始。通过查看日志,复制记录需要大约 7 个小时,然后构建索引需要 30 个小时,但这对于 oplog 来说太多了,无法包含同时插入/更新的所有记录:
2016-11-16T23:32:03.503+0100 E REPL [rsBackgroundSync] too stale to catch up -- entering maintenance mode
2016-11-16T23:32:03.503+0100 I REPL [rsBackgroundSync] our last optime : (term: 46, timestamp: Nov 15 10:03:15:8c)
2016-11-16T23:32:03.503+0100 I REPL [rsBackgroundSync] oldest available is (term: 46, timestamp: Nov 15 17:37:57:30)
2016-11-16T23:32:03.503+0100 I REPL [rsBackgroundSync] See http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember
Run Code Online (Sandbox Code Playgroud)
首先我们重新启动这个成员并开始重新同步:
2016-11-16T23:47:22.974+0100 I REPL [rsSync] initial sync pending
2016-11-16T23:47:22.974+0100 I REPL [ReplicationExecutor] syncing from: x3:27017
2016-11-16T23:47:23.219+0100 I REPL [rsSync] …Run Code Online (Sandbox Code Playgroud) 我将设置一个由主节点、从节点和仲裁节点组成的 mongodb 副本集。我想知道如果仲裁节点宕机会发生什么?也许有人有过这样的经历。
mongodb ×10
heroku ×1
large-data ×1
meteor ×1
pymongo ×1
replicaset ×1
replication ×1
ubuntu ×1
wiredtiger ×1