当前位置:数据库 > mongodb >>

实战MongoDB-Replication之Master-Slave

实战MongoDB
 
Replica Set
 
 
 
MongoDB支持不同服务之间的异步的数据复制,来实现failover(故障转移,故障切换,故障恢复)and redundancy(数据冗余)。
 
同一时间,只有一个服务节点(primary或者master)支持写入。
 
MongoDB支持两种复制的模式:
 
Master/Slave,主从复制,角色包括master和slave。
Replica Set,复制集复制,角色包括primary和secondary。
 
 
介绍Master/Slave的官方地址:
 
http://www.mongodb.org/display/DOCS/Master+Slave
 
介绍Replica Set的官方地址:
 
http://www.mongodb.org/display/DOCS/Replica+Sets
 
 
 
今天实战的是master-slave,也就是主从复制。
 
首先使用mongod启动服务,关于启动的参数可以从http://www.mongodb.org/display/DOCS/Command+Line+Parameters页面找到相关的介绍。
 
其中关于主从复制的参数常用的是下面几个:
 
--master,指明当前服务是主。
 
--slave,指明当前服务是从。
 
--source,指明主服务的地址,格式为server:port。
 
--only <db>,指明当前从只复制主的指定数据库,数据库名称用db表明。
 
 
 
启动服务可以从命令行一个一个参数的指定,也可以将参数存放在一个文件中,然后启动的时候指定这个文件为服务的配置文件。后见的方法便于管理和维护,推荐使用。
 
 
 
首先配置主服务。
 
port=30000 ddbpath=d:\mongodb\master1 directoryperdb=true logpath=d:\mongodb\master1\log.log logappend=true master=true bind_ip=192.168.0.111 配置的参数如上所示,将上面的参数拷贝到一个文件中,起名【master1.conf】,然后使用下面的命令启动主服务。
 
 
 
d:\mongodb\bin\mongod --config=d:\mongodb\master1\master1.conf 上面是windows里面启动的命令。
 
如果是ubuntu中使用,假设conf文件存放在/home/andyshi/master1/目录下,将conf文件内容修改如下。
 
 
 
port=30000 dbpath=/home/andyshi/master1 directoryperdb=true logpath=/home/andyshi/master1/log.log logappend=true master=true bind_ip=192.168.0.111 使用下面的命令启动主服务。
 
 
 
mongod --conf=/home/andyshi/master1/master1.conf 大家注意到了,主要区别就是目录的地方,注意一下就可以了。
 
接下来就可以使用mongo这个客户端测试我们配置的结果了,或者使用python+pymongo也可以测试,顺便熟悉一下python+pymongo的使用。
 
我们的客户端测试环境使用ubuntu+python2.7+pymongo2.1。
 
在终端中输入
 
 
 
mongo 192.168.0.111:30000 指定IP(或者是名称)和端口号,由于要进行写入,需要连入主服务。尝试写入下面的数据。
 
 
 
//切换到test数据库use test //插入数据db.book.insert({'author':'shiwenbin'}) //查看插入是否成功db.test.find() 插入成功之后,这时候我们连上其中一个从服务,看看是否存在同样的数据。
 
 
 
mongo 192.168.0.111:30001  use test show collections db.book.find() 如果没有问题,会发现30001这个从服务中同样的位置也存在同样的数据,说明复制成功,配置没有问题。
 
建立主从关系之后,在主服务的local数据库中会有一个slaves集合,存放的就是当前主服务的所有从服务。
 
相应的,在从服务的local数据库中会有一个sources集合,存放的是当前slave的master信息,也就是配置文件中的source参数指定的信息。
 
查看集合可以先使用
 
 
 
use local use命令切换到local数据库,然后使用
 
 
 
show collections show命令查看local数据库的所有集合。
 
 
 
诊断功能
 
在master上使用
 
 
 
db.printReplicationInfo() 可以打印出第一次同步事件的时间,最后一次的同步事件时间,和当前的时间。
 
在slave上使用
 
 
 
db.printSalveReplicationInfo() 可以打印出master的地址和上一次同步的时间。
 
 
 
安全
 
如果启动mongod服务的时候,指定了需要安全验证(使用auth)参数,那么就需要在master和slave的local数据库中都添加同样的用户。
 
 
 
use local db.addUser('user1','123.com') addUser命令有三个参数,第一个登陆账号,第二个是密码,第三个是是否只读,是可选参数,默认值是false。也就是说不指定readonly参数的话,添加的用户是具有写权限的,通过指定readonly=true添加的用户是只读用户。
 
利用master-slave可以实现读写分离,写走master,读走slave。但是有一点遗憾就是,如果master挂了,就不能进行写入操作了,只能从slave读取数据。这时候需要手动的停掉一个slave,然后修改启动参数,启动为master,同时需要更新其他slave指向这个新的master。
 
本文出自 “软件设计开发” 博客
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,