学习MongoDB(四)——Master/Slave模式

来源:互联网 发布:安卓系统刷windows系统 编辑:程序博客网 时间:2024/05/16 09:14

Master和Slave数据库做到数据同步,在Master节点上能进行任何数据操作,而Slave节点只能读取从Master节点同步的数据,不能进行数据插入等操作。

官方的配置说明:http://www.mongodb.org/display/DOCS/Master+Slave

测试环境:两台机器,192.168.1.193和192.168.1.192,两太电脑都是Mac系统。192.168.1.193上的MongoDB作为Master,192.168.1.192作为Slave。

Master机器上启动数据库:

Text代码  收藏代码
  1. mongod --dbpath=/mongodata/masterdb --master --oplogSize 64 --port 5566  

--master:以master模式启动数据库。

--oplogSize:指定master上用于存放更改的数据量,如果不指定,在32位机上最少为50M,在64位机上最少为 1G,最大为磁盘空间的5%。

Slave机器上启动数据库:

Text代码  收藏代码
  1. mongod --slave --source 192.168.1.193:5566 --dbpath=/mongodata/slavedb --port 5567 --slavedelay 10 --only test --autoresync  

--slave:以从服务器方式启动
--autoresync:自动重新sync,因为该操作会copy 主服务器上的所有document,比较耗时,在10分钟内最多只会进行一次。
--source:主服务器地址

--only:仅限于同步指定数据库(下面示例为test库)
--slavedelay:同步延时,复制检测的间隔

登陆Master数据库:

Text代码  收藏代码
  1. mongo 192.168.1.193:5566  
  2. > use test   
  3. > db.col.save({a:'another',b:'yst'})  
  4. > db.col.find()   
  5. "_id" : ObjectId("5066b52ecd2a0101aca559f8"), "a" : "another""b" : "yst" }  

登陆Slave数据库:

Text代码  收藏代码
  1. mongo 192.168.1.192:5567  
  2. > use test   
  3. > db.col.save({a:'bu',b:'yst2'})  
  4. not master  
  5. > db.col.find()   
  6. "_id" : ObjectId("5066b52ecd2a0101aca559f8"), "a" : "another""b" : "yst" }  

在Slave只能进行数据读取,save时会提示not master 。可以看到,在Master上save的数据,在slave中可以查询到了。

再来看看用安全认证模式启动Master和Slave的情况:

启动数据库时添加--auth参数就可以了。Master机器:

Text代码  收藏代码
  1. mongod --dbpath=/mongodata/masterdb --master --oplogSize 64 --port 5566 --auth  

 Slave机器:

Text代码  收藏代码
  1. mongod --slave --source 192.168.1.193:5566 --dbpath=/mongodata/slavedb --port 5567 --slavedelay 10 --only test --autoresync --auth  

怎么添加用户呢,官方文档里面已经说的很清除了,向Master和Slave的local数据库中都添加一样的用户

Master机器:

Text代码  收藏代码
  1. mongo 192.168.1.193:5566/admin -u masteradmin -p masterpwd  
  2. > use local  
  3. > db.addUser("repl","123456")  

Slave机器:

Text代码  收藏代码
  1. mongo 192.168.1.192:5567/admin -u slaveadmin -p slavepwd  
  2. > use local  
  3. > db.addUser("repl","123456")  

好了,Master和Slave添加完用户之后,都已授权的安全模式启动数据库,"repl“这个用户登陆Master就像amdin用户一样,能进行各种操作了。"repl”登陆Slave同样不能进行任何更改数据的操作,只能读取。 

登陆Master:

Text代码  收藏代码
  1. mongo 192.168.1.193:5566/local -u repl  -p 123456  
  2. > use test  
  3. switched to db test  
  4. > db.foo.find()   
  5. "_id" : ObjectId("5066b52ecd2a0101aca559f8"), "a" : "another""b" : "yst" }  
  6. > db.foo.save({a:'you',b:'va2'})   
  7. > use newdb  
  8. switched to db newdb   
  9. > db.food.save({y:'kk'})   
  10. > db.food.remove()  
  11. > db.food.find()  

"repl”和admin用户差不多,不仅对test数据库操作,还能操作其他不是和Slave共享的数据库。

登陆Slave:

Text代码  收藏代码
  1. mongo 192.168.1.192:5567/local -u repl  -p 123456   
  2. > use test  
  3. switched to db test  
  4. > db.foo.find()   
  5. "_id" : ObjectId("5066b52ecd2a0101aca559f8"), "a" : "another""b" : "yst" }  
  6. "_id" : ObjectId("5066ce3c297ef262708bdf4d"), "a" : "you""b" : "va2" }  
  7. > db.foo.save({a:'houhou',b:'us'})  
  8. not master  

repl登陆Slave只能对test数据库进行查询操作。 

0 0
原创粉丝点击