MongoDB(四)-- 主从配置

一、前言

虽然MongoDB官方已经不建议使用主从模式了,但是 熟悉下 也是有用的,替代方案是采用副本集的模式。slave默认情况下是不支持读写的,但是master会把数据同步到slave,不支持客户端读写。客户端连接slave时用命令支持读:rs.slaveOk()。

二、主从配置

1.进入到 /usr/java 中,cd /usr/java

2.新建mongodbMaster-slave,mkdir mongodbMaster-slave

3.进入到 mongodbMaster-slave 文件夹中,新建 master 和 slave 文件夹,mkdir master slave

4.进入到 master 和 slave 中,新建 data 和 log 文件件,mkdir data log;进入到 data中,新建 db文件件,mkdir db

5.进入到 mongodbMaster-slave 中,配置 临时的环境变量,export PATH=/usr/java/mongodb/bin:$PATH

6.查看临时的环境变量是否配置成功:echo $PATH

7.执行 mongod --help ,查看帮助信息

  • --master:指定master节点;

  • --slave:指定slave节点;

  • --source :指向服务的端口。

8.将 mongodb 的配置文件 拷贝到 master 和 slave 中:


   
   
  1. cp mongodb.conf ../mongodbMaster-slave/master/mongodb.conf

  2. cp mongodb.conf ../mongodbMaster-slave/slave/mongodb.conf

9.修改 master中的 mongodb.conf ,vim mongodb.conf


   
   
  1. dbpath=/usr/java/mongodbMaster-slave/master/data/db

  2. logpath=/usr/java/mongodbMaster-slave/master/log/mongodb.log

  3. logappend=true

  4. fork=true

  5. bind_ip=192.168.80.128 # master IP

  6. port=27020 # master 端口

  7. master=true # 设置为master

  8. source=192.168.80.128:27021 # slave的IP 和 端口

同理修改 slave 中的mongodb.conf ,vim mongodb.conf


   
   
  1. dbpath=/usr/java/mongodbMaster-slave/slave/data/db

  2. logpath=/usr/java/mongodbMaster-slave/slave/log/mongodb.log

  3. logappend=true

  4. fork=true

  5. bind_ip=192.168.80.128 # slave IP

  6. port=27021 # slave 端口

  7. slave=true # 设置为 slave

  8. source=192.168.80.128:27020 # master的IP 和 端口

10.启动 master,进入到 master 文件夹中:

mongod --config mongodb.conf

11.启动slave,进入到 slave 文件夹中:

mongod --config mongodb.conf

12.验证主从是否配置成功

1)客户端连接 slave:

mongo --host 192.168.80.128 --port 27021

方法一:执行:db.printSlaveReplicationInfo() 查看 是否是从,source 指向的是 27020,即 master。

2)客户端连接 slave,通过 查看 local 数据库中的 表的信息 了解 对应的 master,我们 来看下 所有的 db,即 show dbs,此时,发现报错,如下:


   
   
  1. 2017-07-23T14:07:13.196-0700 E QUERY Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

  2. at Error (<anonymous>)

  3. at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)

  4. at shellHelper.show (src/mongo/shell/utils.js:630:33)

  5. at shellHelper (src/mongo/shell/utils.js:524:36)

  6. at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47

解决方法,执行 rs.slaveOK(),

进入到local 数据库,查看 所有的表:show collections,发现有一个 sources ,我们 查询 sources 表中的数据,db.sources.find():

查询结果:{ "_id" : ObjectId("59750d91828f18cb9f133ef2"), "host" : "192.168.80.128:27020", "source" : "main", "syncedTo" : Timestamp(1500844337, 1) },发现 host对应的是 master 的IP和端口,说明 主从配置成功。

3)通过 在 master 中 插入几条数据,然后 在 slave中 查看 的方法,来看 主从 是否配置成功。

在master中执行 如下,插入 一条数据:

在slave中 执行如下,查询数据:

可以看到 在 master 中 插入的数据,说明主从配置成功。

4)也可以 通过 db.isMaster() 查看,在master中执行:

在 slave中 执行:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值