单机MongoDB副本集

joh*_*y B 5 mongodb

我有一个在服务器上运行的 Linux 实例(即没有虚拟化)。我有一个mongod正在运行的实例。转向生产我想实现副本集。我读过的所有内容都是关于mongod在多台机器上运行的。

我知道这可能不是最佳实践,但是是否可以运行同一台机器的副本集。此外,该机器有两个硬盘驱动器。我希望主数据库位于第一个 HD 上,副本集位于第二个硬盘驱动器上。

这个设置可以吗?

Jas*_*ung 6

这是我在 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/mongod_repl.service
Run Code Online (Sandbox Code Playgroud)

如果找不到 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
Run Code Online (Sandbox Code Playgroud)

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

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

sudo systemctl start mongod_repl
sudo systemctl status mongod_repl
Run Code Online (Sandbox Code Playgroud)

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

sudo tail -n100 /var/log/mongodb/mongod_repl.log
sudo journalctl -n100 -u mongod_repl
Run Code Online (Sandbox Code Playgroud)

(您可以-f在这两行中添加一个来尾部日志)

登录 mongo --port 27018

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

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

添加这个:

replication:
   replSetName: rs0
Run Code Online (Sandbox Code Playgroud)

重启MongoDB sudo systemctl restart mongod

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


Pri*_*ela 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 &
Run Code Online (Sandbox Code Playgroud)
  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 }
Run Code Online (Sandbox Code Playgroud)

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

连接字符串

mongodb://<YOUR_IP>:27017,<YOUR_IP>:27018,<YOUR_IP>:27019/<DB>?replicaSet=rs0&readPreference=secondary
Run Code Online (Sandbox Code Playgroud)

注意:如果您在本地系统中进行测试,则--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
Run Code Online (Sandbox Code Playgroud)