尝试使用 homebrew 和 run-rs 在 Mac 上本地运行副本集

问题描述 投票:0回答:2

我用自制程序设置了 mongo。

$ brew services start mongodb-community
$ mongosh

我可以在 mongo compass 中看到我的数据库。

我想在副本集中运行此数据库。但我不知道怎么办。

我尝试使用 run-rs 包。但没有成功。

我安装了该软件包。

$ npm install run-rs -g

然后我跑了

run-rs,
但失败了:

$ run-rs --mongod
Purging database...
Running 'mongod' [ 27017, 27018, 27019 ]
Starting replica set...
Error: failed to start mongod with options [
  '--port=27017',
  '--dbpath=/Users/projectpath/backend/data/27017',
  '--bind_ip=localhost',
  '--replSet=rs'
]

于是,我停止了 MongoDB。

$ brew services stop mongodb-community

我又跑了

run-rs

$ run-rs --mongod
Purging database...
Running 'mongod' [ 27017, 27018, 27019 ]
Starting replica set...
Started replica set on "mongodb://localhost:27017,localhost:27018,localhost:27019?replicaSet=rs"
Connected to oplog
(node:28395) [MONGODB DRIVER] DeprecationWarning: collection.find option [oplogReplay] is deprecated and will be removed in a later version.
(Use `node --trace-deprecation ...` to show where the warning was created)

但这在我的项目目录中创建了一个包含许多文件的

data
文件夹。我不想在我的目录中出现一堆项目文件。这些文件是预期的吗?如果是这样,这些文件应该去哪里?如何将它们放入正确的目录?为什么它的行为不像我的其他 mongo 设置?

现在我之前在 mongo compass 中拥有的所有 DB 都消失了。如果我杀死所有 mongo 进程,我就可以回复他们

$ ps wuax | grep mongo

$ kill (pid number)

然后运行:

$ brew services start mongodb-community

但是我怎样才能让我的常规 mongo 社区使用副本集呢?为什么当我运行

run-rs
时我的 mongo DB 消失了?为什么
run-rs
在我的项目目录下放了很多文件?

我是否想念这是如何工作的?

更新

我尝试添加自制程序路径。

$ run-rs 5.0.6 --dbpath '/opt/homebrew/var/mongodb'

数据文件夹现在尚未添加到我的项目中。但第一张图片中显示的我的旧数据库不再在 Mongo Compass 中。现在,当我切换到

brew services start mongodb-community
时,我所有的开发数据库似乎都被删除了。

mongodb homebrew replicaset
2个回答
2
投票

似乎一旦您开始工作,它就会清除您的数据库数据,因此您似乎无法使用旧数据库数据运行副本集,而无需将其保存在某处并将其复制回来。看来你还必须关闭你的自制 mongo。我不太确定我在说什么,但这就是我让它发挥作用的方式。

我设置了

run-rs

并且必须重新播种我的开发数据库。

这是我设置本地副本集的方法:

已关闭
    run-rs
  1. :
    
    
  2. mongo-community
使用我的
    数据目录路径
  1. $ brew services stop mongodb-community
    
    )和我的mongo版本(run-rs)安装并运行
    '/opt/homebrew/var/mongodb'
    。当我运行
    5.0.6
    而不是
    run-rs --mongod
    时,Mongo Compass 给了我一个错误,即使两者的版本都是 5.0.6。
    
    
  2. run-rs 5.0.6
然后我运行我的种子文件并在 uri 处填充一个新数据库:
$ npm install run-rs -g $ run-rs 5.0.6 --dbpath '/opt/homebrew/var/mongodb' # if you don't want to purge the database add the flag --keep

确保将 

mongodb://127.0.0.1:27017/wtdev-local?replicaSet=rs

添加到您的 URI。

注意

我过去一直错误地运行

replicaSet=rs

或 mongo 的其他实例,然后在旧的仍在运行时尝试再次运行 mongo ,从而出现问题。我的终端会告诉我 mongo 已经在端口 27017 上运行。每当发生这种情况时,我都会找到 PID 并杀死所有 mongo PID。

run-rs



0
投票
https://www.mongodb.com/docs/manual/replication/#transactions

创建事务 我所做的大部分内容都来自实际的 MongoDB 文档!具体来说这个页面:

https://www.mongodb.com/docs/manual/tutorial/convert-standalone-to-replica-set

以下是我采取的步骤:

    安装 MongoDB:
  1. brew 安装

    [电子邮件受保护]

  2. 在 MongoDB 配置文件末尾添加以下两行:
  3. 复制: 复制集名称:rs0

  4. 在启动时初始化副本集。我通过在 /Users//Library/LaunchAgents 中创建一个 plist 文件来做到这一点。
  5. mymongo_start_replica.plist

$ ps wuax | grep mongo $ kill (pid number)

mymongo_start_replica.sh 脚本就是这样:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>hvb.start.mongodb</string> <key>ProgramArguments</key> <array> <string>/Users/me/mymongo_start_replica.sh</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> </dict> </plist>

就是这样!

备注:

截至 2024 年 4 月,Brew 将 MongoDB 配置文件放在这里:/opt/homebrew/etc/mongod.conf
  1. 您可能需要使 shell 脚本可执行:chmod +x mymongo_start_replica.sh
  2. 以通常的方式启动 MongoDB:brew services start mongodb-community
  3. 您可以在“设置/常规/登录项”中控制脚本是否运行。我的脚本在启动副本之前不必休眠/等待,但您的情况可能有所不同。
  4. 我认为必须有多个副本,但根据我上面提到的 Mongo 页面,事实并非如此。
© www.soinside.com 2019 - 2024. All rights reserved.