我在服务器上运行了一个linux实例(即没有虚拟化)。我有一个正在运行的mongod实例。转向生产我想实现副本集。我读过的所有内容都谈到了在多台机器上运行mongod。我知道它可能不是最佳实践,但是可以运行同一台机器的副本集。该机器还有两个硬盘。我希望主数据库位于第一个HD上,副本设置在第二个硬盘上。这种设置可行吗?
答案 0 :(得分:1)
是的,可以在一台机器上设置和运行副本,这就是我进行测试的方式:
sudo systemctl stop mongod
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>
mongo --port 27017
>rs.initiate()
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)
是的,有可能。
sudo nano mongod.sh
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 &
允许脚本执行:
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 }
现在,使用您的连接字符串进行测试。
连接字符串
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