Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单机上的MongoDB副本集_Mongodb - Fatal编程技术网

单机上的MongoDB副本集

单机上的MongoDB副本集,mongodb,Mongodb,我有一个在服务器上运行的Linux实例(即没有虚拟化)。我有一个运行的mongod实例。转到生产阶段,我希望实现副本集。我读到的所有内容都是关于在多台机器上运行mongod 我知道这可能不是最佳做法,但是否可以运行同一台机器的副本集。此外,机器有两个硬盘驱动器。我希望主数据库在第一个硬盘上,副本集在第二个硬盘上 这种设置可能吗?是的,可能 创建脚本:sudo nano mongod.sh 复制和粘贴: 允许脚本执行: sudo chmod+x mongod.sh 运行脚本: /mongod.sh

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

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

这种设置可能吗?

是的,可能

  • 创建脚本:
    sudo nano mongod.sh
  • 复制和粘贴:
  • 允许脚本执行:
    sudo chmod+x mongod.sh

  • 运行脚本:
    /mongod.sh

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


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

  • 按照以下步骤在您的计算机上安装mongodb org,并确保它启动正常
  • 然后停止实例进程:
    sudo systemctl stop mongod
  • 现在,您可以通过以下方式使用--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>
    
  • 如果您想停止进程,请执行
    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