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

[经验分享] MongoDB副本集

[复制链接]

尚未签到

发表于 2015-7-7 10:25:22 | 显示全部楼层 |阅读模式
  在使用MongoDB的时候,为了保证数据的安全,就要考虑数据备份和故障恢复了;同时出于性能的考虑,能够进行读写分离肯定能提升数据库性能。
  所以,在这篇文章中进行副本集的介绍。副本集(Replica Set),就是有自动故障恢复能力的主从集群。
  副本集有一个主节点,同时有一个或多个备份节点。当主节点出现故障的时候,备份节点会通过投票的方式选择出一个新的备份节点。
  

副本集初始化
  下面通过一些具体的实践感受一下副本集。
  首先通过下面三个命令启动三个mongodb服务器。其中,"replSet"选项指定了副本集的名称。



mongod.exe --dbpath="c:\mongodb\db\node1" --port=11111 --replSet myReplSet --oplogSize=50
mongod.exe --dbpath="c:\mongodb\db\node2" --port=22222 --replSet myReplSet --oplogSize=50
mongod.exe --dbpath="c:\mongodb\db\node3" --port=33333 --replSet myReplSet --oplogSize=50
DSC0000.png
  通过服务器的输出可以看到,我们现在需要"rs.initiate()"来初始化副本集。
DSC0001.png
  下面我们就进行副本集的初始化工作,主要以下步骤:


  • 首先通过一个MongoDB shell执行"mongo –port=11111"连接到"port=11111"的服务器上
  • 然后定义配置信息"myReplSet_config"
  • 最后通过"rs.initiate(myReplSet)"初始化副本集
  在初始化命令完成后,可以通过"rs.status()"命令查看副本集的状态。
DSC0002.png
  在上面的输出中,有几个字段需要注意一下:


  • "health":这个表示该节点的状态是否正常
  • "state":这个字段表示该节点是什么类型的节点
  • "stateStr":表示当前同步的状态,RECOVERING表示正在同步数据;SECONDARY表示已经成功同步,可以正常使用
  现在,通过"Ctrl+c"命令来停止"port=11111"这个节点,然后打开一个新的cmd窗口连接到"port=22222"的服务器上。
  再次使用"rs.status()"命令查看副本集的状态。可以看到"port=11111"的"health"状态变成了0,同时"port=22222"的服务器变成了主节点。
  如果,我们再次启动"port=11111",那么它将成为一个备份节点,这里就不截图演示了。
DSC0003.png
  动态添加删除节点
  有些时候,会有需求加入新的节点,那么就可以使用下面的命令来动态添加删除节点



1 mongod.exe --dbpath="c:\mongodb\db\node4" --port=44444 --replSet myReplSet --oplogSize=50
2 rs.add("127.0.0.1:44444")
3 rs.status()
4 rs.remove("127.0.0.1:44444")
5 rs.status()
  

读写分离
  副本集不仅仅可以保证数据的安全,还可以通过读写分离来降低主节点的读数据压力。
  接着上面的例子,通过主节点插入一些数据。
DSC0004.png
  当我们想通过备份节点读取数据的时候,将得到以下错误,提示我们"slaveOk"属性是false。
  但是,通过"rs.slaveOk()"命令,就可以设置备份节点的读操作了。
DSC0005.png
  通过读写分离可以很大程度上建设主节点的读写压力,但是这种方式也有一些问题,备份节点的数据会相对滞后,所以读出的数据可能不是最新的。
  

总结
  通过这篇文章,大概了解了副本集的使用。通过使用副本集,可以使数据得到进一步的保护,通过读写分离也可以进行读写性能的优化。
  Ps:本文中所有的命令都可以参考以下链接
  http://files.iyunv.com/wilber2013/replicaSet.js

运维网声明 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-84039-1-1.html 上篇帖子: 第1章 Express MongoDB 搭建多人博客 下篇帖子: 一个简单的MongoDB操作类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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