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

[经验分享] mongodb基础系列—副本集具体搭建以及解说

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-12-24 09:25:49 | 显示全部楼层 |阅读模式
   既然有了主从复制,为啥又出来个副本集?一个东西的出现,肯定存在一种东西被解救。所谓一物降一物O(∩_∩)O  上文中说道主从复制缺点—主服务器出现故障,从服务器是干瞪眼。这篇文章就要解说,主仆之间会有一个怎样的变化?
  
  仍然是一台电脑工作。步骤如下:
1.准备条件,模拟三个服务器,一个主primary,两个secondary(可以称副节点)

     可以新建目录如下:
     以三个节点为例:




  • 节点1:  
  • HOST:localhost:10001  
  • Log File:e:\mastersavle\logs\node1\logs.txt  
  • Data File:E:\mastersavle\dbs\node1  
  •   
  • 节点2:  
  • HOST:localhost:10002  
  • Log File:E:\mastersavle\logs\node2\logs.txt  
  • Data File:E:\mastersavle\dbs\node2  
  •   
  • 节点3:  
  • HOST:localhost:10003  
  • Log File:E:\mastersavle\logs\node3\logs.txt  
  • Data File:E:\mastersavle\dbs\node3  

  2.启动三个节点,观察启动后每个节点的日志文件启动节点1:



  • mongod --dbpath  E:\mastersavle\dbs\node1 --logpath E:\mastersavle\logs\node1\logs.txt --logappend --port   
  • 10001 --replSet itcast/localhost:10002  --master  

启动节点1中:replSet指定副本集名称,后面是可选参数。说明该副本集群中还有10002数据库。
SouthEast.jpg

我们看看log日志:
SouthEast.jpg

启动节点2:


  • mongod --dbpath E:\mastersavle\dbs\node2 --logpath  E:\mastersavle\logs\node2\logs.txt --logappend --port 10002 --replSet itcast/localhost:10001  

启动节点2中日志:
SouthEast.jpg

启动节点3:  


  • mongod --dbpath E:\mastersavle\dbs\node3 --logpath E:\mastersavle\logs\node3\logs.txt --logappend --port 10003 --replSet itcast/localhost:10001,localhost:10002  

其中启动节点3时,可以只指定副本集中的一个服务,或同时指定。副本集的一个特性为:自动检测,你仅指定单台服务器后,MongoDB会自动搜索并连接到同一副本集的其余的节点。
其中节点3中日志:

SouthEast.jpg

3.初始化节点:只初始化一次,随便登陆三个节点任何一个,但是必须进入admin数据库  节点2和节点3日志文件中已经告诉我们,replSet info you may need to run replSetInitiate,需要运行初始化函数。




  • db.runCommand({"replSetInitiate":{"_id":"itcast","members":[{"_id":1,"host":"localhost:10001","priority":3},{"_id":2,"host":"localhost:10002","priority":2},{"_id":3,"host":"localhost:10003","priority":1}]}});  

"_id":“itcast",  指副本集的名称
"members":[...]  副本集的服务器列表  每个列表有个
               "_id": 每个服务器的唯一id,  
              "host" 指定服务器的主机,
              “priority”设置优先级,默认优先级为1,可以是1-1000的数字,数字越大,优先级越高。

SouthEast.jpg

4.开启另一个窗口,测试谁是主服务器连接10001端口:

SouthEast.jpg

查看是否是主服务器:db.$cmd.findOne ( {ismaster: 1 } );
SouthEast.jpg

5.测试副本集特性,断开主节点,看副节点有何变化?直接把主节点服务断开,10001日志文件和10002日志,则会打印,连不上10001问题。
10002节点日志文件:

SouthEast.jpg

10003节点日志文件:
SouthEast.jpg

通过控制台发现:
SouthEast.jpg

6.测试几种情况,目前剩下10002(主)和10003(副),宕掉主,副会有啥变化继续宕掉10002,看看10003有啥变化?

SouthEast.jpg

SouthEast.jpg

集群中因为投票数不大于总数一半,所以10003是不会升级为主服务器的。
另一种测试,我们把10003起来后,目前是10002是主服务器,我们现在宕掉10003副节点,看效果:

SouthEast.jpg

SouthEast.jpg

7.副本集同步原理:如何保持主从节点数据一致性:上篇博客提到主从复制中,主节点记录在local数据库,来保持同步性。副本集其实也是类似的,主节点操作数据库状态的日志,记录在local.oplog.rs集合中,这样,备份节点通过读取日志,在自己数据库完完全全执行一遍。【不记录查询哈,同上篇】
local数据中集合中local.system.replset中没有任何配置信息,是记录节点初始化

SouthEast.jpg

local.oplog.rs集合记录主节点操作数据库状态日志:
SouthEast.jpg

8.总结从上文测试可以看出,副本集和主从复制的区别
副本集特性:1.没有固定的master主节点。2.故障自动恢复,继续工作。
没有固定的主节点,是因为一个主节点宕掉,集群中会elect投票,从副节点secondary中选举一个,升级为主节点。
总体而言,副本集就是具有故障自动恢复的主从复制。
其实主从复制,目前官网也也不怎么提倡,因为主从复制只能起到备份作用,没有达到自动恢复效果。
ps:主节点其实就是活跃点,副节点、从节点就是备份节点。



运维网声明 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-12206-1-1.html 上篇帖子: MongoDB:mongodb的索引操作 下篇帖子: MongoDB:详细解释mongodb的高级操作,聚合和游标
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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