我是 MongoDB 的新手,并且搜索了几个小时如何将我的 mongo 独立实例提升为副本集。我的实际环境是一台 ubuntu 服务器
root@UMONGO1:/home/msc# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
在端口 27017 上本地运行独立的 mongodb 实例:
root@UMONGO1:/var/lib# systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-01-01 15:46:52 CET; 10min ago
Docs: https://docs.mongodb.org/manual
Main PID: 964 (mongod)
Memory: 222.6M
CGroup: /system.slice/mongod.service
└─964 /usr/bin/mongod --config /etc/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:
# 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
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
我从这里导入了一个数据库目标是再创建两台服务器并在它们上面复制数据库。
参考文档:
将独立集转换为副本集我对必须使用的两个参数 --port 和 --dbpath 感到困惑。如果我想推广我的实际实例,我应该使用现有的数据库路径和端口,对吗?但无论我在尝试什么,它都是失败的。
使用另一个端口:
mongod --port 27017 --dbpath /var/lib/mongodb/ --replSet rs0
"ctx":"initandlisten","msg":"Error setting up listener","attr":{"error":{"code":9001,"codeName":"SocketException","errmsg":"Address already in use"}}}
mongod --port 27018 --dbpath /var/lib/mongodb/ --replSet rs0
BException in initAndListen, terminating","attr":{"error":"DBPathInUse: Unable to lock the lock file: /var/lib/mongodb/mongod.lock (Resource temporarily unavailable). Another mongod instance is already running on the /var/lib/mongodb/ directory"}}
使用新目录:
mongod --port 27017 --dbpath /media/msc/MONGO/rs/ --replSet rs0
"replication":{"replSet":"rs0"},"storage":{"dbPath":"/media/msc/MONGO/rs/"}}}}
{"t":{"$date":"2021-12-31T16:55:28.885+01:00"},"s":"E", "c":"CONTROL", "id":20568, "ctx":"initandlisten","msg":"Error setting up listener","attr":{"error":{"code":9001,"codeName":"SocketException","errmsg":"Address already in use"}}}
mongod --port 27018 --dbpath /media/msc/MONGO/rs/ --replSet rs0
{"t":{"$date":"2021-12-31T16:57:11.762+01:00"},"s":"I", "c":"-", "id":4939300, "ctx":"monitoring-keys-for-HMAC","msg":"Failed to refresh key cache","attr":{"error":"NotYetInitialized: Cannot use non-local read concern until replica set is finished initializing.","nextWakeupMillis":2000}}
而这种等待“nextWakeupMillis”永远不会停止。
您能否提供有关正确配置和问题所在的帮助?
******************编辑:2022 年 1 月 3 日******************
现在我可以使用以下方式推广我的实例:
mongod --port 27017 --dbpath /var/lib/mongodb/ --replSet rs0
然后打开一个新的shell并发送
rs.initiate()
但是为什么服务不会以这个新配置启动呢?
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2022-01-03 11:39:51 CET; 1min 12s ago
Docs: https://docs.mongodb.org/manual
Process: 904 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)
Main PID: 904 (code=exited, status=14)
janv. 03 11:39:35 UMONGO1 systemd[1]: Started MongoDB Database Server.
janv. 03 11:39:51 UMONGO1 systemd[1]: mongod.service: Main process exited, code=exited, status=14/n/a
janv. 03 11:39:51 UMONGO1 systemd[1]: mongod.service: Failed with result 'exit-code'.
此外,如果我重新启动服务器,我必须重复这些操作。有没有办法修复配置并启动 mongod 服务?
对于初学者来说,当 MongoDB 文档没有明确强调配置文件设置和命令行选项时,通常会感到困惑。
当您将 MongoDB 作为服务运行时,您必须
/etc/mongod.conf
像这样编辑配置文件如果您使用 localhost 127.0.0.1 地址并希望拥有副本集,那么所有(不同的)副本(mongoD 进程)必须存在于不同的端口并且具有不同的数据目录(storage.dbPath),因为它们位于同一台机器上。所以,rs0 使用 f.ex。27007,rs1 使用 f.ex。27017,rs2 使用 f.ex。27027 然后目录是 f.ex。/var/lib/mongodb/rs0, /var/lib/mongodb/rs1...
但是,如果您使用多台机器构建副本集,那么
似乎已经有一个 mongod 正在运行。
查看您的错误消息
那么你得到了
然后
文档中的步骤 1,2 说明了这一点
验证 mongod 是否正在使用它运行
所以登录mongo
并运行它来关闭它
然后,你应该能够开始它
因为端口 27017 应该可以免费使用
更新 2022-01-01 11:54 EST
我刚刚启动了一个 vagrant 实例并尝试了它
这里是流浪者
这是我部署 mongod 的方式
我怀疑 mongod.conf 文件干扰了您在文档中使用的命令。
建议:重命名conf文件
然后,使用我的命令或 MongoDB 文档中的命令部署 mongod
最后经过数小时的研究/测试,并感谢这里有几个有用的答案,我成功地构建了集群,并且我开始更清楚地了解 mongodb 集群是如何工作的。完全忘记了 Ubuntu,无论我尝试什么服务都无法启动。
我有两个成员, MONGO2 和 MONGO3 运行着 mongo 服务。
MONGO2
MONGO3:
当出现此错误消息时:
./mongo.exe --port 27017
然后
rs.initiate()
关闭一切并启动 mongo 服务。
将您的其他服务器添加到集群
rs.add("MONGO3:27017");
结果