设为首页 收藏本站
查看: 1365|回复: 0

[经验分享] 实战MongoDB-Replication之Master-Slave

[复制链接]

尚未签到

发表于 2018-10-28 07:52:33 | 显示全部楼层 |阅读模式
  实战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表明。
  启动服务可以从命令行一个一个参数的指定,也可以将参数存放在一个文件中,然后启动的时候指定这个文件为服务的配置文件。后见的方法便于管理和维护,推荐使用。
  首先配置主服务。
  


  • 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。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627295-1-1.html 上篇帖子: mongodb mongo csharp driver 源码分析 下篇帖子: 实战MongoDB-Replication之Replica Set
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表