我有一个在服务器上运行的 Linux 实例(即没有虚拟化)。我有一个mongod正在运行的实例。转向生产我想实现副本集。我读过的所有内容都是关于mongod在多台机器上运行的。
我知道这可能不是最佳实践,但是是否可以运行同一台机器的副本集。此外,该机器有两个硬盘驱动器。我希望主数据库位于第一个 HD 上,副本集位于第二个硬盘驱动器上。
这个设置可以吗?
这是我在 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为辅助数据库。
对的,这是可能的。
sudo nano mongod.shsudo 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)
允许脚本执行:
sudo chmod +x mongod.sh
运行脚本:
./mongod.sh
在主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出于安全原因删除选项。
Run Code Online (Sandbox Code Playgroud)--port: Specify port --dbpath: Path where the mongod instance stores its data --replSet: Replica set name --bind_ip_all: Allow remote connections