在单台机器上设置mongoDB副本

时间:2017-03-07 09:28:25

标签: mongodb

我在服务器上运行了一个linux实例(即没有虚拟化)。我有一个正在运行的mongod实例。转向生产我想实现副本集。我读过的所有内容都谈到了在多台机器上运行mongod。我知道它可能不是最佳实践,但是可以运行同一台机器的副本集。该机器还有两个硬盘。我希望主数据库位于第一个HD上,副本设置在第二个硬盘上。这种设置可行吗?

3 个答案:

答案 0 :(得分:1)

是的,可以在一台机器上设置和运行副本,这就是我进行测试的方式:

  1. 按照 the official instructions 在您的计算机上安装 mongodb-org 并确保它正常启动。
  2. 然后停止实例进程:sudo systemctl stop mongod
  3. 您现在可以按照 link 使用 --replSet 选项启动一个新实例。此外,为了让它在后台运行,您可以使用 --fork 和 --logpath 创建子进程:
    mongod --fork --port 27017 --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongo_0.log --replSet rs0 --bind_ip localhost,<Your machine's IP address>
    
  4. 然后连接到实例并在 Mongo shell 中启动副本集:
    mongo --port 27017
    >rs.initiate()
    
  5. 如果您想停止该过程,请执行 ps aux | grep mongod 然后执行 kill -9 <pid>

答案 1 :(得分:0)

这是我在 Ubuntu 上的做法。我想在第二个实例中使用 systemd。

复制我们现有的 MongoDB 配置:

sudo cp /etc/mongod.conf /etc/mongod_repl.conf

sudo pico /etc/mongod_repl.conf

更改这些行:

storage:
  dbPath: /var/lib/mongodb_repl

systemLog:
  path: /var/log/mongodb/mongod_repl.log

net:
  port: 27018

replication:
  replSetName: rs0

创建目录和文件,并分配权限

sudo mkdir /var/lib/mongodb_repl
sudo chown mongodb:mongodb /var/lib/mongodb_repl
sudo touch /var/log/mongodb/mongod_repl.log
sudo chown mongodb:mongodb /var/log/mongodb/mongod_repl.log

复制我们现有的启动文件:

sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/mongod_repl.service

如果找不到 mongod.service,请sudo systemctl status mongod。它看起来像:

已加载:已加载(/lib/systemd/system/mongod.service;已禁用;供应商预设:已启用)

sudo pico /etc/systemd/system/mongod_repl.service

更改这些行:

ExecStart=/usr/bin/mongod --config /etc/mongod_repl.conf
PIDFile=/var/run/mongodb/mongod_repl.pid

让 systemctl 知道我们做了一些改变: sudo systemctl daemon-reload

尝试启动我们的第二个服务器:

sudo systemctl start mongod_repl
sudo systemctl status mongod_repl

如果它没有运行,请查看日志:

sudo tail -n100 /var/log/mongodb/mongod_repl.log
sudo journalctl -n100 -u mongod_repl

(您可以向其中任何一行添加 -f 以拖尾日志)

登录 mongo --port 27018

太好了!现在您已经启动并运行了第二个 MongoDB 服务器。

配置您的原始服务器以使用相同的复制集: sudo pico /etc/mongod.conf

添加:

replication:
   replSetName: rs0

重启MongoDB sudo systemctl restart mongod

现在您应该能够在主服务器上完成 rs.initiate() 的过程,然后将 127.0.0.1:27018 添加为辅助服务器。

答案 2 :(得分:-1)

是的,有可能。

  1. 创建脚本:sudo nano mongod.sh
  2. 复制并粘贴:
sudo mongod --port 27017 --dbpath /var/lib/mongodb --replSet rs0 --bind_ip_all &
sudo mongod --port 27018 --dbpath /var/lib/mongodb2 --replSet rs0 --bind_ip_all &
sudo mongod --port 27019 --dbpath /var/lib/mongodb3 --replSet rs0 --bind_ip_all &
  1. 允许脚本执行: sudo chmod +x mongod.sh

  2. 运行脚本: ./mongod.sh

  3. 初始化主mongo服务器中的副本集:

$ mongo
> rs.initiate()

output
{
 "info2" : "no configuration specified. Using a default configuration for the set",
 "me" : "<<YOUR_IP>>:27017",
 "ok" : 1
}
rs0:SECONDARY> rs.add('<<YOUR_IP>>:27018')
{ "ok" : 1 }
rs0:PRIMARY> rs.add('<<YOUR_IP>>:27019')
{ "ok" : 1 }

现在,使用您的连接字符串进行测试。

连接字符串

mongodb://<YOUR_IP>:27017,<YOUR_IP>:27018,<YOUR_IP>:27019/<DB>?replicaSet=rs0&readPreference=secondary

注意:如果要在本地系统上进行测试,则出于安全原因,请删除--bind_ip_all选项。

选项

--port: Specify port
--dbpath: Path where the mongod instance stores its data
--replSet: Replica set name
--bind_ip_all: Allow remote connections