单机上的MongoDB副本集
我有一个在服务器上运行的Linux实例(即没有虚拟化)。我有一个运行的单机上的MongoDB副本集,mongodb,Mongodb,我有一个在服务器上运行的Linux实例(即没有虚拟化)。我有一个运行的mongod实例。转到生产阶段,我希望实现副本集。我读到的所有内容都是关于在多台机器上运行mongod 我知道这可能不是最佳做法,但是否可以运行同一台机器的副本集。此外,机器有两个硬盘驱动器。我希望主数据库在第一个硬盘上,副本集在第二个硬盘上 这种设置可能吗?是的,可能 创建脚本:sudo nano mongod.sh 复制和粘贴: 允许脚本执行: sudo chmod+x mongod.sh 运行脚本: /mongod.sh
mongod
实例。转到生产阶段,我希望实现副本集。我读到的所有内容都是关于在多台机器上运行mongod
我知道这可能不是最佳做法,但是否可以运行同一台机器的副本集。此外,机器有两个硬盘驱动器。我希望主数据库在第一个硬盘上,副本集在第二个硬盘上
这种设置可能吗?是的,可能
sudo nano mongod.sh
sudo chmod+x mongod.sh
/mongod.sh
是的,可以在一台机器上设置并运行复制副本,这是我进行测试的方式:
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>
ps aux | grep mongod
,然后执行kill-9
下面是我如何在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
ExecStart=/usr/bin/mongod --config /etc/mongod_repl.conf
PIDFile=/var/run/mongodb/mongod_repl.pid
创建目录和文件,并分配权限
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
更改这些行:
storage:
dbPath: /var/lib/mongodb_repl
systemLog:
path: /var/log/mongodb/mongod_repl.log
net:
port: 27018
replication:
replSetName: rs0
ExecStart=/usr/bin/mongod --config /etc/mongod_repl.conf
PIDFile=/var/run/mongodb/mongod_repl.pid
让systemctl知道我们做了一些更改:
sudo systemctl后台程序重新加载
尝试启动第二台服务器:
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——端口27018
太好了!现在,第二台MongoDB服务器已经启动并运行
将原始服务器配置为使用相同的复制集:
sudo pico/etc/mongod.conf
添加以下内容:
replication:
replSetName: rs0
重启MongoDB
sudo systemctl重启mongod
现在,您应该能够在主服务器上完成rs.initiate()过程,然后添加
127.0.0.1:27018
作为辅助服务器。是的,这是可能的。只需在不同的端口上运行实例。对于开发来说,这是很常见的,并且有必要将其自动化。问题是为什么在生产中需要它?复制是有成本的,你将支付它而没有任何好处。嗨,Alex,我正在努力找出备份数据库文件的最佳方法:S我实际上只是在考虑安排一个cron作业,将数据库文件复制到第二个HD,但是我读到这可能会导致问题(在数据完整性方面)。我不介意错过mongo记忆中尚未编写的信息。只要数据库文件将加载。但我不确定会不会是这样?日志记录已启用,因此是否可以简单地执行“cp db1/mnt/hd2/d1”,或者是否需要先锁定db.fsyncLock()?在生产思维中锁定的问题是mongod将阻止写入,直到我复制并解锁。那么为什么不直接问这个问题呢?=)您参加聚会的时间太晚了,但我将尝试澄清我遇到的同一个问题—生产中的复制,大多数情况下只有在不同服务器上运行多个节点时才有用。拥有从属服务器的意义在于,如果主服务器(即主服务器)停机,它们可以代替主服务器工作。如果希望在同一台服务器上运行复制集(仅用于备份数据),请使用mongodump或任何其他备份方法。如果您打算在同一台服务器上的不同磁盘上运行不同的节点,您得不到多少好处,您只需要在磁盘出现故障时进行故障切换。。。
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
replication:
replSetName: rs0