首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB :如何将独立的副本集转换为副本集

MongoDB :如何将独立的副本集转换为副本集
EN

Database Administration用户
提问于 2021-12-31 16:06:52
回答 5查看 5.6K关注 0票数 1

我对MongoDB很陌生,并花了几个小时寻找如何将我的mongo独立实例推广到一个副本中。我的实际环境是一个ubuntu服务器。

代码语言:javascript
复制
root@UMONGO1:/home/msc# lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal

在端口27017上本地运行独立的mongodb实例:

代码语言:javascript
复制
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:

我从这里导入了一个数据库,目标是再创建两个服务器并在它们上复制dbs。

请参阅文件:

将独立的副本集转换为副本集我对必须使用的两个参数--端口和-dbpath--感到困惑。如果我想提升我的实际实例,我应该使用现有的数据库路径和端口,对吗?但不管我在尝试什么都是失败。

使用另一个端口:

代码语言:javascript
复制
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"}}

使用新目录:

代码语言:javascript
复制
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“永远不会停止。

你能提供帮助,在哪一个是正确的配置和问题是?

* <#>EDIT :01/03/2022<*

现在,我可以使用以下方法来推广我的实例:

代码语言:javascript
复制
mongod --port 27017 --dbpath /var/lib/mongodb/ --replSet rs0

然后打开一个新的shell并发送

代码语言:javascript
复制
rs.initiate()

但是,为什么服务不会从这种新配置开始呢?

代码语言:javascript
复制
● 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'.

此外,如果重新启动服务器,则必须重复这些操作。是否有任何方法来修复配置并启动单神服务?

EN

回答 5

Database Administration用户

回答已采纳

发布于 2022-01-05 18:39:01

最后,经过几个小时的研究/测试,感谢这里的几个有用的答案,我开始更清楚地理解mongodb集群是如何工作的。完全忘记了Ubuntu,无论我尝试了什么服务都不会启动。

我有两个成员,MONGO2和MONGO3,运行mongo服务。

  • 第一步是修改每台机器的conf文件:

MONGO2

代码语言:javascript
复制
# network interfaces
net:
  port: 27017
  bindIp: 10.0.0.5,127.0.0.1,0.0.0.0
  
  #replication:
replication:
  replSetName: rs0

MONGO3:

代码语言:javascript
复制
# network interfaces
net:
  port: 27017
  bindIp: 10.0.0.6,127.0.0.1,0.0.0.0
  
  #replication:
replication:
  replSetName: rs0
  • 重新启动服务,这样更改将是有效的。
  • 停止服务器上的服务,谁将是主服务器(MONGO2)。
  • 提升服务器。

./mongod.exe -端口27017 -dbpath M:\db\data -复制集rs0 -绑定_ip_all

当出现此错误消息时:

代码语言:javascript
复制
{"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}}
  • 打开新的PS控制台并连接到mongodb ./mongo.exe --port 27017

然后是rs.initiate()

  • 关闭一切并启动芒果服务。
  • 将其他服务器添加到群集rs.add("MONGO3:27017");中。

结果

代码语言:javascript
复制
rs0:PRIMARY> rs.conf()
{
        "_id" : "rs0",
        "version" : 3,
        "term" : 4,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "MONGO2:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "secondaryDelaySecs" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "MONGO3:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "secondaryDelaySecs" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "protocolVersion" : NumberLong(1),
        "writeConcernMajorityJournalDefault" : true,
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : -1,
                "catchUpTakeoverDelayMillis" : 30000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("61d5799d9249ea1cc550e79d")
        }
}
票数 1
EN

Database Administration用户

发布于 2022-01-03 14:34:42

对于初学者来说,当MongoDB文档没有明确强调配置文件设置和命令行选项时,常常会感到困惑。

当您将MongoDB作为服务运行时,您必须像下面这样编辑配置文件/etc/mongod.conf

代码语言:javascript
复制
# mongod.conf

# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

# 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

### THIS ONE ### 
replication:
  replSetName: rs0
票数 3
EN

Database Administration用户

发布于 2022-01-01 10:25:33

如果您使用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/rs1 0、/var/lib/mongodb/rs1 1

但是,如果您使用多台机器构建副本集,那么

  1. 不能使用本地主机地址,需要绑定到网卡IP。
  2. 每个节点的端口可以是27017。
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/305514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档