Mongodb副本集RECOVERING

今天早上突然接收到数据人员说mongodb节点挂了,正式服APP不能访问,我登录到主节点查看集群状态 mongodb01这台机器是我们mongo副本集的主节点
root@mongodb01:~ # mongo 172.18.30.181:37017
MongoDB shell version v3.6.7
connecting to: mongodb://172.18.30.181:37017/test
MongoDB server version: 3.6.7
rset:PRIMARY> use admin
switched to db admin
rset:PRIMARY> db.auth("用户名","密码")
1

上面的步骤只是登录到节点并且切换成超级用户模式

rset:PRIMARY> rs.status();


image.png

image.png

这里发现一个问题,除了主节点以为所有的状态都是RECOVERING ,我去看了一下mongodb的日志.(这个可以在vim /etc/mongod.conf配置文件找日志路径)
信息如下:


image.png

一直在报同步延迟错误,登上去一台从节点看一下复制集信息

image.png

可以看到这里的mongodb的复制时间是在昨天的20:56:13左右,现在的时间已经是第二天的10:01:32了, 表示这台备库已经断档很久很久了,导致sync失败。
经过排查初步分析是由于数据量写入过大导致的,因为数据人员使用爬虫服务器往主节点写数据,从节点去同步数据的时候同步不过来,而主节点的oplog大小实在是太小,从节点还没有同步完主节点就已经更新了oplog进行下一步操作了,导致从节点跟不上主节点的速度直接断档了(主节点的硬件配置比从节点也要高出许多)所以我们需要再次人工同步,并调整一下oplog的大小

上网搜了一下资料,需要手动同步数据,mongo官网给了两种办法
1、 自动同步,最简单也是操作最少的一种办法,先把mongodb停止服务,然后把mongodb的数据目录移走,新建一个mongo的数据目录,再起服务,这样他就会自动去追赶主库的数据,缺点是恢复时间比较久,根据数据量来决定
2、 从另外一个成员拷贝数据文件, 停止备库,从primary库copy数据文件,在copy的时候,注意要把local库也复制过来,复制不能采用mongodump,仅仅只允许使用快照备份数据文件
分析了上面的2种方式,第一种方式,清空数据目录重启mongodb实例让mongodb初始化同步数据,操作简单,但是恢复时间比较长,需要花费更多时间替换数据,第二种方式从副本集合的另外一个成员拷贝数据目录后重启mongodb实例,这个恢复过程速度快但是需要比较多的手工操作步骤,为了方便和简单,我这里用第一种方式

一、把数据重新同步
1、再此之前先把mongodb的服务给停了,进去mongo里use admin库再输入db.shutdownServer()


image.png

2、然后进去mongodb的数据存放目录
[root@backup]:~ # cd /data


image.png

我的mongo的数据放在这个文件夹里,现在把原来的数据改个名字 新建一个mongo的数据文件夹,要知道自己的数据文件夹放哪里可以看/etc/mongod.conf文件

root@backup:/data # mv mongo mongo.bak #给旧的mongo数据文件进行改名

root@backup:/data # mkdir mongo #创建新的mongo文件夹

root@backup:~ # mongod -f /etc/mongod.conf #启动mongodb

image.png

启动成功 没有报错

查看一下新文件夹, mongodb副本集已经在向主节点同步数据了


image.png

登陆一下mongodb,切换超级用户(没有设置的不用做这个操作,我的mongodb做了设置不切换超级用户无法执行命令)

image.png

rset:STARTUP2> rs.status(); #查看一下集群信息


image.png

发现刚才重启的这台状态已经变成startup2了,接下来的就是等待了

等了大概一天同步数据,登上去看看
rset:PRIMARY> rs.status()


image.png

发现这个节点的数据已经恢复了,并加入了集群里,其他的副本集如果也是RECOVERING也要做相同的操作,总的来说就是停止服务,然后移走老的数据文件夹,新建新的文件夹,再起服务等他自己同步

二、把oplog调整大一点,防止以后又出现这种情况
参考至mongodb官方文档
https://docs.mongodb.com/manual/tutorial/change-oplog-size/

1、进入mongodb
rs0:SECONDARY> db.printReplicationInfo(); #查看当前副本集oplog状态,可以看到现在是2000MB的
configured oplog size: 2000MB
log length start to end: 0secs (0hrs)
oplog first event time: Thu Nov 08 2018 22:23:46 GMT+0800 (CST)
oplog last event time: Thu Nov 08 2018 22:23:46 GMT+0800 (CST)
now: Thu Nov 08 2018 17:45:42 GMT+0800 (CST)

rs0:SECONDARY> db.adminCommand({replSetResizeOplog: 1, size: 4000}) #调整oplog大小为4000MB

image.png

rs0:SECONDARY> db.printReplicationInfo(); #再查看一下,变成4000MB了

image.png

2、测试一下同步情况正不正常
rs0:PRIMARY> for(var i=0;i<4;i++){db.test.insert({"name":"test"+i,"age":123})} #在主节点插入4条数据测试一下
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY> db.test.find() #查看数据是否插入
{ "_id" : ObjectId("5be406de8da5c06ab0e7727f"), "name" : "test0", "age" : 123 }
{ "_id" : ObjectId("5be406de8da5c06ab0e77280"), "name" : "test1", "age" : 123 }
{ "_id" : ObjectId("5be406de8da5c06ab0e77281"), "name" : "test2", "age" : 123 }
{ "_id" : ObjectId("5be406de8da5c06ab0e77282"), "name" : "test3", "age" : 123 }

image.png

去从节点看一下,数据确实插入了
rs0:SECONDARY> db.test.find()
{ "_id" : ObjectId("5be406de8da5c06ab0e77281"), "name" : "test2", "age" : 123 }
{ "_id" : ObjectId("5be406de8da5c06ab0e77280"), "name" : "test1", "age" : 123 }
{ "_id" : ObjectId("5be406de8da5c06ab0e77282"), "name" : "test3", "age" : 123 }
{ "_id" : ObjectId("5be406de8da5c06ab0e7727f"), "name" : "test0", "age" : 123 }

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

推荐阅读更多精彩内容

  • NoSql数据库优缺点 在优势方面主要体现在下面几点: 简单的扩展 快速的读写 低廉的成本 灵活的数据模型 在不足...
    dreamer_lk阅读 2,730评论 0 6
  • 1. 副本集概述 某些情况下,副本可以提供更高的读取容量,就像客户端可以发送读操作到不同的服务器。在不同数据中心维...
    LLLeon阅读 10,486评论 2 7
  • 一、MongoDB简介 1.概述 ​ MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WE...
    郑元吉阅读 978评论 0 2
  • //使用配置文件启动(如未设置环境变量需要在安装路径的bin文件夹下运行)mongod --config c:\m...
    Anon_0507阅读 508评论 0 0
  • 简介 MongoDB 是一个基于分布式文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WE...
    大熊_7d48阅读 37,155评论 1 9