mongo回顾(十四:复制集)

首先简单的搭建mongodb复制集(一主两从),依旧采用docker
1,docker pull mongo
2,docker run --name s1 -p 27017:27017 -d mongo --replSet "RS"
修改port与name启动三个节点

--name 镜像启动的别名
-p 端口映射
-d 镜像名称
--replSet 集群名称

3,进入一个节点:docker exec -it s1 bash
4,执行initiate显示ok:1复制集就搭建好了

var config = {_id:"RS",members:[{_id:0,host:"127.0.0.1:27017"},{_id:1,host:"127.0.0.1:27018"},{_id:2,host:"127.0.0.1:27019"}]}
rs.initiate(config)


initiate.png

5,rs.status() 可以看到复制集状态(复制集可以只有单节点)
6,在从节点查看test库:db.test.find();可能报错,执行rs.slaveOk()即可


error.png

7,在主节点insert一条数据db.test.insert({a:1})
从节点db.test.find()可看到,则证明复制集搭建成功

使用复制集解决疑问
1,首先在主节点把一个从节点设置为延迟节点
https://docs.mongodb.com/manual/tutorial/configure-a-delayed-replica-set-member/

cfg = rs.conf()
cfg.members[2].priority = 0
cfg.members[2].hidden = true
cfg.members[2].secondaryDelaySecs = 36
rs.reconfig(cfg)

2,此时使用writeConcern 是等待状态:db.test.insert({count:3},{writeConcern:{w:3,j:true}})
且一个从节点很快,写入成功,一个需要等36S才成功

3,测试一:主节点执行db.test.insert({count:7},{writeConcern:{w:3,wtimeout:30000}})后,第一个节点写入成功,把第二个节点宕机,会发生什么


image.png

主节点显示超时,nInserted:1, find可以查到数据


image.png

宕机的节点,宕机前find是查不到数据的,重新启动数据可以查到


image.png

测试一说明writeConcern要求写入三个节点,写入途中一个节点宕机,其实仍然可以写入成功,当宕机的节点恢复后,数据仍会写入

4,测试二,主节点使用writeConcern写入3个节点,当从节点还没保存完成,主节点就宕机了。此时从节点数据会回滚吗?
主节点执行:db.test.insert({count:8},{writeConcern:{w:3,wtimeout:30000}})
主节点: 看到count:8
从节点一:看到count:8
从节点二:延时还没看到
docker kill s1
从节点一:变成主节点(从节点二执行 priority=0,没资格主节点),count:8数据还在
节点二:过一会儿看到count:8
恢复原来主节点:变成从节点,看到count:8

数据不会回滚,正常写入

5,测试三:只有三个节点,s1为主节点,s3为延时节点;主节点执行db.test.insert({count:12},{writeConcern:{w:4,wtimeout:10000}})后,数据是否正常插入
主节点:出现writeConcernError异常,数据正常插入
从节点s2: 数据正常插入
从节点s3: 到达延时时间后数据正常插入


image.png

6,测试四,只留主节点s1和延时节点s3,主节点执行db.test.insert({count:13},{writeConcern:{w:2,wtimeout:30000}})后,s3还没插入数据前使得s1宕机,s3到达延时时间可以正常插入数据吗
主节点:db.test.insert({count:13},{writeConcern:{w:2,wtimeout:30000}}),find可以看到数据
从节点s3:无法看到数据
docker kill s1
从节点s3(到达延时时间):可以看到数据
恢复从节点s2:从节点过一会变成主节点,find可以看到count:13数据
恢复s1:变成从节点,也能看到count:13

7,当副本集中只有1个节点活着,其他节点全部异常,此时仅存的节点会自动变成secondary,只能提供只读业务,无法提供写入业务。

8,测试只启动主节点s1,从节点s2;插入一条数据,s1,s2宕机,启动从节点s3,再启动s2,此时s3是否有数据
主节点:db.test.insert({count:14})
s1,s2宕机
s3启动(还是从节点),没count:14
s2启动被选举为主节点,有count:14
s3重新查询,发现count:14

writeConcern 虽然会增加写操作延迟时间,但并不会显著增加集群压力,因此无论是否等待,写操作最终都会复制到所有节点上。设置writeConcern只是让写操作等待复制后再返回而已

image.png

那mongodb会发生回滚吗

会,回滚只会发生在主节点的写操作 没能 成功在 从节点 上应用就Down 掉的情况下
https://docs.mongodb.com/manual/core/replica-set-rollbacks/#std-label-rollback-data-files

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 1.Mongodb介绍 Mongodb:是一个nosql的数据库的一种数据库,他是介于关系型数据库与非关系型数据库...
    紫晶葫芦阅读 377评论 0 1
  • 第十六天 redis-sentinel 监控 自动选主,切换(6381 slaveof no one) 2号从库(...
    燮_0e5d阅读 272评论 0 0
  • WiredTiger 是一个开源的、高性能、可伸缩的 MongoDB 数据存储引擎。 SSPL协议是只对使用云厂商...
    Bogon阅读 1,504评论 0 1
  • 何以高可用? 我们以前用Mysql的时候,经常是一台服务器走天下,如果只是用于学习,是没有问题的,但是在生产环境中...
    zy_think123阅读 917评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399