设为首页 - 加入收藏 常州站长网 (http://www.52changzhou.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2019 平台 select 为啥
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Web架构之路:MongoDB集群及高可用实践

发布时间:2019-10-12 12:51 所属栏目:[优化] 来源:热爱技术君
导读:MongoDB集群有副本集及主从复制两种模式,不过主从模式在MongoDB 3.6已经彻底废弃,今天主要探讨副本集的搭建和使用,以及分片。 副本集介绍 副本集(Replica Set)即副本的集合,在MongoDB中通过先定义一个副本集合,然后将多个节点(副本)加入到这个集合中

MongoDB集群有副本集及主从复制两种模式,不过主从模式在MongoDB 3.6已经彻底废弃,今天主要探讨副本集的搭建和使用,以及分片。

Web架构之路:MongoDB集群及高可用实践

副本集介绍

副本集(Replica Set)即副本的集合,在MongoDB中通过先定义一个副本集合,然后将多个节点(副本)加入到这个集合中。简单来说就是集群中包含了多份数据,保证主节点挂掉,备节点能够继续提供数据服务,实现MongoDB的数据备份及高可用。

副本集具有以下特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

副本集搭建

条件有限,我们在单机上,通过三个不同的MongoD线程来搭副本集。

Web架构之路:MongoDB集群及高可用实践

主节点配置如下:

  1. #?指定数据库路径?
  2. dbpath=/usr/local/mongodb/data/db?
  3. #?使用追加的方式写日志?
  4. logpath=/usr/local/mongodb/log/mongodb.log?
  5. #?使用追加的方式写日志?
  6. logappend?=?true?
  7. #?绑定服务IP?
  8. bind_ip=127.0.0.1?
  9. #?服务器端口?
  10. port?=?27017?
  11. #?以守护进程的方式运行MongoDB,创建服务器进程?
  12. fork?=?true?
  13. #?PID?File?的完整路径?
  14. pidfilepath=/usr/local/mongodb/var/mongod.pid?
  15. #?不启用验证?
  16. noauth=true?
  17. #?最大同时连接数,默认2000?
  18. maxConns=2000?
  19. #?同步复制的日志大小设置,单位MB?
  20. oplogSize=10?
  21. #?副本集名称?
  22. replSet=rs0?

副本节点的配置和主节点的基本一致,需要修改一下数据库/日志/PID路径和端口号,副本集名称需一致:

  1. #?指定数据库路径?
  2. dbpath=/usr/local/mongodb/node/2/data/db?
  3. #?使用追加的方式写日志?
  4. logpath=/usr/local/mongodb/node/2/log/mongodb.log?
  5. #?使用追加的方式写日志?
  6. logappend?=?true?
  7. #?绑定服务IP?
  8. bind_ip=127.0.0.1?
  9. #?服务器端口?
  10. port?=?27018?
  11. #?以守护进程的方式运行MongoDB,创建服务器进程?
  12. fork?=?true?
  13. #?PID?File?的完整路径?
  14. pidfilepath=/usr/local/mongodb/var/mongod2.pid?
  15. #?不启用验证?
  16. noauth=true?
  17. #?最大同时连接数,默认2000?
  18. maxConns=2000?
  19. #?副本集?
  20. replSet=rs0?

依次启动三个mongod进程:

  1. gitlib@devops:/usr/local/mongodb$?ps?-aux?|?grep?mongod?
  2. root?14293?0.8?2.3?1588812?92700???Sl?08:06?0:01?bin/mongod?-f?mongod.conf?
  3. root?14652?3.5?2.2?1583180?89364???Sl?08:08?0:00?bin/mongod?-f?mongod2.conf?
  4. root?14723?6.4?2.2?1583180?89172???Sl?08:08?0:00?bin/mongod?-f?mongod3.conf?

在主节点中,先使用rs.initiate()方法进行副本集初始化操作,再使用rs.add()方法来添加副本集的成员:

  1. >?rs.initiate()?
  2. {?
  3. ????"info2"?:?"no?configuration?specified.?Using?a?default?configuration?for?the?set",?
  4. ????"me"?:?"127.0.0.1:27017",?
  5. ????"ok"?:?1,?
  6. ????"$clusterTime"?:?{?
  7. ????????"clusterTime"?:?Timestamp(1569457173,?1),?
  8. ????????"signature"?:?{?
  9. ????????????"hash"?:?BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),?
  10. ????????????"keyId"?:?NumberLong(0)?
  11. ????????}?
  12. ????},?
  13. ????"operationTime"?:?Timestamp(1569457173,?1)?
  14. }?
  15. rs0:OTHER>?rs.add('127.0.0.1:27018');?
  16. {?
  17. ????"ok"?:?1,?
  18. ????"$clusterTime"?:?{?
  19. ????????"clusterTime"?:?Timestamp(1569457214,?2),?
  20. ????????"signature"?:?{?
  21. ????????????"hash"?:?BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),?
  22. ????????????"keyId"?:?NumberLong(0)?
  23. ????????}?
  24. ????},?
  25. ????"operationTime"?:?Timestamp(1569457214,?2)?
  26. }?
  27. rs0:PRIMARY>?rs.add('127.0.0.1:27019');?
  28. {?
  29. ????"ok"?:?1,?
  30. ????"$clusterTime"?:?{?
  31. ????????"clusterTime"?:?Timestamp(1569457219,?1),?
  32. ????????"signature"?:?{?
  33. ????????????"hash"?:?BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),?
  34. ????????????"keyId"?:?NumberLong(0)?
  35. ????????}?
  36. ????},?
  37. ????"operationTime"?:?Timestamp(1569457219,?1)?
  38. }?
  39. rs0:PRIMARY>?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章